线性表编程练习题
第2章 线性表(习题).doc

不必占用一片地址连续的(A) head= =NULL (B) head-〉线性表采用链式存第2章线性表习题一、选择题1.线性表是()。
(A)一个有限序列,可以为空;(B) 一个有限序列,不能为空;(0 一个无限序列,可以为空;(D) —个无序序列,不能为空。
2.从一个具有n个结点的单链表中查找值为x结点,在查找成功情况下,需平均比较个结点。
(A)n (B) n/2 (C) (n-l)/2 (D) (n+l)/23.线性表采用链式存储时,其各元素存储地址()。
(A)必须是连续的;(B)部分地址必须是连续的;(0 一定是不连续的;(D)连续与否均可以。
4.用链表表示线性表的优点是()。
(A)便于随机存取(B)花费的存储空间较顺序存储少(C)便于插入和删除(D)数据元素的物理顺序与逻辑顺序相同5. ________ 插入、删除速度快,但不能随机存取。
(A)链接表(B)顺序表(C)顺序有序表(D)上述三项无法比较6.若希望从链表中快速确定一个结点的前驱,则链表最好采用——方式。
(A)单链表(B)循环单链表(C)双向链表(D)任意7.下面关于线性表的叙述错误的是()=线性表采用顺序存储,必须占用一片地址连续的单元; 线性表采用顺序存储,便于进行插入和删除操作;线性表采用链式存储,不便于进行插入和删除操作;8.带头结点的单链表head为空的判定条件是—(C) head-〉next= =head (D) head!=NULL9.若某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素, 则采用()存储方式最节省运算时间。
(A)单链表(B)仅有头指针的单循环链表(0双链表(D)仅有尾指针的单循环链表10.在循环双链表的p所指结点之后插入s所指结点的操作是_______________ o(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; s-〉next=p-〉next; p-〉next-〉prior=s; p->next =s;二、填空题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结点时,在查找成功的情况下,需平均比较()个结点。
数据结构(线性表)习题与答案

一、单选题1、在长度为n的顺序表中的第i( 1 <= i <= n+1 )个位置上插入一个元素,其算法时间复杂度为()。
A.O(n*n)B.O(log2n)C.O(1)D.O(n)正确答案:D2、在长度为n的顺序表中的第i( 1 =< i <= n+1 )个位置上插入一个元素,需要移动的元素个数为()。
A.iB.n-i+1C.n-i-1D.n-i正确答案:B3、链表不具有的特点是()。
A.插入、删除不需要移动元素B.不必事先估计存储空间C.可随机访问任一元素D.所需存储空间与线性表程度成正比正确答案:C4、在一单链表中,删除指针p所指的后继结点,以下语句正确的是()。
A.p->next=p->next->next; free(p->next);B. p=p->next;C.free(p->next);p->next=p->next->next;D.s=p->next;p->next=s->next;free(s);正确答案:D5、假设删除长度为n的顺序表中的每个元素的概率相同,则删除一个元素平均要移动的元素个数是()。
A.nB.n/2C.(n-1)/2D.(n+1)/2正确答案:C6、设某顺序表中第一个元素的地址是Base,每个结点占m个单元,则第i个结点的地址为()。
A.Base+(i-1)×mB.Base+(i+1)×mC.Base-i×mD.Base+i×m正确答案:A7、长度为n的非空线性表采用顺序存储结构,在表的第i个位置插入一个数据元素,i 的合法值应该是()。
A.1≤i≤n-1B.0≤i≤n+1C.i>0D.1≤i≤n+1正确答案:D解析:一般插入位置从1开始。
8、非空单链表结点结构为【data,next】,若指针p所指结点是尾结点,则()表达式为真。
第二章 线性表 练习题

一、选择题1.线性表的链接实现有利于( A )运算。
(A)插入 (B)读表元 (C)查找 (D)定位2.设单链表中指针p指向结点A,若要删除A之后的结点(若存在),则修改指针的操作为( A)。
(A)P一>next=p一>next一>next (B)p=P一>next(C)p=P一>next一>next (D)p一>next=p3.线性表采用链式存储时,其地址( D )。
(A)必须是连续的 (B)部分地址必须是连续的(c)一定是不连续的 (D)连续与否均可以4.在一个具有n个结点的单链表中查找其值等于x的结点.在查找成功的情况下需平均比较( c)个元素结点。
(A) n/2 (B) n (C) (n+1)/2 (D) (n-1)/25.在双向循环链表中,在p所指的结点之后插入s指针所指的结点,其操作是(B)。
(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.已知一个有序表为(13,18,24,35,47,50,62,83,90,115,134),当二分查找值为90的元素时,需( D )次比较可查找成功。
(A)1 (B)2 (C)3 (D)47.在顺序存储的线性表R[029]上进行顺序查找的平均查找长度为(①),进行二分查找的平均查找长度为(②),讲行分块查找(设分为5块)的平均查找长度为(③)①(A)15 (B)15.5 (C)16 (D)20②(A)4 (B)62/15 (C)64/15 (D)25/6③(A)6 (B)11 (C)5 (D)6.58.若线性表最常用的操作是存取第i个元素及其前驱元素的值,则采用( B )存储方式最节省时间。
数据结构(线性表)习题与答案

数据结构(线性表)习题与答案数据结构(线性表)习题与答案1. 线性表的定义线性表是一种常用的数据结构,它由一系列元素组成,并且每个元素具有前驱和后继关系。
线性表可以通过顺序存储或链式存储来实现。
2. 线性表的实现方式2.1 顺序存储顺序存储是利用数组来实现线性表的一种方式。
数组的每个元素可以存储一个数据项,通过下标可以快速访问和操作其中的元素。
2.2 链式存储链式存储是通过节点之间的指针关联来实现线性表的一种方式。
每个节点包含数据域和指针域,指针域指向下一个节点。
3. 线性表的基本操作3.1 初始化线性表初始化线性表需要给表头节点分配内存空间,并将头节点的指针域置为空。
3.2 插入元素在线性表的某个位置插入元素,需要先找到插入位置的前一个节点,然后将新节点插入到该位置。
调整节点之间的指针关联即可完成插入操作。
3.3 删除元素删除线性表中的某个元素,需要找到待删除元素的前一个节点,然后将该节点的指针指向待删除节点的下一个节点,释放待删除节点的内存空间即可。
3.4 查找元素查找线性表中某个元素的位置,可以从表头节点开始逐个比较节点的数据域,直到找到目标元素或者遍历结束。
4. 线性表的习题与答案4.1 习题1已知线性表L中的元素按非递减顺序排列,设计一个算法,将元素x插入到L中,保持L的有序性。
解答:1) 从表头节点开始,顺序遍历节点的数据域,找到第一个大于等于x的节点的前一个节点,记为p。
2) 创建新的节点node,将x赋值给node的数据域。
3) 将node的指针域指向p的下一个节点。
4) 将p的指针域指向node。
5) 插入完成。
4.2 习题2已知线性表L中的元素按递减顺序排列,设计一个算法,删除L中所有大于x的元素。
解答:1) 从表头节点开始,顺序遍历节点的数据域,找到第一个小于等于x的节点的前一个节点,记为p。
2) 将p的指针域指向p的下一个节点,删除p的后继节点。
3) 重复执行步骤2,直到遍历结束。
数据结构与算法(线性表)练习题

