数据结构单元2练习参考答案_第1页
数据结构单元2练习参考答案_第2页
数据结构单元2练习参考答案_第3页
数据结构单元2练习参考答案_第4页
数据结构单元2练习参考答案_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单元练习2一判断题(下列各题,正确的请在前面的括号内打V;错误的打 X )(X) ( 1)线性表的链式存储结构优于顺序存储。(X) (2)链表的每个结点都恰好包含一个指针域。(V) (3)在线性表的链式存储结构中,逻辑上相邻的两个元素在物理位置上并不一定紧邻。(X) (4)顺序存储方式的优点是存储密度大,插入、删除效率高。(X) ( 5)线性链表的删除算法简单,因为当删除链中某个结点后,计算机会自动地将后续的各个 单元向前移动。(X) (6)顺序表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。(V) ( 7)线性表链式存储的特点是可以用一组任意的存储单元存储表中的数据元素。

2、(V) ( 8)线性表采用顺序存储,必须占用一片连续的存储单元。(X) (9)顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。(X) (10)插入和删除操作是数据结构中最基本的两种操作,所以这两种操作在数组中也经常使用。二填空题(1) 顺序表中逻辑上相邻的元素在物理位置上必须 相连。(2) 线性表中结点的集合是有限的,结点间的关系是一对一 关系。(3) 顺序表相对于链表的优点是:节省存储和随机存取。(4) 链表相对于顺序表的优点是:插入、删除方便。(5) 采用 顺序存储结构的线性表叫顺序表。(6) 顺序表中访问任意一个结点的时间复杂度均为0(1)。(7) 链表相对于顺序表的优点是插入、

3、删除方便;缺点是存储密度小 。(8) 在双链表中要删除已知结点 *P,其时间复杂度为 0(1)。(9) 在单链表中要在已知结点 *P之前插入一个新结点,需找到 *P的直接前趋结点的地址,其查找的时间复杂度为0(n)。(10) 单链表中需知道 头指针才能遍历整个链表。(11) 线性表中第一个结点没有直接前趋,称为开始 结点。(12) 在一个长度为n的顺序表中删除第i个元素,要移动n-i 个元素。(13) 在一个长度为n的顺序表中,如果要在第 i个元素前插入一个元素,要后移 n-i +1 个元 素。(14) 在无头结点的单链表中,第一个结点的地址存放在头指针中,而其它结点的存储地址存放在前趋 结点

4、的指针域中。(15) 当线性表的元素总数基本稳定,且很少进行插入和删除操作,但要求以最快速度存取线性表中的元素时,应采用 顺序存储结构。(16) 在线性表的链式存储中,元素之间的逻辑关系是通过指针 决定的。(17) 在双向链表中,每个结点都有两个指针域,它们一个指向其前趋 结点,另一个指向其 后继结点。(18) 对一个需要经常进行插入和删除操作的线性表,采用链式存储结构为宜。(19) 双链表中,设p是指向其中待删除的结点,则需要执行的操作为:p-prior-next=p-next;p-n ext-prior =p- prior 。(20) 在如图所示的链表中,若在指针P所在的结点之后插入数据域

5、值为a和b的两个结点,则可用下 列两个语 句:S-next-next=P-next 和P-next=S 来实现该操 作。aPbA三选择题S(1)在具有n个结点的单链表中,实现(A )的操作,其算法的时间复杂度都是0 (n)。A.遍历链表或求链表的第i个结点B.在地址为P的结点之后插入一个结点C.删除开始结点D 删除地址为P的结点的后继结点(2)设a、b、c为三个结点,p、10、20分别代表它们的地址,则如下的存储结构称为(B )。a10b20cAA.循环链表B.单链表C.双向循环链表D .双向链表(3)单链表的存储密度(C)。A .大于1B.等于1C.小于1D .不能确定(4 )已知一个顺序存

