考研计算机复习资料数据结构(2)
本站小编 免费考研网/2016-08-19
答:int DeleteAndInsertSub(LinkList &la,LinkList &lb,int i,int j,int len)
{
int k;
LinkList p,q,prev,s; if(i<0||j<0||len<0)
return -1; p=la;
k=1;
prev=NULL; while(p&&k<i)
{
prev=p; p=p-
>next; k++;
}
if(!p)
return -1; q=p;k=1; while(q&&k<len)
{
q=q->next; k++;
}
if(!q)
return -1; if(!prev)
la=q->next; else
prev->next=q->next;
if(j==1)
{
}
else
{
q->next=lb; lb=q;
s=lb;k=1; while(s&&k<j-1)
{
s=s->next; k++;
}
if(!s)
return -1; q->next=s->next; s->next=p; return 1;
}
}
4.写一算法,将一带有头结点的单链表就地逆置,即要求逆置在原链表上进行,不允许 重新构造新链表。
(a)
(b)
图 单链表的倒置
函数原型如下:
void LinkList_reverse(LinkList &L);
答:void LinkList_reverse(LinkList &L)
{
LinkList p,q,s;
p=L->next;q=p->next;s=q->next;p->next=NULL; while(s->next)
{
q->next=p;p=q; q=s;s=s-
>next;
}
q->next=p;s->next=q;L->next=s;
}
5.写一算法,将带有头结点的非空单链表中数据域值最小的那个结点移到链表的最前面。 要求:不得额外申请新的链结点。函数原型如下:
void delinsert(LinkList &L);
答:void delinsert(LinkList &L)
{
p=L->next; //p 是链表的工作指针
pre=L; //pre 指向链表中数据域最小值结点的前驱
q=p; //q 指向数据域最小值结点,初始假定是第一结点
while(p->next!=NULL)
{
if(p->next->data<q->data) //找到新的最小值结点
{ pre=p; q=p->next; } p=p->next;
}
if(q!=L->next) //若最小值是第一元素结点,则不需再操作
{
pre->next=q->next; //将最小值结点从链表上摘下
q->next=L->next; //将 q 结点插到链表最前面
L->next=q;
}
}
6.编写一个算法来交换单链表中指针 P 所指结点与其后继结点,HEAD 是该链表的头指针, P 指向该链表中某一结点。 答:单链表中查找任何结点,都必须从头指针开始。本题要求将 指针 p 所指结点与其后继结 点交换,这不仅要求知道 p 结点,还应知道 p 的前驱结点。这样 才能在 p 与其后继结点交换 后,由原 p 结点的前驱来指向原 p 结点的后继结点。
LinkedList Exchange(LinkedList HEAD,p)
∥HEAD 是单链表头结点的指针,p 是链表中的一个结点。本算法将 p 所指结点与其后继结
点交换。
{q=head->next; ∥q 是工作指针,指向链表中当前待处理结点。
pre=head; ∥pre 是前驱结点指针,指向 q 的前驱。
while(q!=null && q!=p){pre=q;q=q->next;} ∥未找到 p 结点,后移指针。 if( p->next==null)printf(“p 无后继结点\n”); ∥p 是链表中最后一个结点,无后 继。
Else ∥处理 p 和后继结点交换
{q=p->next; ∥暂存 p 的后继。
pre->next=q; ∥p 前驱结点的后继指向 p 的后继。
p ->next=q->next;∥p 的后继指向原 p 后继的后继。
q ->next=p ;∥原 p 后继的后继指针指向 p。
}
}∥算法结束。
7.已知线性链表第一个链结点指针为 list,请写一算法,将该链表分解为两个带有头结 点的循环链表,并将两个循环链表的长度分别存放在各自头结点的数据域中。其中,线性表 中序号为偶数的元素分解到第一个循环链表中,序号为奇数的元素分解到第二个循环链表 中。
答:算法如下:
void split(ListNode *List, ListNode *&list1, ListNode *&list2)
{
list1=(ListNode *)malloc(sizeof(ListNode )); list2=(ListNode *)malloc(sizeof(ListNode )); p=list;;
q=list1; r=list2; len1=0; len2=0
; mark=1; while (p!=null)
{
if(mark=1)
{
q->next=p; q=q->next; len1++; mark=2;
}
else
{
r->next=p; r=r->next; len2++;
mark=1;
}
}
list1->data=len1; list2->data=len2; q->next=list1;
r->next=list2;
}
8. 设 A 和 B 是两个单链表,其表中元素递增有序。
试写一算法将 A 和 B 归并成一个按元素值递减有序的单链表 C,并要求辅助空间为 O(1)。 答
:Linklist merge(Linklist A,Linklist B)
{
Linklist C; Listnode *p; C=null; while (A&&B)
if(A->data<=B->data)
{p=A->next;A->next=C;C=A;A=p;} else
{p=B->next;B->next=C;C=B;B=p;} if (A)
while(A) { p=A->next;A->next=C;C=A;A=p;} else
while(B) {p=B->next;B->next=C;C=B;B=p;} return C;
}
二、栈、队列和数组
大纲要求:
(一) 栈和队列的基本概念
(二) 栈和队列的顺序存储结构
(三) 栈和队列的链式存储结构
(四) 栈和队列的应用
(五) 特殊矩阵的压缩存储 知识点:
1.栈、队列的定义及其相关数据结构的概念,包括:顺序栈、链栈、循环队列、链队列等。 栈与队列存取数据(请注意包括:存和取两部分)的特点。
2. 掌握顺序栈和链栈上的进栈和退栈的算法,并弄清栈空和栈满的条件。注意因栈在一端
操作,故通常链栈不设头结点。
3. 如何将中缀表达式转换成前缀、后缀表达式,了解对两种表达式求值的方法。
4.栈与递归的关系。用递归解决的几类问题:问题的定义是递归的,数据结构是递归的, 以及问题的解法是递归的。掌握典型问题的算法以及将递归算法转换为非递归算法,如 n!阶乘问题,fib数列问题,hanoi问题。了解在数值表达式的求解、括号的配对等问题 中应用栈的工作原理。
5. 掌握在链队列上实现入队和出队的算法。注意对仅剩一个元素的链队列删除元素时的处 理
(令队尾指针指向队头)。还需特别注意仅设尾指针的循环链队列的各种操作的实现
6.循环队列队空及队满的条件。队空定义为队头指针等于队尾指针,队满则可用牺牲一 个单元或是设标记的方法,这里特别注意取模运算。掌握循环队列中入队与出队算法。
7. 在后续章节中多处有栈和队列的应用,如二叉树遍历的递归和非递归算法、图的深度优
先遍历等都用到栈,而树的层次遍历、图的广度优先遍历等则用到队列。这些方面的应 用应重点掌握。
8. 数组在机器(内存)级上采用顺序存储结构。掌握数组(主要是二维)在以行序为主和 列序为主的存储中的地址计算方法。
9. 特殊矩阵(对称矩阵、对角矩阵、三角矩阵)在压缩存储是的下标变换公式。
练习题:
(一)选择题:
1. 一个栈的输入序列为 1 2 3 4,则( D )不可能是其出栈序列。
A. 1 2 4 3 B. 2 1 3 4 C. 1 4 3 2 D. 4 3 1 2
2. 一个递归算法必须包括( B )。
A. 递归部分 B. 终止条件和递归部分
C. 迭代部分 D.终止条件和迭代部分
3. 一个递归的定义可以用递归过程求解,也可以用非递归过程求解,但单从运行时间来 看,通常递归过程比非递归过程(B)。
5. 二维数组 N 的元素是 4 个字符(每个字符占一个存储单元)组成的串,行下标 i 的范 围从 0 到 4,列下标 j 的范围从 0 到 5,N 按行存储时元素 N[3][5]的起始地址与 N 按列
存储时元素( B )的起始地址相同。
A. N[2][4] B. N[3][4]
C. N[3][5] D. N[4][4]
6. 设有数组 A[i,j],数组的每个元素长度为 3 字节,i 的值为 1 到 8,j 的值为 1 到 10,
数组从内存首地址 BA 开始顺序存放,当以列为主序存放时,元素 A[5,8]的存储首地
址是( B )
A. BA+141 B. BA+180
C. BA+222 D. BA+225
7. 递归过程或函数调用时,处理参数及返回地址,要用一种称为( C )的数据结构。
A.队列 B.多维数组
C.栈 D. 线性表
8. 对于单链表形式的队列,队空的条件是( A )
A.F=R=nil B.F=R
C.F≠nil 且 R=nil D.R-F=1
9. 若循环队列以数组 Q[0..m-1]作为其存储结构,变量 rear 表示循环队列中的队尾元素 的实际位置,其移动按 rear=(rear+1) Mod m 进行,变量 length 表示当前循环队列 中的元素个数,则循环队列的队首元素的实际位置是( C )
A.rear-length B.(rear- length+m) Mod m
C.(1+rear+m-length) Mod m D.M- length
(二)应用题
1、(10 分)假设一个准对角矩阵
a11
a21
a12 a22
a33 a43
a34 a44
.....
ai, j
....
a2m1, 2m1
a2m1,2m
相关话题/数据结构
数据结构考研计算机复习资料
最新硕士研究生入学考试复习资料_数据结构考研计算机复习资料 一、线性表 大纲要求: (一) 线性表的定义和基本操作 (二) 线性表的实现 1. 顺序存储结构 1 2. 链式存储结构 2 3. 线性表的应用 知识点: 1. 深刻理解数据结构的概念,掌握数据结构的三要素:逻辑结构 ...专业课考研资料 本站小编 免费考研网 2016-08-13数据结构C语言版第2版课后习题答案 严蔚敏 李冬梅 吴伟民编著
目 录 第1章 绪论 1 第2章 线性表 5 第3章 栈和队列 13 第4章 串、数组和广义表 26 第5章 树和二叉树 33 第6章 图 43 第7章 查找 54 第8章 排序 65 第1章 绪论 1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。 答案: ...专业课考研资料 本站小编 免费考研网 2016-07-31李春葆《数据结构教程》(第4版)笔记和课后习题详解
下载地址:http://free.100xuexi.com/Ebook/88771.html 封面 内容简介 目录 第1章 绪 论 1.1 复习笔记 1.2 课后习题详解 第2章 线性表 2.1 复习笔记 2.2 课后习题详解 第3章 栈和队列 3.1 复习笔记 3.2 课后习题详解 第4章 串 4.1 复习笔记 4.2 课后习题详解 第5章 递 ...辅导考试考研资料 本站小编 免费考研网 2016-07-04严蔚敏《数据结构》(第2版)配套题库【名校考研真题+章节题库+模拟试题】
下载地址:http://free.100xuexi.com/Ebook/84051.html 封面 内容简介 目录 第一部分 名校考研真题 2015年全国硕士研究生入学统一考试计算机科学与技术学科联考计算机学科专业基础综合真题及详解 2014年全国硕士研究生入学统一考试计算机科学与技术学科联考计算机学科专业基础综合真题及详解 2013年全国硕 ...辅导考试考研资料 本站小编 免费考研网 2016-07-04李春葆《数据结构教程》(第4版)配套题库【名校考研真题+课后习题+章节题库+模拟试题】
下载地址:http://free.100xuexi.com/Ebook/88816.html 封面 内容简介 目录 第一部分 名校考研真题 说明:我们从指定李春葆《数据结构教程》为考研参考书目的名校历年考研真题以及计算机联考真题中挑选具有代表性的考研真题,并对其进行了详细的解答。通过这一部分的练习,可以帮助学员巩固基础知识、夯实专业 ...辅导考试考研资料 本站小编 免费考研网 2016-07-04严蔚敏《数据结构》(C语言版)配套题库【名校考研真题+章节题库+模拟试题】
下载地址:http://free.100xuexi.com/Ebook/84030.html 封面 内容简介 目录 第一部分 名校考研真题 2015年全国硕士研究生入学统一考试计算机科学与技术学科联考计算机学科专业基础综合真题及详解 2014年全国硕士研究生入学统一考试计算机科学与技术学科联考计算机学科专业基础综合真题及详解 2013年全国硕 ...辅导考试考研资料 本站小编 免费考研网 2016-07-04李春葆《数据结构教程》(C++语言描述)配套题库【名校考研真题+课后习题+章节题库+模拟试题】
下载地址:http://free.100xuexi.com/Ebook/109036.html 封面 内容简介 目录 第一部分 名校考研真题 说明:我们从指定李春葆《数据结构教程》(C++语言描述)为考研参考书目的名校历年考研真题以及计算机联考真题中挑选具有代表性的考研真题,并对其进行了详细的解答。通过这一部分的练习,可以帮助学员巩固基 ...辅导考试考研资料 本站小编 免费考研网 2016-07-04严蔚敏《数据结构》(C语言版)笔记和习题(含考研真题)详解
下载地址:http://free.100xuexi.com/Ebook/84022.html 封面 内容简介 目录 第1章 绪 论 1.1 复习笔记 1.2 强化习题详解 1.3 考研真题与典型题详解 第2章 线性表 2.1 复习笔记 2.2 强化习题详解 2.3 考研真题与典型题详解 第3章 栈和队列 3.1 复习笔记 3.2 强化习题详解 ...辅导考试考研资料 本站小编 免费考研网 2016-07-04李春葆《数据结构教程》(C++语言描述)笔记和课后习题详解
下载地址:http://free.100xuexi.com/Ebook/109034.html 封面 内容简介 目录 第1章 绪 论 1.1 复习笔记 1.2 课后习题详解 第2章 线性表 2.1 复习笔记 2.2 课后习题详解 第3章 栈和队列 3.1 复习笔记 3.2 课后习题详解 第4章 串 4.1 复习笔记 4.2 课后习题详解 第5章 数组 ...辅导考试考研资料 本站小编 免费考研网 2016-07-04严蔚敏《数据结构》(C语言版)【教材精讲+考研真题解析】讲义与视频课程【36小时高清视频】
下载地址:http://free.100xuexi.com/Ebook/125893.html 封面 内容简介 视频讲解教师简介 目录 第一部分 教材精讲[视频讲解] 第1章 绪 论[视频讲解] 第2章 线性表[视频讲解] 第3章 栈与队列[视频讲解] 第4章 串[视频讲解] 第5章 数组和广义表[视频讲解] 第6章 树和 ...辅导考试考研资料 本站小编 免费考研网 2016-07-04