三、写一个算法合并两个已排序的线性表。
〔用两种方法:数组表示的线性表〔顺序表〕和指针表示的线性表〔链表〕〕要求:1、定义线性表节点的结构,并定义节点的型和位置的型。
2、定义线性表的基本操作3、在1,2的基础上,完成此题。
4、在main 函数中进行测试:先构建两个有序的线性表,然后合并这两个线性表。
四、已知一个单向链表,试给出复制该链表的算法。
要求:1、定义线性表的节点的结构以及节点的型和位置的型。
2、定义线性表的基本操作3、在1,2的基础上,完成此题。
4、在main 函数中进行测试:先构建一个线性表,并定义一个空线性表,然后进行复制。
五、写出从一个带表头的单链表中删除其值等于给定值x 的结点的算法函数:int delete(LIST &L, int x);如果x 在该链表中,则删除对应结点,并返回其在链表中的位置〔逻辑位置,第一个结点的逻辑位置为1〕,否则返回-1。
要求:1、定义线性表的节点的结构以及节点的型和位置的型。
2、定义线性表的基本操作3、在1,2的基础上,完成此题。
4、在main 函数中进行测试:先构建一个线性表,然后调用函数删除值等于给定值的节点。
六、写出一个将两个静态链表〔属于同一个存储池〕合并的算法函数:void Merge(cursor M, cursor N); 合并的方法是将N 链表中的所有结点添加到M 链表的后面,并将N 链表的表头结点添加到空闲结点链表中。
要求:1、定义静态链表的结点的结构以及结点的型SPACE 以及位置〔position 〕和游标〔cursor 〕的型。
2、定义静态链表的基本操作:void Initialize(); 初始化,将所有存储池中的结点设置为空闲;cursor GetNode(); 从空闲链中获取一个结点;void FreeNode(cursor q); 将结点q 加入到空闲链; void Insert ( elementtype x, position p, cursor M ); 在链表M 中的位置为p 的元素后面添加一个值为x 的结点;void Delete (cursor M, position p ); 在链表M 中删除位置为p 的元素的后一个元素。
数据结构与算法(线性表)练习题

