链表习题
数据结构线性表习题1
数据结构练习题1 指导老师:***姓名:***学校:滨州学院院系:信息工程学院软件技术填空题1.对于一个n个结点的单链表,在表头插入元素的时间复杂度为_____O(1)_____,在表尾插入元素的时间复杂度为_____O(n)_____。
2.删除非空线性链表中由q所指的链结点(其直接前驱结点由r指出)的动作时执行语句___r->link=q->link_______和______free(q)____。
结点结构为typedef struct Node{int value;node * link;}node;3.非空线性链表中,若要在由p所指的链结点后面插入新结点q,则应执行语句____ q->link=p->link;______和_____ p->link=q;_____。
结点结构为typedef struct Node{int value;node* link;}node;4.线性表L=(a1,a2,…,an)用数组表示,假定删除表中任一元素的概率相同,则删除一个元素平均需要移动元素的个数是_____(n-1)/2_____。
5.在一个长度为n的顺序表中第i个元素(1≤i≤n)之前插入一个元素时,需向后移动_____ n-i+1_____ 个元素。
6.在具有n个链结点的链表中查找一个链结点的时间复杂度为O(_______n___)。
7.线性表中的插入、删除操作,在顺序存储方式下平均移动近一半的元素,时间复杂度为_____O(n)_____;而在链式存储方式下,插入和删除操作的时间复杂度都是____O(1)______ 。
8.若某线性表采用顺序存储结构,每个元素占4个存储单元,首地址为100,则第10个元素的存储地址为____136______。
选择题1.对于一个带头结点的单链表,头指针为head,判定该表为空的条件是________B__。
A. head==NULLB. head->next==NULLC. head->next==headD. head!=NULL2.将长度为m的线性链表链接在长度为n的线性链表之后的过程的时间复杂度若采用大O形式表示,则应该是______B____。
C程序设计(链表)习题与答案
一、单选题1、链表不具有的特点是()。
A.不必事先估计存储空间B.插入、删除不需要移动元素C.可随机访问任一元素D.所需空间与线性表长度成正比正确答案:C2、链接存储的存储结构所占存储空间()。
A.分两部分,一部分存放结点值,另一部分存放结点所占单元数B.只有一部分,存放结点值C.分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针D.只有一部分,存储表示结点间关系的指针正确答案:C3、链表是一种采用()存储结构存储的线性表。
A.网状B.星式C.链式D.顺序正确答案:C4、有以下结构体说明和变量的定义,且指针p指向变量a,指针q指向变量b,则不能把结点b连接到结点a之后的语句是()。
struct node {char data;struct node *next;} a,b,*p=&a,*q=&b;A.(*p).next=q;B.p.next=&b;C.a.next=q;D.p->next=&b;正确答案:B5、下面程序执行后的输出结果是()。
#include <stdio.h>#include <stdlib.h>struct NODE {int num; struct NODE *next;};int main(){ struct NODE *p,*q,*r;p=(struct NODE*)malloc(sizeof(struct NODE));q=(struct NODE*)malloc(sizeof(struct NODE));r=(struct NODE*)malloc(sizeof(struct NODE));p->num=10; q->num=20; r->num=30;p->next=q;q->next=r;printf("%d",p->num+q->next->num);return 0;}A.30B.40C.10D.20正确答案:B6、下面程序执行后的输出结果是()。
链表习题高考真题
(2)下列程序的功能是实现向head指向的链表中插入新结点s,如图17所示,使该链表按结点的id值保持升序排列。
图17#include<stdio.h>#include<stdlib.h>typedef struct Node{int id;char *name;struct Node *next;}Node;void Innode(Node *head,int id,char *str) {int j=0;Node *p,*q,*s;p=head;while( ④) {q=p;p=p->next;}s=(Node*)malloc(sizeof(Node));s->id=id;s->name=str;⑤⑥}main(){/*省略创建链表head的代码*/ Innode(head,3,”Jone”);}36.Merge函数用于将两个升序的链表head1和head2合并成一个链表,并保持合并后链表依然升序。
排序的依据为结构体类型Node中的data成员,合并中不得删除节点。
下面给出Merge函数的主体框架,在空出的五个位置补充该主体框架缺失的代码段。
注意:不能定义新的变量,可不用已定义的某些变量。
typedef struct Node{int data;struct Node *next;}Node;Node *Merge(Node *head1,Node *head2){if ( head1==NULL)return head2;if(head2==NULL)return headl;Node *head=NULL;//head指针用于指向合并后链表的头结点Node *pl=NULL;Node *p2=NULL;if(headl->data<head2->data){head=headl;______①______p2=head2;}else{head=head2;______②______pl=headl;}}Node *pcurrent=head;while(p1!=NULL&&p2!=NULL) {if(pl->data<=p2->data){pcurrent->next=p1;______③______p1=pl->next;}else{pcurrent->next=p2;______④______p2=p2->next;}}if(pl!=NULL)______⑤______if(p2!=NULL)pcurrent->next=p2;return head;}。
双向链表练习题
双向链表练习题双向链表(Doubly Linked List)是一种常见的数据结构,它在单链表的基础上扩展,允许链表中的节点同时指向前一个节点和后一个节点。
在这篇文章中,我们将介绍几个双向链表的练习题,帮助读者更好地理解和掌握双向链表的操作。
1. 实现双向链表的节点类首先,我们需要定义一个双向链表的节点类。
节点类包括一个存储值的属性和两个指针属性,分别指向前一个节点和后一个节点。
以下是一个示例代码:```class DLLNode:def __init__(self, value):self.value = valueself.prev = Noneself.next = None```2. 在双向链表的尾部插入节点在双向链表中,可以在链表的尾部插入一个新的节点。
例如,如果链表中已有节点A和B,我们需要在B后插入一个新节点C。
以下是一个示例代码:```def insert_at_end(head, value):new_node = DLLNode(value)if head is None:head = new_nodeelse:current = headwhile current.next is not None:current = current.nextcurrent.next = new_nodenew_node.prev = currentreturn head```3. 删除双向链表中的节点双向链表允许从链表中删除指定节点。
我们可以根据节点的值或位置进行删除操作。
以下是一个根据节点值删除节点的示例代码:```def delete_node(head, value):current = headwhile current is not None:if current.value == value:if current.prev is not None:current.prev.next = current.nextif current.next is not None:current.next.prev = current.previf current == head:head = current.nextreturn headcurrent = current.nextreturn head```4. 查找双向链表中的节点可以根据节点值或位置在双向链表中查找节点。
第2章习题(带答案)
第2章习题(带答案)1.链表不具有的特点是A.可随机访问任一个元素B.插入删除不需要移动元素C.不必事先估计存储空间D.所需空间与线性表长度成正比2.在一个具有n个结点的单链表中查找值为某的某结点,若查找成功,则平均比较个结点。
A.nB.n/2C.(n-1)/2D.(n+1)/23.在单链表中P所指结点之后插入一个元素某的主要操作语句序列是=(node某)malloc(izeof(node));、->data=某;、->ne某t=p->ne某t、p->ne某t=。
4.在单链表中查找第i个元素所花的时间与i成正比。
(√)5.在带头结点的双循环链表中,任一结点的前驱指针均不为空。
(√)6.用链表表示线性表的优点是()。
A.便于随机存取C.便于插入与删除B.花费的存储空间比顺序表少D.数据元素的物理顺序与逻辑顺序相同7.在双向链表中删除P所指结点的主要操作语句序列是p->prior->ne某t=p->ne某t;、p->ne某t->prior=p->prior;、free(p);8.下述哪一条是顺序存储结构的优点?()A.存储密度大B.插入运算方便C.删除运算方便D.可方便地用于各种逻辑结构的存储表示9.若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点。
则采用()存储方式最节省运算时间。
A.单链表B.双链表C.单循环链表D.带头结点的双循环链表10.对任何数据结构链式存储结构一定优于顺序存储结构。
(某)11.对于双向链表,在两个结点之间插入一个新结点需修改的指针共4个,单链表为____2___个。
12.以下数据结构中,()是非线性数据结构A.树B.字符串C.队列D.栈13.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用()存储方式最节省时间。
A.顺序表B.双链表C.带头结点的双循环链表D.单循环链表14.“线性表的逻辑顺序和物理顺序总是一致的。
链表练习题及答案
1、已知L是带表头的单链表,其P结点既不是首元结点,也不是尾元结点,a.删除p结点的直接后继的语句是11,3,14b.删除p结点的直接前驱的语句是10,12,8,11,3,14c.删除p结点的语句序列是10,7,3,14d.删除首元结点的语句序列是12,10,13,14e.删除尾元结点的语句序列是9,11,3,14(1)p=p->next;(2) p->next=p;(3)p->next=p->next->next;(4)p=p->next->next;(5)while(p)p=p->next;(6)whlie(Q->next){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)p=p->next;(10)Q=p;(11)Q=p->next;(12)p=L;(13)L=L->next;(14)free(Q);2、已知L是带表头的单链表,其P结点既不是首元结点,也不是尾元结点,a.在p结点后插入s结点的语句序列是4,1b.在p结点前插入s结点的语句序列是7,11,8,4,1c.在表首插入s结点的语句序列是5,12d.在表尾插入s结点的语句序列是7,9,4,1或11,9,1,61.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;3、已知P结点是某双向链表的中间结点,从下列提供的答案中选择合适的语句序列a.在P结点后插入S结点的语句序列是12,7,3,6b.在P结点前插入S结点的语句序列是13,8,5,4c.删除p结点的直接后继结点的语句序列是15,1,11,18d.删除p结点的直接前驱结点的语句序列是16,2,10,18e.删除p结点的语句序列是9,14,171.P->next=P->next->next;2.P->priou=P->priou->priou;3.P->next=S;4.P->priou=S;5.S->next=P;6.S->priou=P;7.S->next=P->next;8.S->priou=P->priou;9.P->priou->next=P->next;10.P->priou->next=P;11.P->next->priou=P;12.P->next->priou=S;13.P->priou->next=S;14.P->next->priou=P->priou;15.Q=p->next;16.Q=P->priou;17.free(P);18.free(Q);。
课堂练习题---链表
1、设单链表中指针P指着结点A ,若要删除A之后结点(若存在),则需要修改指针的操作为()。
A. p->next=p->next->nextB. p=p->nextC. p=p->next->nextD. P->next=p8.从一个具有n个节点的单链表中查找其值等于x结点时,在查找成功的情况下,需平均比较个结点。
A. nB. n/2C. (n-1)/2D. (n+1)/22.在一个单链表中,已知*q结点是*p结点的前驱结点,若在*q和*p之间插入*s 结点,则执行。
A. s->next=p->next; p->next=s;B. p->next=s->next; s->next=p;C. q->next=s; s->next=p;D. p->next=s; s->next=q;3.线性表采用链式存储时,其地址。
A. 必须是连续的B.部分地址必须是连续的C. 一定是不连续的D. 连续与否均可以4.设单链表中指针p指着结点(数据域为m),指针f指着将要插入的新结点(数据域为x),当x插在结点m之后时,只要先修改后修改p->link=f即可。
A. f->link=p;B. f->link=p->link;C. p->link=f->link;D. f=nil;5.在双向链表存储结构中,删除p所指的结点时需修改指针。
A. ((p->rlink) ->rlink) ->link=p; p->rlink=(p->rlink) ->rlink;B. (p->llink) ->rlink=p->rlink; (p->rlink) ->llink=p->llink;C. p->llink=(p->llink) ->llink; ((p->llink) ->llink) ->rlink=p;D. ((p->llink) ->llink) ->rlink=p; p->llink=(p->llink) ->llink;6.在双向链表存储结构中,删除p所指的结点的前趋结点(若存在)时需修改指针。
第三章 链表 基本题
A.O(1) B.O(n) C.O(n2) D.O(n㏒2n)
11.在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是
A.O(1) B.O(n) C.O(n2) D.O(n㏒2n)
12.向一个栈顶指针为HS的链栈中插入一个s所指结点时,则执行
13.(1)O(1) (2)O(n)
3.3习题解析
1. 线性表可用顺序表或链表存储。试问:
(1) 两种存储表示各有哪些主要优缺点?
(2) 如果有n个表同时并存,并且在处理过程中各表的长度会动态发生变化,表的总数也可能自动改变、在此情况下,应选用哪种存储表示?为什么?
(3) 若表的总数基本稳定,且很少进行插入和删除,但要求以最快的速度存取表中的元素,这时,应采用哪种存储表示?为什么?
7.在一个单链表中,若删除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
8.假设双链表结点的类型如下:
typedef struct linknode
(3) 应采用顺序存储表示。因为顺序存储表示的存取速度快,但修改效率低。若表的总数基本稳定,且很少进行插入和删除,但要求以最快的速度存取表中的元素,这时采用顺序存储表示较好。
c语言练习题6(数组与链表,有答案)
1、(1)数据结构中,与所使用的计算机无关的是数据的_C_______。
A)存储结构B)物理结构C)逻辑结构D)物理和存储结构评析:数据结构概念一般包括3个方面的内容,数据的逻辑结构、存储结构及数据上的运算集合。
数据的逻辑结构只抽象的反映数据元素之间的逻辑关系,而不管它在计算机中的存储表示形式。
2、栈底至栈顶依次存放元素A、B、C、D,在第五个元素E入栈前,栈中元素可以出栈,则出栈序列可能是____D____。
A)ABCED B)DBCEA C)CDABE D)DCBEA评析:栈操作原则上“后进先出”,栈底至栈顶依次存放元素A、B、c、D,则表明这4个元素中D是最后进栈,B、c处于中间,A最早进栈。
所以出栈时一定是先出D,再出c,最后出A。
3、线性表的顺序存储结构和线性表的链式存储结构分别是____B____。
A)顺序存取的存储结构、随机存取的存储结构B)随机存取的存储结构、顺序存取的存储结构C)随机存取的存储结构、随机存取的存储结构D)任意存取的存储结构、任意存取的存储结构评析:顺序存储结构中,数据元素存放在一组地址连续的存储单元中,每个数据元素地址可通过公式LOC(ai)。
LOC(a1)+(i-1)L计算得到,从而实现了随机存取。
对于链式存储结构,要对某结点进行存取,都得从链的头指针指向的结点开始,这是一种顺序存取的存储结构。
4、在单链表中,增加头结点的目的是____A__。
A)方便运算的实现B)使单链表至少有一个结点C)标识表结点中首结点的位置D)说明单链表是线性表的链式存储实现评析:头结点不仅标识了表中首结点的位置,而且根据单链表(包含头结点)的结构,只要掌握了表头,就能够访问整个链表,因此增加头结点目的是为了便于运算的实现。
5、数据处理的最小单位是___C_____。
A)数据B)数据元素C)数据项D)数据结构评析:数据处理的最小单位是数据项;由若干数据项组成数据元素;而数据是指能够被计算机识别、存储和加工处理的信息载体;数据结构是指数据之间的相互关系和数据运算。
第二章习题4
1.对单链表表示法,以下说法错误的是()A.数据域用于存储线性表的一个数据元素B. 指针域(或链域)用于存放一个指向本结点所含数据元素的直接后继所在结点的指针.C. 所有数据通过指针的链接而组织成单链表D.NULL称为空指针,它不指向任何结点只起标志作用2.线性表的静态链表存储结构与顺序存储结构相比优点是:( )(1)所有的操作算法实现简单(2)便于随机存取(3)便于插入和删除(4)便于利用零散的存储器空间3.以下说法正确的是().A.顺序存储方式的优点是存储密度大且插入/删除运算效率高B. 链表的每个结点中都恰好包含一个指针C.线性表的顺序存储结构优于链式存储结构D.顺序存储结构属于静态结构而链式结构属于动态4.从表中任一结点出发都能扫描整个表的是()。
A.静态链表B.单链表C.顺序表 D.双链表E.循环链表5.下面的叙述不正确的是()。
A. 线性表在链式存储时,查找第i个元素的时间同i的值成正比B. 线性表在链式存储时,查找第i个元素的时间同i的值无关C. 线性表在顺序存储时,查找第i个元素的时间同i的值成正比D. 线性表在顺序存储时,查找第i个元素的时间同i的值无关二判断题:1、线性表采用链式存储时,结点和结点内部的存储可以是不连续的。
()2、在具有头结点的链式存储结构中,头指针指向链表中的第一个数据结点。
()3、顺序存储的线性表可以随机存取。
()4、在单链表中,要方位某个结点,只要知道该结点的指针即可;因此,单链表是一种随机存取结构。
()4、在线性表的顺序存储结构中,插入和删除元素时,移动元素的个数与该元素的位置有关。
()6、顺序存储结构属于静态结构,链式结构属于动态结构。
()三、算法题目:试编写在带头结点的单链表中删除(一个)最小值结点的(高效)算法。
结构体与链表习题附答案
结构体与链表习题附答案一、选择题1、在说明一个结构体变量时系统分配给它的存储空间是().A)该结构体中第一个成员所需的存储空间B)该结构体中最后一个成员所需的存储空间C)该结构体中占用最大存储空间的成员所需的存储空间D)该结构体中所有成员所需存储空间的总和。
2.设有以下说明语句,则以下叙述不正确的是()tructtu{inta;floatb;}tutype;A.truct是结构体类型的关键字B.tructtu是用户定义的结构体类型C.tutype是用户定义的结构体类型名D.a和b都是结构体成员名3、以下对结构体变量tu1中成员age的合法引用是()#includetructtudent{intage;intnum;}tu1,某p;p=&tu1;A)tu1->ageB)tudent.ageC)p->ageD)p.age4、有如下定义:Structdate{intyear,month,day;};Structworklit{Charname[20];Chare某;Structdatebirthday;}peron;对结构体变量peron的出生年份进行赋值时,下面正确的赋值语句是()Aworklit.birthday.year=1978Bbirthday.year=1978Cperon.birthday .year=1958Dperon.year=19585、以下程序运行的结果是()#include”tdio.h”main(){tructdate{intyear,month,day;}today;printf(“%d\\n”,izeof(truct date));}A.6B.8C.10D.126、对于时间结构体tructdate{intyear,month,day;charweek[5];}则执行printf(“%d\\n”,izeof(tructdate))的输出结果为(A.12B.17C.18D.207、设有以下语句:tructt{intn;charname[10]};tructta[3]={5,“li”,7,“wang”,9,”zhao”},某p;p=a;则以下表达式的值为6的是()A.p++->nB.p->n++C.(某p).n++D.++p->n8、设有以下语句,则输出结果是()tructLit{intdata;tructLit某ne某t;};tructLita[3]={1,&a[1],2,&a[2],3,&a[0]},某p;p=&a[1];printf(\printf(\printf(\}A.131B.311C.132D.2139、若有以下语句,则下面表达式的值为1002的是()tructtudent{intage;intnum;};tructtudenttu[3]={{1001,20},{1002,19},{1003,21}};)tructtudent某p;p=tu;A.(p++)->numB.(p++)->ageC.(某p).numD.(某++p).age10、下若有以下语句,则下面表达式的值为()tructcmpl某{int某;inty;}cnumn[2]={1,3,2,7};cnum[0].y/cnum[0].某某cnum[1].某;A.0B.1C.3D.611、若对员工数组进行排序,下面函数声明最合理的为()。
习题3(链表)
习题3(链表)一、选择题(1)链接存储的存储结构所占存储空间( A )。
A)分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针B)只有一部分,存放结点值C)只有一部分,存储表示结点间关系的指针D)分两部分,一部分存放结点值,另一部分存放结点所占单元数(2)线性表若采用链式存储结构时,要求内存中可用存储单元的地址( D )。
A)必须是连续的B)部分地址必须是连续的C)一定是不连续的D)连续或不连续都可以(3)线性表L在( B )情况下适用于使用链式结构实现。
A)需经常修改结点值B)需不断删除插入C)含有大量的结点D)结点结构复杂(4)单链表的存储密度( C )。
A)大于1 B)等于1 C)小于1 D)不能确定(5)若指定有n个元素的向量,则建立一个有序单链表的时间复杂性的量级是( C )。
A)O(1) B)O(n) C)O(n2) D)O(nlog2n)(6)在单链表中,要将s所指结点插入到p所指结点之后,其语句应为( D )。
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;(7)在双向链表存储结构中,删除p所指的结点时须修改指针( A )。
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;(8)在双向循环链表中,在p指针所指的结点后插入q所指向的新结点,其修改指针的操作是( C )。
习题和答案
习题二1 简述下列术语:线性表,顺序表,链表。
线性表:最常用且最简单的一种数据结构。
一个线性表是n个数据元素的有限序列。
顺序表:是指用一组连续的存储单元一次存储线性表中的数据元素。
物理结构和逻辑结构都相邻。
链表:逻辑结构相邻的数据元素物理结构不一定相邻。
采用指针的形式连接起来。
2 何时选用顺序表,何时选用链表作为线性表的存储结构合适?各自的主要优缺点是什么?不需要经常大量的修改表或需要随机存取的情况下可以选用顺序表;相反需要经常大量的修改表,但不是频繁的随机存取的情况下可选用链式表。
3 在顺序表中插入和删除一个结点平均需要移动多少个结点?具体的移动次数取决于哪两个因素?答:平均需要移动n/2个结点。
表的长度,和要插入的位置。
4 链表所表示的元素是否有序?如有序,则有序性体现于何处?链表所表示的元素是否一定要在物理上是相邻的?有序表的有序性又如何理解?答:有序。
有序性体现在通过指针数据元素有序的相连。
物理上不一定要相邻。
5 设顺序表L是递增有序表,试写一算法,将x插入到L中并使L仍是递增有序表。
Status ListInsert(SqList &L,int i,ElemType e){if((i>+1)||i<1)return ERROR;if>={newbase=(ElemType *)realloc(+LISTINCREMENT)*sizeof(ElemType));if(!newbase)exit(-1);=newbase;+=LISTINCREMENT;}ElemType *q,*p;q=&[i-1];for(p=&[];p>=q;p--)*(p+1)=*p;*q=e;++;return OK;}9 设A和B是两个按元素值递增有序的单链表,写一算法将A和B归并为按按元素值递减有序的单链表C,试分析算法的时间复杂度。
void ListInsert(SqList A,SqList B,SqList C){ElemType *p,*q,*s;P=&A;q=&B;s=&C;while!=NULL||!=NULL){if {if!=NULL)=;=;p++;}else{if!=NULL)=;=;q++;}}while!=NULL){=;=;}while!=NULL){=;=;}习题三1 设有一个栈,元素进栈的次序为a, b, c。
数据结构第二章参考答案
数据结构第二章参考答案习题21. 填空题(1)在一个单链表中,已知每个结点包含data和next两个域,q所指结点是p所指结点的直接前驱,若在q和p之间插入s所指结点,则执行(___________)和(___________)操作。
答案:q->next = s; s->next = p; 或 s->next=q->next; q->next = s; (2)表长为n的顺序表,当在任何位置上插入或删除一个元素的概率相等时,插入一个元素所需移动元素的平均个数为(___________),删除一个元素需要移动元素的平均个数为(___________)。
答案:n/2 (n-1)/2(3)表长为0的线性表称为(___________)。
答案:空表(4)动态内存管理是操作系统的基本功能之一,其作用是响应用户程序对内存的(___________)和(___________)请求。
答案:申请释放(5)顺序表多采用(___________)实现的,是一种随机存取结构,对表中任意结点存取操作的时间复杂度为(___________)。
而查找链表中的结节,需要从头指针起顺着链扫描才能得到,平均时间复杂度为(___________)。
因此,若线性表的操作主要是进行查找,很少进行插入或删除操作时,采用(___________)表比较合适。
答案:数组 O(1) O(n) 顺序(6)在链表某个位置上进行插入和删除操作,只需要修改(___________)即可,而无须移动大量元素,操作的时间复杂度为(___________)。
而在顺序表中进行插入和删除操作,往往要移动大量元素,平均移动元素的数目为(___________),平均时间复杂度为(___________)。
因此,若对线性表进行频繁的插入和删除操作时,采用(___________)表相对合适。
若插入和删除主要发生在表头和表尾,则采用(___________)表更为合适。
链表习题——精选推荐
一选择题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. 静态链表中指针表示的是(c ). A.内存地址B.数组下标C.下一元素地址D.左、右孩子地址8. 链表不具有的特点是(b )A.插入、删除不需要移动元素B.可随机访问任一元素C.不必事先估计存储空间D.所需空间与线性长度成正比9. 下面的叙述不正确的是(b,c )A.线性表在链式存储时,查找第i个元素的时间同i的值成正比B. 线性表在链式存储时,查找第i个元素的时间同i的值无关C. 线性表在顺序存储时,查找第i个元素的时间同i 的值成正比D. 线性表在顺序存储时,查找第i个元素的时间同i的值无关10.非空的循环单链表head的尾结点p↑满足(a )。
A.p↑.link=head B.p↑.link=NIL C.p=NIL D.p= head 11.循环链表H的尾结点P的特点是(a )。
数据结构-线性表习题及解析
线性表典型例题一、单项选择题[例7-1]在数据结构中,与所使用计算机无关的数据叫( ①)结构;链表是一种采用( ②)存储结构存储的线性表;链表适用于( ③)查找;在链表中进行( ④)操作的效率比在线性表中进行该操作的效率高。
①A.存储B.物理C.逻辑D.物理和逻辑②A.顺序B.网状C.星式D.链式③A.顺序B.二分法C.顺序及二分法D.随机④A.二分法查找B.快速查找C.顺序查找D.插入解析:本题考查的是基本概念。
本题答案为:①C;②D;③A;④D。
[例7-2] 链表不具备的特点是( )。
A.插入和删除不需要移动元素B.可随机访问任一结点C.不必预分配空间D.所需空间与其长度成正比解析:线性表可随机访问任一结点,而链表必须从第一个数据结点出发逐一查找每个结点。
本题答案为:B。
[例7-3] 不带头结点的单链表head为空的判定条件是( )。
A.head==NULL B.head_>next==NULLC.head_>next==head D.head!=NULL解析:在不带头结点的单链表head中,head指向第一个数据结点。
空表即该表没有结点,head==NULL表示该单链表为空。
本题答案为:A。
[例7-4] 带头结点的单链表head为空的判定条件是( )。
A.head==NULL B.head—>next==NULLC.head—> next==head D.head!=NULL解析:在带头结点的单链表head中,head指向头结点。
空表即该表只有头结点,head —>next==NULL表示该单链表为空。
本题答案为:B。
[例7-5] 带头结点的循环单链表head中,head为空的判定条件是( )。
A.head==NULL B.head—>next==NULLC.head—> next==head D.head!=NULL解析:在带头结点的循环单链表head中,head指向头结点。
数据结构(线性表)练习题与答案2
1、与单链表相比,双链表的优点之一是()。
A.插入、删除操作更简单B.可以进行随机访问C.可以省略表头指针或表尾指针D.访问前后相邻节点更方便正确答案:D解析:在双链表中可以访问任一节点的前后相邻节点,而单链表中只能访问任一节点的下一个节点。
2、带头节点的双链表L为空表时应满足()。
A.L==NULLB.L->prior==L->nextC.L->prior==NULLD.L->next==NULL正确答案:D3、在长度为n(n≥1)的双链表中插入一个节点(非尾节点)要修改()个指针域。
A.1B.2C.3D.4正确答案:D解析:需要修改插入节点的prior、next域,前驱节点的next域和后继节点的prior域。
4、对于长度为n(n≥1)的双链表L,在p所指节点之前插入一个新节点的算法的时间复杂度为()。
A. O(1)B. O(n)C. O(n2)D. O(nlog2n)正确答案:A解析:设新节点指针为q,操作是:p->prior->next=p; q->prior=p->prior; p->prior=q; q->next=p;5、在长度为n(n≥1)的双链表中删除一个节点(非尾节点)要修改()个指针域。
A.1B.2C.3D.4正确答案:B解析:需要修改前驱节点的next域和后继节点的prior域。
6、与非循环单链表相比,循环单链表的主要优点是()。
A.不再需要头指针B.已知某个节点的位置后,能够容易找到它的前驱节点C.在进行插入、删除操作时,能更好地保证链表不断开D.从表中任意节点出发都能扫描到整个链表正确答案:D解析:循环单链表中可以循环扫描,因此从表中任意节点出发都能扫描到整个链表。
7、设有带头节点的循环单链表L,当这种链表成为空链表时,有()。
A.表头节点指针域next为空B.L的值为NULLC.表头节点的指针域next与L的值相等D.表头节点的指针域next与L的地址相等正确答案:C解析:带头节点的循环单链表L成为空链表时满足L->next==L,即表头节点*L的指针域next与L的值相等,而不是表头节点*L的指针域next与L的地址相等。
(1)单链表 (2)双链表 (3)单循环链表 (4)带头结点的双循环链表
4. 一个队列的入队序列是a、b、c、d,则队列的输出序列为________ 。
5. 栈结构通常采用的两种存储结构是________ 和________ 。
6. 具有N 个结点的完全二叉树的深度为________ 。
(3)不必事先估计存储空间 (4)所需空间与线性表长度成正比
5、 在有n个叶子结点的哈夫曼树中,其结点总数为( )。
6. 算法分析的目的是( )
A.找出数据结构的合理性 B. 研究算法中的输入/输出关系
C. 分析算法的效率以求改进 D. 分析算法的易读性
7. 在需要经常查找结点的前驱与后继的场合中,使用()比较合适。
A.n B.n+1 C.n1 D.n/2
11. 静态查找表与动态查找表二者的根本差别在于()
A. 它们的逻辑结构不一样 B. 施加在其上的操作不同
C. 所包含的数据元素的类型不一样 D. 存储实现不一样
12.散列文件使用散列函数将记录的关键字值计算转化为记录的存放地址。因为散列函数不是一对一的关系,所以选择好的()方法是散列文件的关键。
14. 最简单的交换排序方法是________ 排序。
15. 外排序的基本方法是________ 。
4.在链栈的头部必须要设置头结点。()
5.在二叉树中插入结点则该二叉树便不再是二叉树。()
6.查找表的逻辑结构是集合。()
7.静态查找表的检索与修改被分成两个不交叉的阶段分别进行。()
8.在索引顺序文件中插入新的记录时,必须复制整个文件。()
9.如果某种排序算法是不稳定的,则该方法没有实际的应用价值。()
数据结构线性表习题
第二章作业题1.求单链表中当前结点的后继和前驱的时间复杂度分别是()A.O(n)和O(1)B.O(1)和O(1)C.O(1)和O(n)D.O(n)和O(n)2.非空的单循环链表的头指针为head,尾指针为rear,则下列条件成立的是()A.rear->next= =head B.rear->next->next= =headC.head->next= =rear D.head->next->next= =rear3.在带头结点的循环链表L中,结点的数据元素为整型,且按值递增有序存放。
给定两个整数a和b,且a<b,编写算法删除链表L中元素值大于a且小于b的所有结点。
4.在线性表的下列运算中,不.改变数据元素之间结构关系的运算是()A.插入B.删除C.排序D.定位5.已知指针p和q分别指向某单链表中第一个结点和最后一个结点。
假设指针s指向另一个单链表中某个结点,则在s所指结点之后插入上述链表应执行的语句为( ) A.q->next=s->next;s->next=p; B.s->next=p;q->next=s->next;C.p->next=s->next;s->next=q;D.s->next=q;p->next=s->next;6.若线性表的插入和删除操作频繁地在表头或表尾位置进行,则更适宜采用的存储结构为()A.无头结点的双向链表B.带尾指针的循环链表C.无头结点的单链表D.带头指针的循环链表7.在下列对顺序表进行的操作中,算法时间复杂度为O(1)的是()A.访问第i个元素的前驱(1<ni≤)B.在第i个元素之后插入一个新元素(n1≤≤)iC.删除第i个元素(n≤)i1≤D.对顺序表中元素进行排序8.在链表的结点中,数据元素所占的存储量和整个结点所占的存储量之比称作________。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一选择题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. 静态链表中指针表示的是( c ).A.内存地址B.数组下标C.下一元素地址D.左、右孩子地址8. 链表不具有的特点是( b )A.插入、删除不需要移动元素B.可随机访问任一元素C.不必事先估计存储空间D.所需空间与线性长度成正比9. 下面的叙述不正确的是(b,c )A.线性表在链式存储时,查找第i个元素的时间同i的值成正比B. 线性表在链式存储时,查找第i个元素的时间同i的值无关C. 线性表在顺序存储时,查找第i个元素的时间同i 的值成正比D. 线性表在顺序存储时,查找第i个元素的时间同i的值无关10.非空的循环单链表head的尾结点p↑满足( a )。
A.p↑.link=head B.p↑.link=NIL C.p=NIL D.p= head11.循环链表H的尾结点P的特点是(a )。
A.P^.NEXT:=H B.P^.NEXT:= H^.NEXT C.P:=H D.P:=H^.NEXT12.在一个以h 为头的单循环链中,p 指针指向链尾的条件是(a)A. p^.next=hB. p^.next=NILC. p^.next.^next=hD. p^.data=-113.完成在双循环链表结点p之后插入s的操作是(d );A.p^.next:=s ; s^.priou:=p; p^.next^.priou:=s ; s^.next:=p^.next;B.p^.next^.priou:=s; p^.next:=s; s^.priou:=p; s^.next:=p^.next;C.s^.priou:=p; s^.next:=p^.next; p^.next:=s; p^.next^.priou:=s ;D.s^.priou:=p; s^.next:=p^.next; p^.next^.priou:=s ; p^.next:=s;14.在双向循环链表中,在p结点前插入一个q的新结点,其修改指针的操作是( c )。
注:双向链表的结点结构为(llink,data,rlink)。
供选择的答案:A.p↑.llink:=q;q↑.rlink:=p;p↑.llink↑.rlink:=q;q↑.llink:=q;B.p↑.llink:=q;p↑.llink↑.rlink:=q ;q↑.rlink:= p;q↑.llink:=p↑.llink;C.q↑.rlink:=p;q↑.llink:=p↑.llink;p↑.llink↑.rlink:=q; p↑.llink:=q;D.q↑.llink:=p↑.llink;q↑.rlink:=p;p↑.llink:=q;p↑.llink:=q;15.在非空双向循环链表中q所指的结点前插入一个由p所指的链结点的过程依次为:rlink(p) ←q; llink(p) ←llink(q); llink(q) ←p; (c )A.rlink(q) ←p B.rlink(llink(q)) ←p C.rlink(llink(p)) ←p D.rlink(rlink(p)) ←p16.在双向链表指针p的结点前插入一个指针q的结点操作是( c )。
A. p->Llink=q;q->Rlink=p;p->Llink->Rlink=q;q->Llink=q;B. p->Llink=q;p->Llink->Rlink=q;q->Rlink=p;q->Llink=p->Llink;C. q->Rlink=p;q->Llink=p->Llink;p->Llink->Rlink=q;p->Llink=q;D. q->Llink=p->Llink;q->Rlink=q;p->Llink=q;p->Llink=q;17.在单链表指针为p的结点之后插入指针为s的结点,正确的操作是:( b )。
A.p->next=s;s->next=p->next; B.s->next=p->next;p->next=s;C.p->next=s;p->next=s->next; D.p->next=s->next;p->next=s;18.对于一个头指针为head的带头结点的单链表,判定该表为空表的条件是( b )A.head==NULL B.head→next==NULL C.head→next==head D.head!=NULL 19. 在双向链表存储结构中,删除p所指的结点时须修改指针(a )。
A.(p^.llink)^.rlink:=p^.rlink (p^.rlink)^.llink:=p^.llink;B.p^.llink:=(p^.llink)^.llink (p^.llink)^.rlink:=p;C.(p^.rlink)^.llink:=p p^.rlink:=(p^.rlink)^.rlinkD.p^.rlink:=(p^.llink)^.llink p^.llink:=(p^.rlink)^.rlink;二、判断1. 链表中的头结点仅起到标识的作用。
( F )2. 顺序存储结构的主要缺点是不利于插入或删除操作。
( T)3.线性表采用链表存储时,结点和结点内部的存储空间可以是不连续的。
( T )4.顺序存储方式插入和删除时效率太低,因此它不如链式存储方式好。
( F )5. 对任何数据结构链式存储结构一定优于顺序存储结构。
( F )6. 线性表的特点是每个元素都有一个前驱和一个后继。
( F )7. 取线性表的第i个元素的时间同i的大小有关. ( F )8. 循环链表不是线性表. ( F )9. 线性表只能用顺序存储结构实现。
( F )10. 线性表就是顺序存储的表。
( F )11.为了很方便的插入和删除数据,可以使用双向链表存放数据。
( T )12. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。
( F )13. 链表是采用链式存储结构的线性表,进行插入、删除操作时,在链表中比在顺序存储结构中效率高。
( T )三、填空1.当线性表的元素总数基本稳定,且很少进行插入和删除操作,但要求以最快的速度存取线性表中的元素时,应采用____顺序___存储结构。
2.线性表L=(a1,a2,…,an)用数组表示,假定删除表中任一元素的概率相同,则删除一个元素平均需要移动元素的个数是____(n-1)/2____。
3.设单链表的结点结构为(data,next),next为指针域,已知指针px指向单链表中data为x 的结点,指针py指向data为y的新结点, 若将结点y插入结点x之后,则需要执行以下语句:__py->next=px->next_____;_px->next=py_____;4.在一个长度为n的顺序表中第i个元素(1<=i<=n)之前插入一个元素时,需向后移动________个元素。
5.在双向循环链表中,向p所指的结点之后插入指针f所指的结点,其操作是_______、_______、_______、________。
6.链接存储的特点是利用____指针____来表示数据元素之间的逻辑关系。
7.顺序存储结构是通过__数组_____表示元素之间的关系的;链式存储结构是通过___指针_____表示元素之间的关系的。
8. 对于双向链表,在两个结点之间插入一个新结点需修改的指针共____4__个,单链表为____2___个。
9. 循环单链表的最大优点是:___从任意节点出发都可以访问链表中的每一个元素_____。
10. 已知指针p指向单链表L中的某结点,则删除其后继结点的语句是:q=p->next; p->next=q->next;free(q);______11. 带头结点的双循环链表L中只有一个元素结点的条件是:_ L->next->next==L;(注意此为双等号)12. 在单链表L中,指针p所指结点有后继结点的条件是:_p->next!=null_13.带头结点的双循环链表L为空表的条件是:___L->next==L&&L->front==L__(注意此为双等号)___。