第二章 线性表作业参考答案
数据结构第2章作业 线性表(答案)
第2章线性表班级学号__________-姓名一、判断正误(×)1. 链表的每个结点中都恰好包含一个指针。
链表中的结点可含多个指针域,分别存放多个指针。
例如,双向链表中的结点可以含有两个指针域,分别存放指向其直接前趋和直接后继结点的指针。
(×)2. 链表的物理存储结构具有同链表一样的顺序。
链表的存储结构特点是无序,而链表的示意图有序。
(×)3. 链表的删除算法很简单,因为当删除链中某个结点后,计算机会自动地将后续的各个单元向前移动。
链表的结点不会移动,只是指针内容改变。
(×)4. 线性表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。
混淆了逻辑结构与物理结构,链表也是线性表!且即使是顺序表,也能存放记录型数据。
(×)5. 顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。
正好说反了。
顺序表才适合随机存取,链表恰恰适于“顺藤摸瓜”(×)6. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。
前一半正确,但后一半说法错误,那是链式存储的优点。
顺序存储方式插入、删除运算效率较低,在表长为n的顺序表中,插入和删除一个数据元素,平均需移动表长一半个数的数据元素。
(×)7. 线性表在物理存储空间中也一定是连续的。
线性表有两种存储方式,顺序存储和链式存储。
后者不要求连续存放。
(×)8. 线性表在顺序存储时,逻辑上相邻的元素未必在存储的物理位置次序上相邻。
线性表有两种存储方式,在顺序存储时,逻辑上相邻的元素在存储的物理位置次序上也相邻。
(×)9. 顺序存储方式只能用于存储线性结构。
顺序存储方式不仅能用于存储线性结构,还可以用来存放非线性结构,例如完全二叉树是属于非线性结构,但其最佳存储方式是顺序存储方式。
(后一节介绍)(×)10. 线性表的逻辑顺序与存储顺序总是一致的。
理由同7。
链式存储就无需一致。
数据结构习题及答案 (2)
第二章线性表一、选择题1.一个线性表第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是( )(A)110 (B)108(C)100 (D)120参考答案:B2. 向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动()个元素。
(A)64(B)63 (C)63.5 (D)7参考答案:C3.线性表采用链式存储结构时,其地址()。
(A) 必须是连续的 (B) 部分地址必须是连续的(C) 一定是不连续的 (D) 连续与否均可以参考答案:D4. 在一个单链表中,若p所指结点不是最后结点,在p之后插入s所指结点,则执行()(A)s->next=p;p->next=s; (B) s->next=p->next;p->next=s;(C)s->next=p->next;p=s; (D)p->next=s;s->next=p;参考答案:B5.在一个单链表中,若删除p所指结点的后续结点,则执行()(A)p->next=p->next->next; (B)p=p->next; p->next=p->next->next;(C)p->next=p->next; (D)p =p->next->next;参考答案:A6.下列有关线性表的叙述中,正确的是()(A)线性表中的元素之间隔是线性关系(B)线性表中至少有一个元素(C)线性表中任何一个元素有且仅有一个直接前趋(D)线性表中任何一个元素有且仅有一个直接后继参考答案:A7.线性表是具有n个()的有限序列(n≠0)(A)表元素(B)字符(C)数据元素(D)数据项参考答案:C二、判断题1.线性表的链接存储,表中元素的逻辑顺序与物理顺序一定相同。
()2.如果没有提供指针类型的语言,就无法构造链式结构。
()3.线性结构的特点是只有一个结点没有前驱,只有一个结点没有后继,其余的结点只有一个前驱和后继。
第二章线性表作业参考答案
第二章线性表作业参考答案第二章线性表2.2 何时选用顺序表、何时选用链表作为线性表的存储结构为宜?答:在实际应用中,应根据具体问题的要求和性质来选择顺序表或链表作为线性表的存储结构,通常有以下几方面的考虑:1.基于空间的考虑。
当要求存储的线性表长度变化不大,易于事先确定其大小时,为了节约存储空间,宜采用顺序表;反之,当线性表长度变化大,难以估计其存储规模时,采用动态链表作为存储结构为好。
2.基于时间的考虑。
若线性表的操作主要是进行查找,很少做插入和删除操作时,采用顺序表做存储结构为宜;反之,若需要对线性表进行频繁地插入或删除等的操作时,宜采用链表做存储结构。
并且,若链表的插入和删除主要发生在表的首尾两端,则采用尾指针表示的单循环链表为宜。
2.6 下述算法的功能是什么?LinkList Demo(LinkList L){ // L 是无头结点单链表ListNode *Q,*P;if(L&&L->next){Q=L;L=L->next;P=L;while (P->next) P=P->next;P->next=Q; Q->next=NULL;}return L;}// Demo答:该算法的功能是:将开始结点摘下链接到终端结点之后成为新的终端结点,而原来的第二个结点成为新的开始结点,返回新链表的头指针。
2.9 设顺序表L是一个递增有序表,试写一算法,将x插入L中,并使L仍是一个有序表。
答:因已知顺序表L是递增有序表,所以只要从顺序表终端结点(设为i位置元素)开始向前寻找到第一个小于或等于x的元素位置i后插入该位置即可。
在寻找过程中,由于大于x的元素都应放在x之后,所以可边寻找,边后移元素,当找到第一个小于或等于x的元素位置i时,该位置也空出来了。
算法如下:#define ListSize 100 // 假定表空间大小为100typedef int DataType;//假定DataType的类型为int型typedef struct{DataType data[ListSize];// 向量data用于存放表结点int length; // 当前的表长度} Seqlist;//以上为定义表结构void InsertIncreaseList( Seqlist *L , Datatype x ){int i;if ( L->length>=ListSize)Error(“overflow");for ( i=L -> length ; i>0 && L->data[ i-1 ] > x ; i--)L->data[ i ]=L->data[ i ] ; // 比较并移动元素L->data[ i ] =x;L -> length++;}2.13 设 A和B是两个单链表,其表中元素递增有序。
数据结构第二章 线性表练习及答案
一、选择题1、用单链表方式存储的线性表,存储每个结点需要两个域,一个是数据域,另一个是()A、当前结点所在的地址域B、指针域C、空指针域D、空闲域2、不带头结点的单链表head为空的判断条件是()A、head==NULLB、head->next==NULLC、head->data==NULLD、head!=NULL3、在一个单链表中,已知q所指结点是p所指结点的前驱结点,若在p和q之间插入s结点,则执行()A、s->next=p; q->next=s;B、p->next=s->next; s->next=p;C、q->next=s->next; s->next=p;D、p->next=s; s->next=q;4、在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是()A、O(1)B、O(n)C、O(n2)D、O(nlog2n)5、一个单链表中,若删除p所指结点的后续结点,则执行()A、p->next=p->next->next;B、p=p->next; p->next=p->next->next;C、p->next=p;D、p=p->next->next;6、已知一个顺序存储的基本线性表,设每个结点需占m个存储单元,若第一个结点的地址为d1,则第i个结点的地址为()A、d1+(i-1)*mB、d1+i*mC、d1-i*mD、d1+(i+1)*m7、在n个结点的顺序表中,算法的时间复杂度是O(1)的操作是()A、访问第i个结点(1<=i<=n)和求第i个结点的直接前驱(2<=i<=n)B、在第i个结点后插入一个新结点(1<=i<=n)C、删除第i个结点(1<=i<=n)D、将n个结点从小到大排序8、下面给出的算法段是要把一个q所指新结点作为非空双向链表中的p所指结点的前驱结点插入到该双向链表中,能正确完成要求的算法段是()A、q->next=p; q->prior=p->prior; p->prior=q; p->prior->next=q;B、p->prior=q; q->next=p; p->prior->next=q; q->prior=p->prior;C、q->prior=p->prior; q->next=p; p->prior->next=q; p->prior=q;D、以上都不对9、在循环双链表的p所指结点之后插入s所指结点的操作是()A、p->next=s; s->prior=p; p->next->prior=s; s->next=p->next;B、p->next=s; p->next->prior=s; s->prior=p; s->next=p->next;C、s->prior=p; s->next=p->next; p->next=s; p->next->prior=s;D、s->prior=p; p->next->prior=s; s->next=p->next; p->next=s;10、从具有n个结点的单链表中查找其值等于x结点时,在查找成功的情况下,需平均比较()个结点。
第二章线性表作业-答案
2.8已知由单链表表示的线性表中,含有三类字符的数据元素( 2.8已知由单链表表示的线性表中,含有三类字符的数据元素(如:字母字符、数字字符 已知由单链表表示的线性表中,含有三类字符的数据元素 和其它字符) 和其它字符),试编写算法构造三个以循环链表表示的线性表,使每个表中只含同一类 的字符,且利用原表中的结点空间作为这三个表的结点空间,头结点可另辟空间。
2.8 已知由单链表表示的线性表中,含有三类 字符的数据元素( 字符的数据元素(如:字母字符、数字字符和 其它字符) 其它字符),试编写算法构造三个以循环链表 表示的线性表,使每个表中只含同一类的字 符,且利用原表中的结点空间作为这三个表 的结点空间,头结点可另辟空间。 2.9 假设在长度大于1的单循环链表中,既无 假设在长度大于1 头结点也无头指针。s 头结点也无头指针。s为指向链表中某个结 点的指针,试编写算法删除结点* 点的指针,试编写算法删除结点*s的直接前 趋结点。 2.10设顺序表L 2.10设顺序表L是一个递增有序表,试写一算 法,将x插入L中,并使L 法,将x插入L中,并使L仍是一个有序表。
Status locatenode(dullinklist &L,elemtype x) {dulnode *p,*q; p=q=Lp=q=L->next; while(p) (pp=p{if (p->data!=x) p=p->next; else {p->freq++; break;} } {pwhile(q) {if(q->freq>pq=q{if(q->freq>p->freq) q=q->next; {p->prior->next=pp->next->prior=pelse {p->prior->next=p->next; p->next->prior=p->prior; p->prior=qp->next=q; p->prior=q->prior; q->prior->next=p; q->prior=p} >priorq} return ok; }
第2章 线性表习题参考答案
习题二参考答案一、选择题1.链式存储结构的最大优点是( D )。
A.便于随机存取B.存储密度高C.无需预分配空间D.便于进行插入和删除操作2.假设在顺序表{a0,a1,……,a n-1}中,每一个数据元素所占的存储单元的数目为4,且第0个数据元素的存储地址为100,则第7个数据元素的存储地址是( D )。
A.106B. 107C.124D.1283.在线性表中若经常要存取第i个数据元素及其前趋,则宜采用( A )存储方式。
A.顺序表B. 带头结点的单链表C.不带头结点的单链表D. 循环单链表4.在链表中若经常要删除表中最后一个结点或在最后一个结点之后插入一个新结点,则宜采用( C )存储方式。
A.顺序表B. 用头指针标识的循环单链表C. 用尾指针标识的循环单链表D. 双向链表5.在一个单链表中的p和q两个结点之间插入一个新结点,假设新结点为S,则修改链的java语句序列是( D )。
A.s.setNext(p); q.setNext(s);B. p.setNext(s.getNext()); s.setNext(p);C. q.setNext(s.getNext()); s.setNext(p);D. p.setNext(s); s.setNext(q);6.在一个含有n个结点的有序单链表中插入一个新结点,使单链表仍然保持有序的算法的时间复杂度是( C )。
A.O(1)B. O(log2n)C. O(n)D. O(n2)7.要将一个顺序表{a0,a1,……,a n-1}中第i个数据元素a i(0≤i≤n-1)删除,需要移动( B )个数据元素。
A.iB. n-i-1C. n-iD. n-i+18.在带头结点的双向循环链表中的p结点之后插入一个新结点s,其修改链的java语句序列是( D )。
A.p.setNext(s); s.setPrior(p); p.getNext().setPrior(s);s.setNext(p.getPrior());B.p.setNext(s); p.getNext().setPrior(s); s.setPrior(p);s.setNext(p.getNext());C.s.setPrior(p); s.setNext(p.getNext()); p.setNext(s);p.getNext().setPrior(s);D.s.setNext(p.getNext()); s.setPrior(p); p.getNext().setPrior(s);p.setNext(s);9.顺序表的存储密度是( B ),而单链表的存储密度是( A )。
第二章课后作业答案
第二章线性表习题(答案)1.描述以下三个概念的区别:头指针,头结点,首元素结点。
首元结点是指链表中存储线性表中第一个数据元素a1的结点。
为了操作方便,通常在链表的首元结点之前附设一个结点,称为头结点,该结点的数据域中不存储线性表的数据元素,其作用是为了对链表进行操作时,可以对空表、非空表的情况以及对首元结点进行统一处理。
头指针是指向链表中第一个结点(或为头结点或为首元结点)的指针。
若链表中附设头结点,则不管线性表是否为空表,头指针均不为空。
否则表示空表的链表的头指针为空。
2.填空:(1)在顺序表中插入或删除一个元素,需要平均移动一半元素,具体移动的元素个数与插入或删除的位置有关。
(2)在顺序表中,逻辑上相邻的元素,其物理位置也相邻。
在单链表中,逻辑上相邻的元素,其物理位置不一定相邻。
(3)在带头结点的非空单链表中,头结点的存储位置由头指针指示,首元素结点的存储位置由头结点的next域指示,除首元素结点外,其它任一元素结点的存储位置由其直接前趋的next域指示。
3.已知L是无表头结点的单链表,且P结点既不是首元素结点,也不是尾元素结点。
按要求从下列语句中选择合适的语句序列。
a. 在P结点后插入S结点的语句序列是:(4)、(1)。
b. 在P结点前插入S结点的语句序列是:(7)、(11)、(8)、(4)、(1)。
c. 在表首插入S结点的语句序列是:(5)、(12)。
d. 在表尾插入S结点的语句序列是:(11)、(9)、(1)、(6)。
供选择的语句有:(1)P->next=S; (2)P->next= P->next->next; (3)P->next= S->next;(4)S->next= P->next; (5)S->next= L; (6)S->next= NULL;(7)Q= P; (8)while(P->next!=Q) P=P->next;(9)while(P->next!=NULL) P=P->next; (10)P= Q;(11)P= L; (12)L= S; (13)L= P;4.设线性表存于a[n]中且递增有序。
第2章线性表习题参考答案
1.D
2.B
3.B
4.B
5.B
6.B
7.D
8.B
9.C
10.B
11.C
12.C
13.B
14.D
15.A
16.B
17.B
18.C
19.A
20.C
21.D
22.A
23.A
24.A
二、填空题
1.首元素其直接前驱结点的链域的值
2.HL→next =NULL;HL=HL→next
3.有限、一对一
4.O(1)随机存取
若用头指针来表示该链表,则查找终端结点的时间为O(n)。
五、编程题
1.解答:由于在单链表中只给出一个头指针,所以只能用遍历的方法来数单链表中的结点个数了。算法如下:
int ListLength ( LinkList L )
{
int len=0 ;
ListNode *p;
p=L; //设该表有头结点
while ( p->next )
int i;
for (i=0;i<=L->length/2;i++)//L->length/2为整除运算
{temp = L->data[i]; //交换数据
L -> data[ i ] = L -> data[ L -> length-1-i];
L -> data[ L -> length - 1 - i ] = temp;
p=p->next;
}
return min;
}
3.int searchmax(linklist l)
{int max;
数据结构习题及答案 (2)
第二章线性表一、选择题1.一个线性表第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是( )(A)110 (B)108(C)100 (D)120参考答案:B2. 向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动()个元素。
(A)64(B)63 (C)63.5 (D)7参考答案:C3.线性表采用链式存储结构时,其地址()。
(A) 必须是连续的 (B) 部分地址必须是连续的(C) 一定是不连续的 (D) 连续与否均可以参考答案:D4. 在一个单链表中,若p所指结点不是最后结点,在p之后插入s所指结点,则执行()(A)s->next=p;p->next=s; (B) s->next=p->next;p->next=s;(C)s->next=p->next;p=s; (D)p->next=s;s->next=p;参考答案:B5.在一个单链表中,若删除p所指结点的后续结点,则执行()(A)p->next=p->next->next; (B)p=p->next; p->next=p->next->next;(C)p->next=p->next; (D)p =p->next->next;参考答案:A6.下列有关线性表的叙述中,正确的是()(A)线性表中的元素之间隔是线性关系(B)线性表中至少有一个元素(C)线性表中任何一个元素有且仅有一个直接前趋(D)线性表中任何一个元素有且仅有一个直接后继参考答案:A7.线性表是具有n个()的有限序列(n≠0)(A)表元素(B)字符(C)数据元素(D)数据项参考答案:C二、判断题1.线性表的链接存储,表中元素的逻辑顺序与物理顺序一定相同。
()2.如果没有提供指针类型的语言,就无法构造链式结构。
()3.线性结构的特点是只有一个结点没有前驱,只有一个结点没有后继,其余的结点只有一个前驱和后继。
《数据结构》吕云翔编著第2章线性表习题解答
《数据结构》吕云翔编著第2章线性表习题解答数据结构第2章线性表习题解答一、习题解答1. 假设有一个线性表L={a1, a2, ..., an},设计一种算法,将线性表的所有元素逆置。
解答:可以使用两个指针i和j,分别指向线性表的第一个元素和最后一个元素,然后交换这两个指针所指向的元素,接着i向后移动一个单位,j向前移动一个单位,再次交换他们所指向的元素。
依次类推,直到i和j指针相遇为止。
这样就完成了线性表的逆置。
2. 设线性表L={a1, a2, ..., an},设计一个算法,删除其中所有值为x 的元素。
解答:可以使用一个指针i遍历线性表,当遇到一个元素值等于x 时,将该元素删除,同时将后面的元素依次前移一位。
直到整个线性表遍历完毕。
3. 设有两个线性表LA={a1, a2, ..., am}和LB={b1, b2, ..., bn},其中元素递增有序排列。
设计一个算法,将LA和LB合并成一个新的线性表LC,且元素递增有序排列。
解答:可以使用两个指针i和j分别指向LA和LB的第一个元素,并且使用一个指针k指向LC的最后一个元素。
比较LA[i]和LB[j]的大小,将较小的元素插入到LC的末尾,然后相应指针后移一位,直到其中一个指针到达对应线性表的末尾。
最后,将剩余的元素插入到LC的末尾,即可得到合并后的线性表LC。
4. 设线性表L={a1, a2, ..., an},设计一个算法,找出其中最大的元素以及最大元素的位置。
解答:可以使用一个变量max记录当前遍历到的最大元素,初始化为L[0],同时使用变量position记录最大元素的位置,初始值也为0。
然后遍历整个线性表,若遇到L[i]大于max,则更新max为L[i],同时更新position为i。
遍历完毕后,max就是最大元素,position就是最大元素的位置。
5. 在线性表L={a1, a2, ..., an}中,设计一个算法,找出倒数第k个位置上的元素。
第2章 线性表习题及参考答案
第二章线性表习题一判断题1.线性表的逻辑顺序与存储顺序总是一致的。
2.顺序存储的线性表可以按序号随机存取。
3.顺序表的插入和删除操作不需要付出很大的时间代价,因为每次操作平均只有近一半的元素需要移动。
4.线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有相同的特性,因此是属于同一数据对象。
5.在线性表的顺序存储结构中,逻辑上相邻的两个元素在物理位置上并不一定紧邻。
6.在线性表的链式存储结构中,逻辑上相邻的元素在物理位置上不一定相邻。
7.线性表的链式存储结构优于顺序存储结构。
8.在线性表的顺序存储结构中,插入和删除时,移动元素的个数与该元素的位置有关。
9.线性表的链式存储结构是用一组任意的存储单元来存储线性表中数据元素的。
10.在单链表中,要取得某个元素,只要知道该元素的指针即可,因此,单链表是随机存取的存储结构。
二单选题 (请从下列A,B,C,D选项中选择一项)1.线性表是( ) 。
(A) 一个有限序列,可以为空;(B) 一个有限序列,不能为空;(C) 一个无限序列,可以为空;(D) 一个无序序列,不能为空。
2.对顺序存储的线性表,设其长度为n,在任何位置上插入或删除操作都是等概率的。
插入一个元素时平均要移动表中的()个元素。
(A) n/2 (B) n+1/2 (C) n -1/2 (D) n3.线性表采用链式存储时,其地址( ) 。
(A) 必须是连续的;(B) 部分地址必须是连续的;(C) 一定是不连续的;(D) 连续与否均可以。
4.用链表表示线性表的优点是()。
(A)便于随机存取 (B)花费的存储空间较顺序存储少(C)便于插入和删除 (D)数据元素的物理顺序与逻辑顺序相同5.某链表中最常用的操作是在最后一个元素之后插入一个元素和删除最后一个元素,则采用( )存储方式最节省运算时间。
(A)单链表 (B)双链表 (C)单循环链表 (D)带头结点的双循环链表6.循环链表的主要优点是( )。
数据结构--线性表习题及答案
数据结构--线性表习题及答案第⼆章线性表⼀、选择题1、若长度为n的线性表采⽤顺序存储结构,在其第i个位置插⼊⼀个新元素算法的时间复杂度()。
A. O(log2n)B.O(1)C. O(n)D.O(n2)2、若⼀个线性表中最常⽤的操作是取第i个元素和找第i个元素的前趋元素,则采⽤()存储⽅式最节省时间。
A. 顺序表B. 单链表C. 双链表D. 单循环链表3、具有线性结构的数据结构是()。
A. 图B. 树C. ⼴义表D.栈4、在⼀个长度为n的顺序表中,在第i个元素之前插⼊⼀个新元素时,需向后移动()个元素。
A. n-iB. n-i+1C. n-i-1D. i5、⾮空的循环单链表head的尾结点p满⾜()。
A. p->next==headB. p->next==NULLC. p==NULLD. p==head6、链表不具有的特点是()。
A. 可随机访问任⼀元素B. 插⼊删除不需要移动元素C. 不必事先估计存储空间D. 所需空间与线性表长度成正⽐7、在双向循环链表中,在p指针所指的结点后插⼊⼀个指针q所指向的新结点,修改指针的操作是()。
A. p->next=q;q->prior=p;p->next->prior=q;q->next=q;B. p->next=q;p->next->prior=q;q->prior=p;q->next=p->next;C. q->prior=p;q->next=p->next;p->next->prior=q;p->next=q;D. q->next=p->next;q->prior=p;p->next=q;p->next=q;8、线性表采⽤链式存储时,结点的存储地址()。
A. 必须是连续的B. 必须是不连续的C. 连续与否均可D. 和头结点的存储地址相连续9、在⼀个长度为n的顺序表中删除第i个元素,需要向前移动()个元素。
第二章线性表答案
第⼆章线性表答案第2章线性表⼀选择题1.下述哪⼀条是顺序存储结构的优点?( A )A.存储密度⼤ B.插⼊运算⽅便 C.删除运算⽅便 D.可⽅便地⽤于各种逻辑结构的存储表⽰2.下⾯关于线性表的叙述中,错误的是哪⼀个?( B )A.线性表采⽤顺序存储,必须占⽤⼀⽚连续的存储单元。
B.线性表采⽤顺序存储,便于进⾏插⼊和删除操作。
C.线性表采⽤链接存储,不必占⽤⼀⽚连续的存储单元。
D.线性表采⽤链接存储,便于插⼊和删除操作。
3.线性表是具有n个( C )的有限序列(n>0)。
A.表元素 B.字符 C.数据元素 D.数据项 E.信息项4.若某线性表最常⽤的操作是存取任⼀指定序号的元素和在最后进⾏插⼊和删除运算,则利⽤( A )存储⽅式最节省时间。
A.顺序表 B.双链表 C.带头结点的双循环链表 D.单循环链表5.某线性表中最常⽤的操作是在最后⼀个元素之后插⼊⼀个元素和删除第⼀个元素,则采⽤( D )存储⽅式最节省运算时间。
A.单链表 B.仅有头指针的单循环链表 C.双链表D.仅有尾指针的单循环链表6.设⼀个链表最常⽤的操作是在末尾插⼊结点和删除尾结点,则选⽤( D )最节省时间。
A. 单链表B.单循环链表C. 带尾指针的单循环链表D.带头结点的双循环链表7.若某表最常⽤的操作是在最后⼀个结点之后插⼊⼀个结点或删除最后⼀个结点。
则采⽤( D )存储⽅式最节省运算时间。
A.单链表 B.双链表 C.单循环链表 D.带头结点的双循环链表8. 静态链表中指针表⽰的是( BC ).A.内存地址 B.数组下标 C.下⼀元素地址D.左、右孩⼦地址9. 链表不具有的特点是( C )A.插⼊、删除不需要移动元素 B.可随机访问任⼀元素C.不必事先估计存储空间 D.所需空间与线性长度成正⽐10. 下⾯的叙述不正确的是( BC )A.线性表在链式存储时,查找第i个元素的时间同i的值成正⽐表4s→供选择的答案:A.连续B.单向链接C.双向链接D.不连接E.循环链接F.树状G.⽹状H.随机I.顺序J.顺序循环12.(1) 静态链表既有顺序存储的优点,⼜有动态链表的优点。
线性表答案
第二章线性表答案(总8页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--数据结构与算法上机作业第二章线性表一、选择题1、若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新的元素算法的时间复杂度为 C 。
A. O(log2n)B. O(1)C. O(n)D. O(n2)2、以下关于线性表的说法中,不正确的是 C 。
A. 线性表中的数据元素可以是数字、字符、结构等不同类型B. 线性表中包含的数据元素个数不是任意的C. 线性表中的每一个结点都有且只有一个直接前驱和直接后继D. 存在这样的线性表:表中各结点都没有直接前驱和直接后继3、在有n个结点的顺序表上做插入、删除结点运算的时间复杂度为 B 。
A. O(1)B. O(n)C. O(n2)D. O(log2n)4、等概率情况下,在有n个结点的顺序表上做插入结点操作,需平均移动的结点数目为C 。
提示:插入的位置有n+1个,移动总数为:1+2+3+……+nA. nB. (n-1)/2C. n/2D. (n+1)/25、在一个长度为n的顺序存储的线性表中查找值为x的元素时,平均查找长度(及x同元素的平均比较次数,假定查找每个元素的概率都相等)为 C 。
A. nB. n/2C. (n+1)/2D. (n-1)/26、在顺序表中,只要知道 D ,就可以求出任一结点的存储地址。
A. 基地址B. 结点大小C. 向量大小D. 基地址和结点大小7、将两个各有n个元素的有序表归并为一个有序表,其最少的比较次数是A 。
A. nB. 2n-1C. 2nD. n-18、线性表采用链表存储时其存储地址要求 D 。
A. 必须是连续的B. 部分地址必须是连续的C. 必须是不连续的D. 连续的和不连续的都可以9、下面关于线性表的描述中,错误的是 B 。
A. 线性表采用顺序存储,必须占用一片连续的存储单元B. 线性表采用顺序存储,便于进行插入和删除操作C. 线性表采用链式存储,不必占用一片连续的存储单元D. 线性表采用链式存储,便于插入和删除操作10、向具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是 BA. O(1)B. O(n)C. O(n2)D. O(log2n)11、在一个带头结点的单链表HL中,若要向表头插入一个由指针p指向的结点,则执行的语句是 D 。
(完整版)数据结构第二章线性表1答案
(A )需经常修改L 中的结点值 (E )需不断对L 进行删除插入第二部分线性表、选择题1 •关于顺序存储的叙述中,哪一条是不正确的 (B )A. 存储密度大B. 逻辑上相邻的结点物理上不必邻接C. 可以通过计算直接确定第i 个结点的位置D. 插入、删除操作不方便2.长度为n 的单链表连接在长度为 m 的单链表后的算法的时间复杂度为(C )A 0( n )B 0(1)C 0(m )D 0(m+n )3 .在n 个结点的顺序表中,算法的时间复杂度是0(1)的操作是:(A )A 访问第i 个结点(1<=i<=n )和求第i 个结点的直接前趋(2<=i<=n)B 在第i 个结点(1<=i<=n )后插入一个新结点C 删除第i 个结点(1<=i<=n)D 将n 个结点从小到大排序4.一个向量第一个兀素的存储地址是100 ,每个兀素的长度为 2 ,则第5 个兀素的地址是(B )( A ) 110 ( B ) 108 (C ) 100 ( D ) 1205 .已知一个顺序存储的线性表, 设每个结点需要占 m 个存储单元,若第一个结点的地址为 da ,则第i 个结点的地址为:(A )7 .链表是一种采用( B )存储结构存储的线性表。
(A )顺序 (B )链式 (C )星式 (D )网状8 .线性表若采用链式存储结构时,要求内存中可用存储单兀的地址:(D )(A )必须是连续的 (B )部分地址必须是连续的 (C )一定是不连续的(D )连续或不连续都可以9 .线性表L 在_ ( B )情况下适用于使用链式结构实现。
A ) da+(i-1)*mB ) da+i*m6.在具有n 个结点的单链表中,实现(A )遍历链表和求链表的第i 个结点C )删除开始结点 C ) da-i*mD ) da+(i+1)*mA )的操作,其算法的时间复杂度为 0(n )。
B )在地址为p 的结点之后插入一个结点D ) 删除地址为p 的结点的后继结点10.在长度为n 的顺序表的第i(1 < i < n+1)个位置上插入一个兀素,兀素的移动次数为( A )A.n-i+1B.n-iC.iD.i-1.线性表是( A )。
数据结构第二章线性表作业习题及答案——北理工版
第二章(线性表)作业(参见《数据结构题集》第2章部分P13)一、在什么情况下用顺序表比链表好?(题集2.3)二、单选题:1、线性表的顺序存储是通过何种方式表示元素之间的逻辑关系。
①后继元素的地址②元素的存储顺序③左右孩子地址④后继元素的数组下标2、在线性表顺序存储结构中,在第I个元素之前插入新元素一般需要。
①移动元素②修改头指针③修改指针④申请新的结点空间3、在长度为n的顺序表的第I个元素之前插入一新元素的算法的时间复杂度为。
①O(n) ②O(1)③O(n2) ④O(Log2n)三、编写顺序表的判空操作算法。
四、编写顺序表求表长操作的算法。
五、已知L是带表头结点的非空单链表,且P结点既不是首元结点,也不是尾元结点,试从下列(1) ~ (14)提供的答案中选择合适的语句序列填空。
(题集2.7)a.删除P结点的直接后继结点的语句序列是_______ __________。
b.删除P结点的直接前驱结点的语句序列是_______________ __。
c.删除P结点的语句序列是_____________________________ _ _。
d.删除首元结点的语句序列是___________________________ __。
e.删除尾元结点的语句序列是____ _________________________。
(1)p = p->next;(2)p->next = p;(3)p->next = p->next->next;(4)p = p->next->next;(5)while ( p!=NULL ) p=p->next;(6)while ( q->next!=NULL ) { p=q; q=q->next; }(7)while ( p->next!=q ) p=p->next;(8)while ( p->next->next!=q ) p=p->next;(9)while ( p->next->next!=NULL ) p=p->next;(10)q=p;(11)q=p->next;(12)p=l;(13)l=l->next;(14)free(q);六、算法设计。
第二章_线性表(参考答案)
第二章线性表一、填空题1、数据逻辑结构包括线性结构、树型结构、图型结构这三种类型,树形结构和图形结构合称为非线性结构。
2、在线性结构中,第一个结点没有前驱结点,其余每个结点有且只有个前驱结点,最后一个结点没有后续结点,其余每个结点有且只有一个后续结点。
3、在顺序表中插入或删除一个元素,需要平均移动一半元素,具体移动的元素个数与插入或删除的位置有关。
4、在顺序表中,逻辑上相邻的元素,其物理位置一定相邻。
在单链表中,逻辑上相邻的元素,其物理位置不一定相邻。
5、在带头结点的非空单链表中,头结点的存储位置由头指针指示,首元素结点的存储位置由头结点的next域指示,除首元素结点外,其它任一元素结点的存储位置由其直接前趋结点的next域指示。
6、阅读下列算法,并补充所缺内容。
void purge_linkst( ListNode *& la ){// 从头指针为 la 的有序链表中删除所有值相同的多余元素,并释放被删结点空间ListNode *p,*q;if(la==NULL) return;q=la; p = la->link;while (p){if (p && ___(1)p->data!=q->data___) {q=p; p = p->link;}else{q->link= ___(2)p->link___;delete(p);p=___(3)q->link___;}}//while}// purge_linkst二、选择题1、在数据结构中,从逻辑上可以把数据结构分成 C。
A、动态结构和静态结构B、紧凑结构和非紧凑结构C、线性结构和非线性结构D、内部结构和外部结构2、线性表的逻辑顺序与存储顺序总是一致的,这种说法 B。
A、正确B、不正确3、线性表若采用链式存储结构时,要求内存中可用存储单元的地址D。
A、必须是连续的B、部分地址必须是连续的C、一定是不连续的D、连续或不连续都可以4、在以下的述叙中,正确的是B。
PTA 第二章 线性表作业及答案 数据结构平时作业
A. 38 B. 43 C. 26 D. 29
2、完成下列填空题(每空3分,共9分)。
1.在顺序表L中第i个位置上插入一个新的元素e:
Status ListInsert_Sq(SqList &L , int i , ET e){
}
for( j=L.length ; j>=i ; --j )
___L.elem[j]=L.elem[j-1]____;
L.elem[j]=e ;
++L.length_______;
return OK;
}
2.删除双向(DuLinkList L, DuLinkList p) {
}
for (k=0,i=0;i<A.length;i++)
{
if(A.data[i]==’#’) k++;
else A.data[i-k]= A.data[i];
}
A.length= A.length-k;
}
2.(15分)已知带头结点的单循环链表L,编写算法实现删除其中所有值为e的数据元素结点。
(要求:类型定义、算法描述和算法时间复杂度分析)
return;
p = L;
while (p->next != L)
{
if (p->next->data != e)
P = p->next;
else
{ q = p->next;p->next = q->next; free(q);}
}
}
时间复杂度为O(n)。(2分)
《数据结构》第二章线性表习题及参考答案
《数据结构》第二章线性表习题一、单项选择题1. 线性表是________。
A.一个有限序列,可以为空B.一个有限序列,不可以为空C.一个无限序列,可以为空D.一个无限序列,不可以为空2. 在一个长度为n的顺序表中删除第i个元素(0<=i<=n)时,需向前移动个元素。
A.n-i B.n-i+l C.n-i-1 D.i3. 线性表采用链式存储时,其地址________。
A.必须是连续的B.一定是不连续的C.部分地址必须是连续的D.连续与否均可以4. 从一个具有n个结点的单链表中查找其值等于x的结点时,在查找成功的情况下,需平均比较________个元素结点。
A.n/2 B.n C.(n+1)/2 D.(n-1)/25. 在双向循环链表中,在p所指的结点之后插入s指针所指的结点,其操作是____。
A. p->next=s; s->prior=p;p->next->prior=s; s->next=p->next;B. s->prior=p; s->next=p->next;p->next=s; p->next->prior=s;C. p->next=s; p->next->prior=s;s->prior=p; s->next=p->next;D. s->prior=p; s->next=p->next;p->next->prior=s; p->next=s;6. 设单链表中指针p指向结点m,若要删除m之后的结点(若存在),则需修改指针的操作为________。
A.p->next=p->next->next; B.p=p->next; C.p=p->next->next; D.p->next=p;7. 在一个长度为n的顺序表中向第i个元素(0< i<n+l )之前插入一个新元素时,需向后移动______个元素。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第二章线性表
2.2 何时选用顺序表、何时选用链表作为线性表的存储结构为宜?
答:
在实际应用中,应根据具体问题的要求和性质来选择顺序表或链表作为线性表的存储结构,通常有以下几方面的考虑:
1.基于空间的考虑。
当要求存储的线性表长度变化不大,易于事先确定其大小时,为了节约存储空间,宜采用顺序表;反之,当线性表长度变化大,难以估计其存储规模时,采用动态链表作为存储结构为好。
2.基于时间的考虑。
若线性表的操作主要是进行查找,很少做插入和删除操作时,采用顺序表做存储结构为宜;反之,若需要对线性表进行频繁地插入或删除等的操作时,宜采用链表做存储结构。
并且,若链表的插入和删除主要发生在表的首尾两端,则采用尾指针表示的单循环链表为宜。
2.6 下述算法的功能是什么?
LinkList Demo(LinkList L){ // L 是无头结点单链表
ListNode *Q,*P;
if(L&&L->next){
Q=L;L=L->next;P=L;
while (P->next) P=P->next;
P->next=Q; Q->next=NULL;
}
return L;
}// Demo
答:
该算法的功能是:将开始结点摘下链接到终端结点之后成为新的终端结点,而原来的第二个结点成为新的开始结点,返回新链表的头指针。
2.9 设顺序表L是一个递增有序表,试写一算法,将x插入L中,并使L仍是一个有序表。
答:
因已知顺序表L是递增有序表,所以只要从顺序表终端结点(设为i位置元素)开始向前寻找到第一个小于或等于x的元素位置i后插入该位置即可。
在寻找过程中,由于大于x的元素都应放在x之后,所以可边寻找,边后移元素,当找到第一个小于或等于x的元素位置i时,该位置也空出来了。
算法如下:
#define ListSize 100 // 假定表空间大小为100
typedef int DataType;//假定DataType的类型为int型
typedef struct{
DataType data[ListSize];// 向量data用于存放表结点
int length; // 当前的表长度
} Seqlist;
//以上为定义表结构
void InsertIncreaseList( Seqlist *L , Datatype x )
{
int i;
if ( L->length>=ListSize)
Error(“overflow");
for ( i=L -> length ; i>0 && L->data[ i-1 ] > x ; i--)
L->data[ i ]=L->data[ i ] ; // 比较并移动元素
L->data[ i ] =x;
L -> length++;
}
2.13 设 A和B是两个单链表,其表中元素递增有序。
试写一算法将A和B归并成一个按元素值递减有序的单链表C,并要求辅助空间为O(1),请分析算法的时间复杂度。
解:
根据已知条件,A和B是两个递增有序表,所以可以先取A表的表头建立空的C表。
然后同时扫描A 表和B表,将两表中最大的结点从对应表中摘下,并作为开始结点插入C表中。
如此反复,直到A表或B 表为空。
最后将不为空的A表或B表中的结点依次摘下并作为开始结点插入C表中。
这时,得到的C表就是由A表和B表归并成的一个按元素值递减有序的单链表C。
并且辅助空间为O(1)。
算法如下:
LinkList MergeSort ( LinkList A , LinkList B )
{// 归并两个带头结点的递增有序表为一个带头结点递减有序表
ListNode *pa , *pb , *q , *C ;
pa=A->next;//pa指向A表开始结点
C=A;C->next=NULL;//取A表的表头建立空的C表
pb=B->next;//pb指向B表开始结点
free(B);//回收B表的头结点空间
while ( pa && pb)
{
if ( pb->data <= pa->data )
{ // 当B中的元素小于等于A中当前元素时,将pa表的开始结点摘下
q=pa;pa=pa->next;
}
else
{// 当B中的元素大于A中当前元素时,将pb表的开始结点摘下
q=pb;pb=pb->next;}
q->next=C->next;C->next=q;//将摘下的结点q作为开始结点插入C表
}
//若pa表非空,则处理pa表
while(pa){
q=pa;pa=pa->next;
q->next=C->next;C->next=q;}
//若pb表非空,则处理pb表
while(pb){
q=pb;pa=pb->next;
q->next=C->next;C->next=q;}
return(C);
}
该算法的时间复杂度分析如下:
算法中有三个while 循环,其中第二个和第三个循环只执行一个。
每个循环做的工作都是对链表中结点扫描处理。
整个算法完成后,A表和B表中的每个结点都被处理了一遍。
所以若A表和B表的表长分别是m和n,则该算法的时间复杂度O(m+n)。