三、写一个算法合并两个已排序的线性表。
(用两种方法:数组表示的线性表(顺序表)和指针表示的线性表(链表))要求:1、定义线性表节点的结构,并定义节点的型和位置的型。
2、定义线性表的基本操作3、在1,2的基础上,完成本题。
4、在main函数中进行测试:先构建两个有序的线性表,然后合并这两个线性表。
四、已知一个单向链表,试给出复制该链表的算法。
要求:1、定义线性表的节点的结构以及节点的型和位置的型。
2、定义线性表的基本操作3、在1,2的基础上,完成本题。
4、在main函数中进行测试:先构建一个线性表,并定义一个空线性表,然后进行复制。
五、写出从一个带表头的单链表中删除其值等于给定值x的结点的算法函数:int delete(LIST &L, int x);如果x在该链表中,则删除对应结点,并返回其在链表中的位置(逻辑位置,第一个结点的逻辑位置为1),否则返回-1。
要求:1、定义线性表的节点的结构以及节点的型和位置的型。
2、定义线性表的基本操作3、在1,2的基础上,完成本题。
4、在main函数中进行测试:先构建一个线性表,然后调用函数删除值等于给定值的节点。
六、写出一个将两个静态链表(属于同一个存储池)合并的算法函数:void Merge(cursor M, cursor N); 合并的方法是将N链表中的所有结点添加到M链表的后面,并将N链表的表头结点添加到空闲结点链表中。
要求:1、定义静态链表的结点的结构以及结点的型SPACE以及位置(position)和游标(cursor)的型。
2、定义静态链表的基本操作:void Initialize(); 初始化,将所有存储池中的结点设置为空闲;cursor GetNode(); 从空闲链中获取一个结点;void FreeNode(cursor q); 将结点q加入到空闲链; void Insert ( elementtype x, position p, cursor M ); 在链表M中的位置为p的元素后面添加一个值为x的结点;void Delete (cursor M, position p ); 在链表M中删除位置为p的元素的后一个元素。
数据结构--线性表习题及答案

数据结构--线性表习题及答案第⼆章线性表⼀、选择题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章线性表一选择题下列程序段的时间复杂度为( C )。
for( int i=1;i<=n;i++)for( int j=1;j<= m; j++)A[i][j] = i*j ;A. O(m2)B. O(n2)C. O(m*n)D. (m+n)下面关于线性表的叙述中,错误的是哪一个?( B )A.线性表采用顺序存储,必须占用一片连续的存储单元。
B.线性表采用顺序存储,便于进行插入和删除操作。
C.线性表采用链接存储,不必占用一片连续的存储单元。
D.线性表采用链接存储,便于插入和删除操作。
线性表是具有n个( C )的有限序列(n>0)。
A.表元素 B.字符 C.数据元素D.数据项若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用( A )存储方式最节省时间。
A.顺序表 B.双链表 C.带头结点的双循环链表 D.单循环链表某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用( D )存储方式最节省运算时间。
A.单链表 B.仅有头指针的单循环链表 C.双链表 D.仅有尾指针的单循环链表设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用( D )最节省时间。
A. 单链表B.单循环链表C. 带尾指针的单循环链表D.带头结点的双循环链表若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点。
则采用( D )存储方式最节省运算时间。
A.单链表 B.双链表 C.单循环链表D.带头结点的双循环链表链表不具有的特点是( B )A.插入、删除不需要移动元素 B.可随机访问任一元素A.O(i) B.O(1) C.O(n) D.O (i-1)循环链表H的尾结点P的特点是( A )。
A.P->next=H B.P->next= H->next C.P=H D.P=H->next完成在双循环链表结点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;设指针q指向单链表中结点A,指针p指向单链表中结点A的后继结点B,指针s指向被插入的结点X,则在结点A和结点B插入结点X的操作序列为( B )。
数据结构(C语言版)线性表习题集

