线性表练习题答案

合集下载

第二章线性表习题及答案

第二章线性表习题及答案

第二章线性表习题及答案‎一、基础知识题‎2.1 试描述头指‎针、头结点、开始结点的‎区别、并说明头指‎针和头结点‎的作用。

答:始结点是指‎链表中的第‎一个结点,也就是没有‎直接前趋的‎那个结点。

链表的头指‎针是一指向‎链表开始结‎点的指针(没有头结点‎时),单链表由头‎指针唯一确‎定,因此单链表‎可以用头指‎针的名字来‎命名。

头结点是我‎们人为地在‎链表的开始‎结点之前附‎加的一个结‎点。

有了头结点‎之后,头指针指向‎头结点,不论链表否‎为空,头指针总是‎非空。

而且头指针‎的设置使得‎对链表的第‎一个位置上‎的操作与在‎表其他位置‎上的操作一‎致(都是在某一‎结点之后)。

2.2 何时选用顺‎序表、何时选用链‎表作为线性‎表的存储结‎构为宜?答:在实际应用‎中,应根据具体‎问题的要求‎和性质来选‎择顺序表或‎链表作为线‎性表的存储‎结构,通常有以下‎几方面的考‎虑:1.基于空间的‎考虑。

当要求存储‎的线性表长‎度变化不大‎,易于事先确‎定其大小时‎,为了节约存‎储空间,宜采用顺序‎表;反之,当线性表长‎度变化大,难以估计其‎存储规模时‎,采用动态链‎表作为存储‎结构为好。

2.基于时间的‎考虑。

若线性表的‎操作主要是‎进行查找,很少做插入‎和删除操作‎时,采用顺序表‎做存储结构‎为宜;反之,若需要对线‎性表进行频‎繁地插入或‎删除等的操‎作时,宜采用链表‎做存储结构‎。

并且,若链表的插‎入和删除主‎要发生在表‎的首尾两端‎,则采用尾指‎针表示的单‎循环链表为‎宜。

2.3 在顺序表中‎插入和删除‎一个结点需‎平均移动多‎少个结点?具体的移动‎次数取决于‎哪两个因素‎?答:在等概率情‎况下,顺序表中插‎入一个结点‎需平均移动‎n/2个结点。

删除一个结‎点需平均移‎动(n-1)/2个结点。

具体的移动‎次数取决于‎顺序表的长‎度n以及需‎插入或删除‎的位置i。

i 越接近n‎则所需移动‎的结点数越‎少。

2.4 为什么在单‎循环链表中‎设置尾指针‎比设置头指‎针更好?答:尾指针是指‎向终端结点‎的指针,用它来表示‎单循环链表‎可以使得查‎找链表的开‎始结点和终‎端结点都很‎方便,设一带头结‎点的单循环‎链表,其尾指针为‎rear,则开始结点‎和终端结点‎的位置分别‎是rear‎->next->next 和rear, 查找时间都‎是O(1)。

数据结构第二章 线性表练习及答案

数据结构第二章 线性表练习及答案

一、选择题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章线性表习题参考答案

第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;

线性表习题答案

线性表习题答案