6、储的线性表,设每个结点占m个存储单元,若第一个结点的地址为B,则第个结点的地址为( A )。A.B+(i-1)*mB . B+i*mC.B-i*mD.B+(i+1)*m(5)在有n个结点的顺序表上做插入、删除结点运算的时间复杂度为(B )。A. 0( 1)B. 0 ( n)C.0 (n2)D.0( log 2 n)(6)设 Llink、Rlink分别为循环双链表结点的左指针和右指针,则指针P所指的兀素是双循环链表L的尾兀素的条件是(D )。A. P= LB. P-Llink= LC.P= NULLD.P-Rlink=L(7)两个指针P和Q,分别指向单链表的两个兀素,P所指元素是Q所指元素前驱的

7、条件是(BA. P-next=Q-next B . P-next= QC.Q_n ext= PD.P= Q(8)用链表存储的线性表,其优点是( C )。A.便于随机存取B.花费的存储空间比顺序表少C.便于插入和删除D.数据兀素的物理顺序与逻辑顺序相冋(9)在单链表中,增加头结点的目的是(C )。A.使单链表至少有一个结点B.标志表中首结点的位置C.方便运算的实现D.说明该单链表是线性表的链式存储结构(10)下面关于线性表的叙述中,错误的是(D )关系。A.顺序表必须占一片地址连续的存储单元B.顺序表可以随机存取任一元素C.链表不必占用一片地址连续的存储单元D .链表可以随机存取任一元素(11)

8、 L 是线性表,已知 LengthList ( L)的值是 5,经 DelList ( L , 2)运算后,LengthList (L) 的 值是(C )oA. 2B. 3C. 4D. 5(12 )单链表的示意图如下:Lc.-指向链表Q结点的前趋的指针是(B )。A. LB. PC. QD. R(13) 设p为指向单循环链表上某结点的指针,则*p的直接前驱( C )。A. 找不到B.查找时间复杂度为0( 1)C.查找时间复杂度为0 ( n)D .查找结点的次数约为n(14) 等概率情况下,在有n个结点的顺序表上做插入结点运算,需平均移动结点的数目为(C )。A. nB . (n-1)/2C.

9、n/2D. (n+1)/2(15) 在下列链表中不能从当前结点出发访问到其余各结点的是(C )。A.双向链表B .单循环链表C .单链表D.双向循环链表(16) 在顺序表中,只要知道( D ),就可以求出任一结点的存储地址。A.基地址B.结点大小C.向量大小D.基地址和结点大小(17)在双链表中做插入运算的时间复杂度为(A )oA. 0( 1)B. 0 (n)C20 (n )D. 0 (log 2n)(18)链表不具备的特点是(A )oA.随机访问B.不必事先估计存储空间C.插入删除时不需移动兀素D.所需空间与线性表成正比(19 )以下关于线性表的论述,不正确的为(C)。A. 线性表中的元素可

10、以是数字、字符、记录等不同类型B. 线性顺序表中包含的元素个数不是任意的C. 线性表中的每个结点都有且仅有一个直接前趋和一个直接后继D. 存在这样的线性表,即表中没有任何结点(20 )在(B )的运算中,使用顺序表比链表好。D .根据元素查找A.插入B.根据序号查找C.删除四. 下述算法的功能是什么?(1)ListNode *Demo1(LinkList L,ListNode *p) / L是有头结点的单链表ListNode *q=L-n ext;While (q & q- next!=p) q=q_n ext;if (q)return q;elseError( “*p not in L ”

11、);解:(1) 返回结点*p的直接前趋结点地址。(2) 交换结点*p和结点*q ( p和q 的(2)void Demo2(ListNode *p,ListNode*q) / p,*q是链表中的两个结点DataType temp; temp=p-data; p_data=q_data; q-data=temp;五. 程序填空1 已知线性表中的元素是无序的,并以带表头结点的单链表作存储。试写一算法,删除表中所有大 于min,小于max的元素,试完成下列程序填空。Void delete (lklist head; datatype min, max) q=head-n ext;while (p!=N

12、ULL) if (p-datadata=max )q=p; p= p- next ; else q_n ext=p_next ;delete (p);p= q_next ; 2. 在带头结点head的单链表的结点a之后插入新元素x,试完成下列程序填空。struct node elemtype data;node * n ext;void lki nsert (node *head, elemtype x) node *s, * p;s= new node;s-data= x;p=head-n ext;while (p!=NULL) & ( p-data!=a )_p=p_next;if (p=

13、NULL)coutnext=p-next pnext=s六. 程序设计题1. 写一个对单循环链表进行遍历(打印每个结点的值) 的算法,已知链表中任意结点的地址为P。2. 对给定的带头结点的单链表L,编写一个删除L中值为x的结点的直接前趋结点的算法。3. 将一个顺序表中从第i个结点开始的k个结点删除。4. 已知一个单链表,编写一个函数从单链表中删除自第i个结点起的k个结点。5. 有一个单链表(不同结点的数据域值可能相同),其头指针为head,编写一个函数计算值域为x的结点个数。6. 有两个循环单链表,链头指针分别为head1和head2,编写一个函数将链表head1链接到链表head2,链接后的

14、链表仍是循环链表。1. 解:void Show(ListNode *P) ListNode *t=P; do printf (”c,t-data); t=t-rear;while (t!=P);2. 解:void delete(ListNode *L) ListNode *p=L,*q;if (L-n ext-data=X) printf ( “值为x的结点是第一个结点,没有直接前趋结点可以删除”);return;for (;p-next-data!=X; q=p; p=p-next); II删除指针 p 所指向的结点q_n ext=p-n ext;delete p;解void Del(Seq

15、List *L,int i,int k) int j=i-1+k;for (j=0;jdatai-1+j=L-datai+k-2+j;if (i+k-2+jL-last)break;void Del(SeqList *L,int i,int k) int j=i-1+k;if (jL-last) printf(“超出范围 ! ” )return;for (j=0;jlast-i;j+)L-datai-1+j=L-datai+k-2+j; 4解:void Del(node *head,int i,int k)node *p,*q;int j;if (i=1)for (j=1;jnext;dele

16、te p;elsep=head;for (j=1;jnext; / pfor (j=1;jnext; / q p-next=q-next; delete q;删除前 k 个元素指向要删除的结点指向要删除的结点的前一个结点指向要删除的结点5 解:本题是遍历单链表的每个结点,每遇到一个结点,结点个数加1,结点个数存储在变量 n中。实现本题功能的函数如下:int counter(head) node *head ; node *p;int n=0;p=head ; while (p!=NULL) if (p-data=x) n+; p=p-next; return(n);6解:本题的算法思想是:先找

17、到两链表的尾指针,将第一个链表的尾指针与第二个链表的头结点 链接起来,使之成为循环的。函数如下:node *link (node *head1, *head2) node *p,*q;p=head1;while (p-next!=head1) p=p-next;q=head2;while (q-next!=head2) q=q-next;p-next=head2; q-next=head1;return (head1);模拟考题1在顺序存储的线性表第 i个位置插入新结点x,试完成下列程序填空。(或 L-last= L-last +1typedef struct/datatype dataMAX

18、LEN;/ MAXLENin t last;SeqList;int In sList(SeqList *L,i nt i,datatype x) int j;if (L-last= =MAXLEN-1) cout 顺序表已满!; return(-1);if( iL-last+2 )/ coutlast;j=i-1;j-)IIL-dataj+1=L-datajL-Latai-1=x ;IIL-last +将data和last圭寸装在一个结构体 为线性表的最大长度II 插入结点函数检查插入位置的正确性结点移动新结点插入)return(1);2. 一个带头指针的单链表,写出在值为x的结点之后插入 m个结点的算法。void in sertm (lklist head; int m) p=head-n ext;while (p!=NULL) & ( p-data!=x )p=p_n ext;if ( p-data=x ) q=p-n ext;for ( i=0; im ; i+ )II找到x,在其后插入 m个结点 s=new (no de);cindata=a ;p_n ext=s;p=s; p_n ext=q;3. 有

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论