第2章线性表一、填空题1. 在顺序表中插入或删除一个元素,需要平均移动表中一半元素,具体移动的元素个数与表长和该元素在表中的位置有关。
2. 线性表中结点的集合是有限的,结点间的关系是一对一的。
3. 向一个长度为n的向量的第i个元素(1≤i≤n+1)之前插入一个元素时,需向后移动n-i+1个元素。
4. 向一个长度为n的向量中删除第i个元素(1≤i≤n)时,需向前移动n-i个元素。
5. 在顺序表中访问任意一结点的时间复杂度均为O(1)_,因此,顺序表也称为随机存取的数据结构。
6. 顺序表中逻辑上相邻的元素的物理位置必定相邻。
单链表中逻辑上相邻的元素的物理位置不一定相邻。
7. 在单链表中,除了首元结点外,任一结点的存储位置由直接前驱结点的指针域的值指示。
8.在n个结点的单链表中要删除已知结点*p,需找到它的直接前驱结点,其时间复杂度为O(n)。
二、判断正误(×)1. 链表的每个结点中都恰好包含一个指针。
(×)2. 链表的物理存储结构具有同链表一样的顺序。
(×)3. 链表的删除算法很简单,因为当删除链中某个结点后,计算机会自动将后续各个单元向前移动。
(×)4. 线性表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。
(×)5. 顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。
(×)6. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。
(×)7. 线性表在物理存储空间中也一定是连续的。
(×)8. 线性表在顺序存储时,逻辑上相邻的元素未必在存储的物理位置次序上相邻。
(×)9. 顺序存储方式只能用于存储线性结构。
(×)10. 线性表的逻辑顺序与存储顺序总是一致的。
三、单项选择题(C)1.数据在计算机存储器内表示时,物理地址与逻辑地址相同并且是连续的,称之为:(A)存储结构(B)逻辑结构(C)顺序存储结构(D)链式存储结构(B)2. 一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是(A)110 (B)108 (C)100 (D)120(A)3. 在n个结点的顺序表中,算法的时间复杂度是O(1)的操作是:(A)访问第i个结点(1≤i≤n)和求第i个结点的直接前驱(2≤i≤n)(B)在第i个结点后插入一个新结点(1≤i≤n)(C)删除第i个结点(1≤i≤n)(D)将n个结点从小到大排序( B )4. 向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动个元素(A)8 (B)63.5 (C)63 (D)7(A)5. 链接存储的存储结构所占存储空间:(A)分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针(B)只有一部分,存放结点值(C)只有一部分,存储表示结点间关系的指针(D)分两部分,一部分存放结点值,另一部分存放结点所占单元数( B)6. 链表是一种采用存储结构存储的线性表;(A)顺序(B)链式(C)星式(D)网状( D )7. 线性表若采用链式存储结构时,要求内存中可用存储单元的地址:(A)必须是连续的(B)部分地址必须是连续的(C)一定是不连续的(D)连续或不连续都可以(B)8.线性表L在情况下适用于使用链式结构实现。
数据结构线性表十道题

线性表,以前交过的十道题1.假设有两个按元素值递增次序排列的线性表,均以单链表形式存储,请编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原来的两个单链表的结点存放归并后的单链表。
【北京大学1998LinkedList Union(LinkedList la,lb)//la.,lb分别是带头结点的两个单链表的头指针,链表中的元素值按递增序列排列,本算法将两个链表合成一个按元素递减次序排列的单链表。
{pa=la->next;pb=lb->next;//pa,pb分别是链表la和lb的工作指针la->next=null; //la作结果链表的头指针,先将结果链表初始化为空while(pa!=null&&pb!=null) //当两链表均不为空时作if (pa->data<=pb->data){ r=pa->next; //将pa的后结继结点暂存于r。
pa->next=la->next;//将pa结点链于结果表中,同时逆置la->next=pa;pa=r; //恢复pa为当前的比较结点。
}else{ r=pb->next; //将pb的后继结点暂存于r。
pb->next=la->next; //将pb结点链接于结果表中,同时逆置la->next=pb;pb=r; //恢复pb为当前的比较结点。
}while (pa!=null){r=pa->next;pa->next=la->next;la->next=pa;pa=r;}while (pb!=null){r=pb->next;pb->next=la->next;la->next=pb;pb=r;}}2 带头结点且头指针ha和hb的两线性表A和B分别表示两个集合,两表中的元表皆为递增有序,请写一算法求A和B的并集AUB,要求该并集中的元表仍保持递增有序,且要利用A和B的原有结点空间LinkedList Union(LinkedList ha,hb)//线性表A和B代表两个集合,以链式存储结构存储,元素递增有序。
线性表习题——精选推荐

线性表习题一、单选题1.在一个长度为n的顺序存储的线性表中,向第i个元素(1≤ i ≤ n+1)位置插入一个新元素时,需要从后向前依次后移()个元素。
A.n-iB. n-i+1C. n-i-1D. i2.在一个长度为n的顺序存储的线性表中,删除第i元素(1≤ i ≤ n)时,需要从前向后依次前移()个元素。
A.n-iB. n-i+1C. n-i-1D. i3.在一个长度为n的线性表中顺序查找值为x的元素时,等概率情况下,查找成功时的平均查找长度为()。
A.nB. n/2C. (n+1)/2D. (n-1)/24.在一个长度为n的线性表中,删除值为x的元素时需要比较元素和移动元素的总次数为()。
A.(n+1)/2B. n/2C. nD. n+15.在一个顺序表的表尾插入一个元素的时间复杂度为()。
A.O(n)B. O(1)C. O(n2)D. O(log2n)6.在一个表头指针为ph的单链表中,若要在指针q所指结点的后面插入一个由指针p所指向的结点,则执行()操作。
A.q^.next := p^.next; p^.next := q;B. p^.next := q^.next; q := p;C. q^.next := p^.next; p := q;D. p^.next := q^.next; q^.next := p;7.若某链表中最常用的操作是在最后一个结点之后插入一个结点和删除最后一个结点,则采用()存储方式最节省运算时间。
A.单链表B. 双链表C.单循环链表D. 带头结点的双循环链表8.用单链表表示的链式队列的队头在链表的()位置。
A.链头B. 链尾C. 链中D. 不确定二、填空题1.对一个长度为n的线性表分别进行遍历和逆置运算,其时间复杂度分别是___________和____________。
2.若经常需要对线性表进行插入和删除运算,则最好采用___________存储结构;若经常需要对线性表进行查找运算,则最好采用_____________存储结构。
线性表习题