修改后的算法如下: 修改后的算法如下: int ModifyDeleteK(SqList *a,int i,int k) { //本过程从顺序存储结构的线性表a中删除第i个 //本过程从顺序存储结构的线性表 中删除第i 本过程从顺序存储结构的线性表a 元素起的k 元素起的k个元素 int j; if(i<1 || k<0 || i+k>a->length) return INFEASIBLE; //参数不合法 参数不合法 else { for(j=i+k;j<=a->length;j++) //删除k个元素 删除k 删除 a->elem[j-k]=a->elem[j]; a->length-=k; return OK; } }//ModifyDeleteK 新算法的时间复杂度O(n)=a->length新算法的时间复杂度O(n)=a->length-(i+k)+1 O(n)=a
void Reverse_SqList(SqList *L) { /*初始条件:顺序表L存在且不为空 初始条件: 初始条件 顺序表L存在且不为空*/ /*操作结果:顺序表L的内容被逆置 操作结果: 操作结果 顺序表L的内容被逆置*/ int i; ElemType x; //顺序表L的第i个元素和倒数第i个元素交换 顺序表L的第i个元素和倒数第i 顺序表 for(i=1;i<=L->length/2;i++) { x=L->elem[i-1]; L->elem[i-1]=L->elem[L->length-i]; L->elem[L->length-i]=x; } }
6.试写一算法,对单链表实现就地逆置。 6.试写一算法,对单链表实现就地逆置。 试写一算法

第2章 线性表习题及参考答案

第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.下述哪一条是顺序存储结构的优点?()【北方交通大学2001 一、4(2分)】A.存储密度大B.插入运算方便C.删除运算方便D.可方便地用于各种逻辑结构的存储表示2.下面关于线性表的叙述中,错误的是哪一个?()【北方交通大学2001 一、14(2分)】A.线性表采用顺序存储,必须占用一片连续的存储单元。

B.线性表采用顺序存储,便于进行插入和删除操作。

C.线性表采用链接存储,不必占用一片连续的存储单元。

D.线性表采用链接存储,便于插入和删除操作。

3.线性表是具有n个()的有限序列(n>0)。

【清华大学1998 一、4(2分)】A.表元素B.字符C.数据元素D.数据项E.信息项4.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用()存储方式最节省时间。

【哈尔滨工业大学2001 二、1(2分)】A.顺序表B.双链表C.带头结点的双循环链表D.单循环链表5.某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用()存储方式最节省运算时间。

【南开大学2000 一、3】A.单链表B.仅有头指针的单循环链表C.双链表D.仅有尾指针的单循环链表6.设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用( )最节省时间。

A. 单链表B.单循环链表C. 带尾指针的单循环链表D.带头结点的双循环链表【合肥工业大学2000 一、1(2分)】7.若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点。

则采用()存储方式最节省运算时间。

【北京理工大学2000 一、1(2分)】A.单链表B.双链表C.单循环链表D.带头结点的双循环链表8. 静态链表中指针表示的是(). 【北京理工大学2001 六、2(2分)】A.内存地址B.数组下标C.下一元素地址D.左、右孩子地址9. 链表不具有的特点是()【福州大学1998 一、8 (2分)】A.插入、删除不需要移动元素B.可随机访问任一元素C.不必事先估计存储空间D.所需空间与线性长度成正比10. 下面的叙述不正确的是()【南京理工大学1996 一、10(2分)】A.线性表在链式存储时,查找第i个元素的时间同i的值成正比B. 线性表在链式存储时,查找第i个元素的时间同i的值无关C. 线性表在顺序存储时,查找第i个元素的时间同i 的值成正比D. 线性表在顺序存储时,查找第i个元素的时间同i的值无关11. 线性表的表元存储方式有((1))和链接两种。

线性表+课后习题答案

线性表+课后习题答案

第2章 线性表 1.选择题 (1)一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是( )。 A.110 B.108 C.100 D.120 (2)在n个结点的顺序表中,算法的时间复杂度是O(1)的操作是( )。 A.访问第i个结点(1≤i≤n)和求第i个结点的直接前驱(2≤i≤n) B.在第i个结点后插入一个新结点(1≤i≤n) C.删除第i个结点(1≤i≤n) D.将n个结点从小到大排序 (3) 向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动 的元素个数为( )。 A.8 B.63.5 C.63 D.7 (4)链接存储的存储结构所占存储空间( )。 A.分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针 B.只有一部分,存放结点值 C.只有一部分,存储表示结点间关系的指针 D.分两部分,一部分存放结点值,另一部分存放结点所占单元数 (5)线性表若采用链式存储结构时,要求内存中可用存储单元的地址( )。 A.必须是连续的 B.部分地址必须是连续的 C.一定是不连续的 D.连续或不连续都可以 (6)线性表L在( )情况下适用于使用链式结构实现。 A.需经常修改L中的结点值 B.需不断对L进行删除插入 C.L中含有大量的结点 D.L中结点结构复杂 (7)单链表的存储密度( )。 A.大于1 B.等于1 C.小于1 D.不能确定 (8)将两个各有n个元素的有序表归并成一个有序表,其最少的比较次数是( )。 A.n B.2n-1 C.2n D.n-1 (9)在一个长度为n的顺序表中,在第i个元素(1≤i≤n+1)之前插入一个新元素时须向后移动( )个元素。 A.n-i B.n-i+1 C.n-i-1 D.i (10) 线性表L=(a1,a2,……an),下列说法正确的是( )。 A.每个元素都有一个直接前驱和一个直接后继 B.线性表中至少有一个元素 C.表中诸元素的排列必须是由小到大或由大到小 D.除第一个和最后一个元素外,其余每个元素都有一个且仅有一个直接前驱和直接后继。 (11) 若指定有n个元素的向量,则建立一个有序单链表的时间复杂性的量级是( )。 A.O(1) B.O(n) C.O(n2) D.O(nlog2n) (12) 以下说法错误的是( )。 A.求表长、定位这两种运算在采用顺序存储结构时实现的效率不比采用链式存储结构时实现的效率低 B.顺序存储的线性表可以随机存取 C.由于顺序存储要求连续的存储区域,所以在存储管理上不够灵活 D.线性表的链式存储结构优于顺序存储结构 (13) 在单链表中,要将s所指结点插入到p所指结点之后,其语句应为( )。 A.s->next=p+1; p->next=s; B.(*p).next=s; (*s).next=(*p).next; C.s->next=p->next; p->next=s->next; D.s->next=p->next; p->next=s; (14) 在双向链表存储结构中,删除p所指的结点时须修改指针( )。 A.p->next->prior=p->prior; p->prior->next=p->next; B.p->next=p->next->next; p->next->prior=p; C.p->prior->next=p; p->prior=p->prior->prior; D.p->prior=p->next->next; p->next=p->prior->prior; (15) 在双向循环链表中,在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->prior=p; q->next=p->next; p->next=q; p->next->prior=q;

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、判断题
1.线性表的逻辑顺序与存储顺序总是一致的。

(FALSE)
2.顺序存储的线性表可以按序号随机存取。

(TRUE)
3.顺序表的插入和删除一个数据元素,每次操作平均只有近一半的元素需要移动。

(TRUE)
4.线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有相同的特性,因此是属于同一数据对象。

(TRUE)
5.在线性表的顺序存储结构中,逻辑上相邻的两个元素在物理位置上并不一定紧邻。

(FALSE)
6.在线性表的链式存储结构中,逻辑上相邻的元素在物理位置上不一定相邻。

(TRUE)7.线性表的链式存储结构优于顺序存储结构。

(FALSE)
8.在线性表的顺序存储结构中,插入和删除时,移动元素的个数与该元素的位置有关。

(TRUE)
9.线性表的链式存储结构是用一组任意的存储单元来存储线性表中数据元素的。

(TRUE)10.在单链表中,要取得某个元素,只要知道该元素的指针即可,因此,单链表是随机存取的存储结构。

(FALSE)
二、单选题、(请从下列A,B,C,D选项中选择一项)
11.线性表是( ) 。

(A) 一个有限序列,可以为空;(B) 一个有限序列,不能为空;
(C) 一个无限序列,可以为空;(D) 一个无序序列,不能为空。

答:A
12.对顺序存储的线性表,设其长度为n,在任何位置上插入或删除操作都是等
概率的。

插入一个元素时平均要移动表中的()个元素。

(A) n/2 (B) (n+1)/2 (C) (n –1)/2 (D) n
答:A
13.线性表采用链式存储时,其地址( D ) 。

(A) 必须是连续的;(B) 部分地址必须是连续的;
(C) 一定是不连续的;(D) 连续与否均可以。

答:D
14.用链表表示线性表的优点是()。

(A)便于随机存取
(B)花费的存储空间较顺序存储少
(C)便于插入和删除
(D)数据元素的物理顺序与逻辑顺序相同
答:C
15. 某链表中最常用的操作是在最后一个元素之后插入一个元素和删除最后一个元素,则采用( )存储方式最节省运算时间。

(A)单链表
(B)双链表
(C)单循环链表
(D)带头结点的双循环链表
答:D
16. 循环链表的主要优点是( ) 。

(A)不再需要头指针了
(B)已知某个结点的位置后,能够容易找到他的直接前趋
(C)在进行插入、删除运算时,能更好的保证链表不断开
(D)从表中的任意结点出发都能扫描到整个链表
答:D
18. 单链表中,增加一个头结点的目的是为了()。

(A) 使单链表至少有一个结点(B)标识表结点中首结点的位置
(C)方便运算的实现(D) 说明单链表是线性表的链式存储
答:C
19. 若某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用()存储方式最节省运算时间。

(A) 单链表(B) 仅有头指针的单循环链表
(C) 双链表(D) 仅有尾指针的单循环链表
答:D
20. 若某线性表中最常用的操作是取第i个元素和找第i个元素的前趋元素,则采用()存储方式最节省运算时间(B )。

(A) 单链表(B) 顺序表
(C) 双链表(D) 单循环链表
答:B
21. 一个向量(一种顺序表)第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是_______。

A. 110
B. 108
C. 100
D. 120
答:B
[第5个元素的地址=100+2*(5-1)=108]
22. 不带头结点的单链表head为空的判定条件是______。

A. head = = NULL;
B. head->next = = NULL;
C. head->next = = head;
D. head! = NULL;
答:A
23. 带头结点的单链表head为空的判定条件是______。

A. head = = NULL;
B. head->next = = NULL;
C. head->next = = head;
D. head! = NULL;
答:B
24. 在循环双链表的p所指结点之后插入s所指结点的操作是_____。

A. p->right=s; s->left=p; p->right->left=s; s=->right=p->right;
B. p->right=s; p->right->left=s; s->left=p; s->right=p->right;
C. s->left=p; s->right= p->right; p->right=s; p->right->left=s;
int count (head, x)
{
/*本题中head 为链头指针,不含头结点*/ node *p;
int n=0;
p=head;
while (p!=NULL)
{
if (p->data= =x) n++;
p=p->next;
}
return(n);
}。

相关文档
最新文档