填空题
7.带头结点的单链表head为空的判定条件是____。 带头结点的单链表head为空的判定条件是____。 带头结点的单链表head为空的判定条件是____ 8.带头结点的双循环链表 为空表的条件____ 带头结点的双循环链表L ____。 8.带头结点的双循环链表L为空表的条件____。
算法题
算法题
1.设计一个算法,求一个单链表中的结点个数。 1.设计一个算法,求一个单链表中的结点个数。 设计一个算法 2.设计一个算法 设计一个算法, 2.设计一个算法,从右往左打印一个双链表中 各个结点的值。 各个结点的值。 3.设计一个算法 对一个有序的单链表, 设计一个算法, 3.设计一个算法,对一个有序的单链表,删除 所有值大于x而不大于y的结点。 所有值大于x而不大于y的结点。 4.设计一个算法 设计一个算法, 4.设计一个算法,判断一个单链表中的各个结 点值是否有序。 点值是否有序。
1.已知一个顺序表A,其中的元素按值非递减有 已知一个顺序表A 已知一个顺序表 序排列,编写一个函数插入一个元素x 序排列,编写一个函数插入一个元素x后保持 该顺序表仍按递减有序排列。 该顺序表仍按递减有序排列。 2.从顺序表中删除所有值为 的元素。 从顺序表中删除所有值为x 2.从顺序表中删除所有值为x的元素。 3.编写一个函数从一给定的顺序表 编写一个函数从一给定的顺序表A 3.编写一个函数从一给定的顺序表A中删除元素 值在x 值在x到y(x≤y)之间的所有元素,要求以较 y 之间的所有元素, 高的效率来实现。 高的效率来实现。 4.用顺序表表示集合 实现集合的求并集运算。 用顺序表表示集合, 4.用顺序表表示集合,实现集合的求并集运算。
填空题
1.下面程序的时间复杂度为 下面程序的时间复杂度为___________。 下面程序的时间复杂度为 for (int i=1; i<=m; i++) for (int j=1; j<=n; j++ ) S+=i ; 2.在长度为n的顺序表的第i(1≤i≤n+1)个 在长度为n 在长度为 的顺序表的第i 1≤i≤n+1) 位置上插入一个元素, 位置上插入一个元素,元素的移动次数是 ____________。 ____________。 3.在单链表中 要删除某一指定结点, 在单链表中, 3.在单链表中,要删除某一指定结点,必须找 到该结点的_______的结点。 _______的结点 到该结点的_______的结点。
线性表习题

线性表习题第二章一选择题1.一个线性表第一个元素的存储地址是100,每个元素的长度为4,则第5个元素的地址是( )A.110B.116C.100D.1202. 向一个有128个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动()个元素。
A.64B.63C.63.5D.73.在循环双链表的p所指接点之前插入s所指接点的操作是A.p-> prior =s;s-> next t=p;p-> prior t->left=s;s-> prior =p-> prior;B. p-> prior =s;p-> prior -> next =s;s-> next =p;s-> prior =p-> prior;C.s-> next =p;s-> prior =p-> prior;p-> prior =s;p-> prior -> next =s;D.s-> next =p;s-> prior =p-> prior;p-> prior -> next =s;p-> prior =s;4.从一个具有n个结点的单链表中查找其值等于x结点时,在查找成功的情况下,需平均比较()个结点。
A.nB.n/2C.(n-1)/2D.(n+1)/25.线性表是具有n个()的有限序列(n≠0)A.表元素B.字符C.数据元素D.数据项6.非空的循环单链表head的尾结点(由P指向)满足A. p->next=NULLB. p=NULLC. p->next=headD.p=head7.在一个单链表中已知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;8.已知一个顺序存储线性表,若第1个结点的地址d,第3个的地址是5d,则第n个结点的地址为( )A.[2*(n-1)+1]*d B.2*(n-1)*d C.[2*(n-1)-1]*d D.(n+1)*d9.在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是( ) A.O(1) B.O(n) C.O(n2) D.O(nlog2n) 10.如果最常用的操作是提取第i个结点及其前驱,则采用( )存储方式最节省时间。
数据结构(线性表)练习题与答案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-4章)

第一部分线性表练习题一、单项选择题1、算法指的是()。
A) 计算机程序B) 解决问题的计算方法C) 排序算法D) 解决问题的方法和步骤。
2、人们通常以()作为数据的基本单位。
A)数据元素B)数据项C)数据结构D)节点3、与数据元素本身的形式、内容、相对位置、个数无关的是数据的()。
A) 存储结构B) 逻辑结构C) 算法D)操作4、从逻辑上可以把数据结构分为()两大类。
A) 动态结构、静态结构B) 顺序结构、链式结构C) 线性结构、非线性结构D) 初等结构、构造型结构5、下列叙述中正确的是( )。
A)一个逻辑数据结构只能有一种存储结构B)数据的逻辑结构属于线性结构,存储结构属于非线性结构C)一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率D)一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率6、具有独立含义的最小数据单位是()。
A) 数据项B) 数据类型C) 数据元素D) 数据变量7、下列程序的时间复杂度为()。
i=0;s=0;while(s<n){ i++;s=s+i;}A) O(n)B) O(n2)C) O(n)D) O(n2)8、下列程序段的时间复杂度为()。
for( int i=1;i<=n;i++)for( int j=1;j<= m; j++)A[i][j] = i*j ;A)O(m2) B)O(n2) C)O(m*n) D)(m+n)9、若某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则最节省运算时间的存储方式是()。
A)单链表B)仅有头指针的单循环链表C)双链表D)仅有尾指针的单循环链表10、带头结点的单链表head为空的判定条件是()。
A)head == NULL B)head->next ==NULLC)head->next ==head D)head!=NULL11、求单链表中当前结点的后继和前驱的时间复杂度分别是()。
数据结构(线性表)练习题与答案1

数据结构(线性表)练习题与答案11、线性表是()。
A.⼀个有限序列,可以为空B.⼀个有限序列,不可以为空C.⼀个⽆限序列,可以为空D.⼀个⽆限序列,不可以为空正确答案:A解析:线性表是具有n(n≥0)个数据元素的有限序列。
2、线性表的基本运算ListInsert(&L,i,e)表⽰在线性表L中第i 个位置上插⼊⼀个元素e,若L的长度为n,则i的合法取值是()。
A.1≤i≤nB.1≤i≤n+1C.0≤i≤n-1D. 0≤i≤n正确答案:B解析:线性表的基本运算ListInsert(&L,i,e)中,位置i是指逻辑序号,可以在L的位置1到位置n+1插⼊元素。
3、顺序表具有随机存取特性,指的是()。
A.查找值为x的元素与顺序表中元素个数n⽆关B.查找值为x的元素与顺序表中元素个数n有关C.查找序号为i的元素与顺序表中元素个数n⽆关D.查找序号为i的元素与顺序表中元素个数n有关正确答案:C解析:⼀种存储结构具有随机存取特性指的是,对于给定的序号i,在O(1)时间内找到对应元素值。
4、在顺序表中删除⼀个元素所需要的时间()。
A.与删除元素的位置及顺序表的长度都有关B.只与删除元素的位置有关C.与删除任何其他元素所需要的时间相等D.只与顺序表的长度有关正确答案:A解析:当从顺序表中删除元素时,为了保持顺序表的逻辑特性,需要移动元素以覆盖该删除的元素。
因此在顺序表中删除⼀个元素与该元素的位置及顺序表的长度都有关。
5、在n(n>1)个运算的顺序表中,算法时间复杂度为O(1)的运算是()。
A.访问第i个元素(2≤i≤n)并求其前驱元素B.在第i个元素之后插⼊⼀个新元素C.删除第i个元素D.将这n个元素递增排序正确答案:A解析:访问第i个元素(2≤i≤n)即L->data[i-1]和求其前驱元素L->data[i-2]的时间复杂度均为O(1)。
6、关于线性表的顺序存储结构和链式存储结构的描述中,正确的是()。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、假设有两个按元素值递增次序排列的线性表,均以单链表形式存储。
请编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表。
输入: 1 2 5 6 83 4 7 9 10输出: 10 9 8 7 6 5 4 3 2 1测试数据输入:7 9 10 118 12 13 14输出:14 13 12 11 10 9 8 7链表翻转2.带头结点且头指针为ha和hb的两线性表A和B 分别表示两个集合。
两表中的元素皆为递增有序。
请写一算法求A和B的并集AUB。
要求该并集中的元素仍保持递增有序。
且要利用A和B的原有结点空间。
输入: 1 2 5 6 82 5 7 9输出: 1 2 5 6 7 8 9测试数据输入:7 9 10 118 9 10 11输出:7 8 9 10 113. 知L1、L2分别为两循环单链表的头结点指针,m,n分别为L1、L2表中数据结点个数。
要求设计一算法,用最快速度将两表合并成一个带头结点的循环单链表。
4. 顺序结构线性表LA与LB的结点关键字为整数。
LA与LB的元素按非递减有序,线性表空间足够大。
试用类PASCAL语言给出一种高效算法,将LB中元素合到LA中,使新的LA的元素仍保持非递减有序。
高效指最大限度的避免移动元素。
5. 已知不带头结点的线性链表list,链表中结点构造为(data、link),其中data为数据域,link为指针域。
请写一算法,将该链表按结点数据域的值的大小从小到大重新链接。
要求链接过程中不得使用除该链表以外的任何链结点空间。
6. 设L为单链表的头结点地址,其数据结点的数据都是正整数且无相同的,试设计利用直接插入的原则把该链表整理成数据递增的有序单链表的算法。
7. 设 Listhead为一单链表的头指针,单链表的每个结点由一个整数域DATA和指针域NEXT组成,整数在单链表中是无序的。
编一PASCAL 过程,将 Listhead链中结点分成一个奇数链和一个偶数链,分别由P,Q指向,每个链中的数据按由小到大排列。
程序中不得使用 NEW过程申请空间。
8. 已知线性表(a1 a2 a3 …an)按顺序存于内存,每个元素都是整数,试设计用最少时间把所有值为负数的元素移到全部正数值元素前边的算法:例:(x,-x,-x,x,x,-x …x)变为(-x,-x,-x…x,x,x)。
9. 试编写在带头结点的单链表中删除(一个)最小值结点的(高效)算法。
void delete(Linklist &L)10. 已知非空线性链表由list指出,链结点的构造为(data,link).请写一算法,将链表中数据域值最小的那个链结点移到链表的最前面。
要求:不得额外申请新的链结点。
【北京航空航天大学 2001 四(10分)】11. 已知p指向双向循环链表中的一个结点,其结点结构为data、llink、rlink三个域,写出算法change(p),交换p所指向的结点和它的前缀结点的顺序。
12. 线性表(a1,a2,a3,…,an)中元素递增有序且按顺序存储于计算机内。
要求设计一算法完成:(1)用最少时间在表中查找数值为x的元素。
(2)若找到将其与后继元素位置相交换。
(3)若找不到将其插入表中并使表中元素仍递增有序。
【东北大学1996 三 ( 12分)】13. 设单链表的表头指针为h,结点结构由data和next两个域构成,其中data域为字符型。
写出算法dc(h,n),判断该链表的前n个字符是否中心对称。
例如 xyx, xyyx都是中心对称。
14. 已知两个单链表A和B,其头指针分别为heada和headb,编写一个过程从单链表A中删除自第i个元素起的共len个元素,然后将单链表A插入到单链表B的第j个元素之前。
15. 设线性表存于A[1..size]的前num各分量中,且递增有序。
请设计一个算法,将x插入到线性表的适当位置上,以保持线性表的有序性,并在设计前说明设计思想,最后说明所设计算法的时间复杂度。
16. 假设一个单循环链表,其结点含有三个域pre、data、link。
其中data为数据域;pre为指针域,它的值为空指针(NIL);link为指针域,它指向后继结点。
请设计算法,将此表改成双向循环链表。
17. 已知递增有序的单链表A,B分别存储了一个集合,请设计算法以求出两个集合A和B 的差集A-B(即仅由在A中出现而不在B中出现的元素所构成的集合),并以同样的形式存储,同时返回该集合的元素个数。
18. 已知一个单链表中每个结点存放一个整数,并且结点数不少于2,请设计算法以判断该链表中第二项起的每个元素值是否等于其序号的平方减去其前驱的值,若满足则返回ture,否则返回false.19.两个整数序列A=a1,a2,a3,…,am和B=b1,b2,b3,…,bn已经存入两个单链表中,设计一个算法,判断序列B是否是序列A的子序列。
【东北大学 1999 二 (10分)】20.已知三个带头结点的线性链表A、B和C中的结点均依元素值自小至大非递减排列(可能存在两个以上值相同的结点),编写算法对A表进行如下操作:使操作后的链表A中仅留下三个表中均包含的数据元素的结点,且没有值相同的结点,并释放所有无用结点。
限定算法的时间复杂度为O(m+n+p),其中m、n和p分别为三个表的长度。
21. 请写一个算法将顺序存储结构的线性表(a1...an)逆置为(an...a1)。
【大连海事大学1996八(6分)】22.设有一个由正整数组成的无序(向后)单链表,编写完成下列功能的算法:(1)找出最小值结点,且打印该数值;(2)若该数值是奇数,则将其与直接后继结点的数值交换;(3)若该数值是偶数,则将其直接后继结点删除。
【东北大学 2000 二(15分)】23.已知L为没有头结点的的单链表中第一个结点的指针,每个结点数据域存放一个字符,该字符可能是英文字母字符或数字字符或其它字符,编写算法构造三个以带头结点的单循环链表表示的线性表,使每个表中只含同一类字符。
(要求用最少的时间和最少的空间)24.在一个递增有序的线性表中,有数值相同的元素存在。
若存储方式为单链表,设计算法去掉数值相同的元素,使表中不再有重复的元素。
例如:(7,10,10,21,30,42,42,42,51,70)将变作(7,10,21,30,42,51,70),分析算法的时间复杂度。
25.在输入数据无序的情况下,建立一个数据值为整型的递增有序的顺序存储线性表L,且要求当输入相同数据值时,线性表中不能存在数据值相同的数据元素,试写出其算法。
顺序存储结构的线性表描述为:CONST maxlen={线性表可能达到的最大长度};TYPE sqlisttp=RECORDelem:array[1..maxlen] of integer;last :0..maxlenEND;VAR L: sqlisttp;26.设有一个正整数序列组成的有序单链表(按递增次序有序,且允许有相等的整数存在),试编写能实现下列功能的算法:(要求用最少的时间和最小的空间)(1)确定在序列中比正整数x大的数有几个(相同的数只计算一次,如序列{20,20,17,16,15,15,11,10,8,7,7,5,4}中比10大的数有5个);(2) 在单链表将比正整数x小的数按递减次序排列;(3) 将正整数(比)x大的偶数从单链表中删除。
【东北大学 2001 二(17分)】27. 编写一个算法来交换单链表中指针P所指结点与其后继结点,HEAD是该链表的头指针,P指向该链表中某一结点。
【吉林大学 2001 二、1 (7分)】28.设键盘输入n个英语单词,输入格式为n, w1, w2, …,wn,其中n表示随后输入英语单词个数,试编一程序,建立一个单向链表,实现:(10分)(1)如果单词重复出现,则只在链表上保留一个。
(单考生做)。
(2)除满足(1)的要求外。
链表结点还应有一个计数域,记录该单词重复出现的次数,然后输出出现次数最多的前k(k<=n)个单词(统考生做)。
【南京航空航天大学 1998 九(10分)】29.已知一双向循还链表,从第二个结点至表尾递增有序,(设a1<x<an)如下图(“第二个结点至表尾”指a1..an ,因篇幅所限,编者略去图)。
试编写程序,将第一个结点删除并插入表中适当位置,使整个链表递增有序。
【南京航空航天大学1998八(10分)】30. 已知长度为n的线性表A采用顺序存储结构,请写一时间复杂度为0(n)、空间复杂度为0(1)的算法,该算法删除线性表中所有值为item的数据元素。
(O(1)表示算法的辅助空间为常量)。
31.设民航公司有一个自动预订飞机票的系统,该系统中有一张用双重链表示的乘客表,表中结点按乘客姓氏的字母序相链。
例如,下面是张某个时刻的乘客表。
试为该系统写出一个当任一乘客要订票时修改乘客表的算法。
序号 data Llink Rlink1 Liu 6 52 Chan 4 93 Wang 5 74 Bao 0 25 Mai 1 36 Dong 8 17 Xi 3 08 Deng 9 69 Cuang 2 832.设有一头指针为L的带有表头结点的非循环双向链表,其每个结点中除有pred(前驱指针),data(数据)和next(后继指针)域外,还有一个访问频度域freq。
在链表被起用前,其值均初始化为零。
每当在链表中进行一次Locate(L,x)运算时,令元素值为x的结点中freq域的值增1,并使此链表中结点保持按访问频度非增(递减)的顺序排列,同时最近访问的结点排在频度相同的结点的最后,以便使频繁访问的结点总是靠近表头。
试编写符合上述要求的Locate(L,x)运算的算法,该运算为函数过程,返回找到结点的地址,类型为指针型。
33.给定(已生成)一个带表头结点的单链表,设head为头指针,结点的结构为(data,next),data为整型元素,next为指针,试写出算法:按递增次序输出单链表中各结点的数据元素,并释放结点所占的存储空间。
(要求;不允许使用数组作辅助空间)34.已知三个带头结点的线性链表A、B和C中的结点均依元素值自小至大非递减排列(可能存在两个以上值相同的结点),编写算法对A表进行如下操作:使操作后的链表A中仅留下三个表中均包含的数据元素的结点,且没有值相同的结点,并释放所有无用结点。
限定算法的时间复杂度为O(m+n+p),其中m、n和p分别为三个表的长度。
35.试编写算法将线性表就地逆置。
分别以顺序存储结构和链式存储结构实现。
36.己知两个线性表A ,B均以带头结点的单链表作存储结构,且表中元素按值递增有序排列。
设计算法求出A与B的交集C,要求C 另开辟存储空间,要求C同样以元素值的递增序的单链表形式存贮,并计算算法的时间复杂度。