线性表编程练习题Word格式.docx
《线性表编程练习题Word格式.docx》由会员分享,可在线阅读,更多相关《线性表编程练习题Word格式.docx(5页珍藏版)》请在冰豆网上搜索。
![线性表编程练习题Word格式.docx](https://file1.bdocx.com/fileroot1/2022-10/25/b6ee0fa4-725a-4c61-b5dc-533c06dcea3f/b6ee0fa4-725a-4c61-b5dc-533c06dcea3f1.gif)
链表翻转
2.带头结点且头指针为ha和hb的两线性表A和B分别表示两个集合。
两表中的元素皆为递增有序。
请写一算法求A和B的并集AUB。
要求该并集中的元素仍保持递增有序。
且要利用A和B的原有结点空间。
2579
1256789
891011
7891011
3.知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.线性表〔a1a2a3…an〕按顺序存于存,每个元素都是整数,试设计用最少时间把所有值为负数的元素移到全部正数值元素前边的算法:
例:
〔x,-x,-x,x,x,-x…x〕变为〔-x,-x,-x…x,x,x〕。
9.试编写在带头结点的单链表中删除〔一个〕最小值结点的〔高效〕算法。
voiddelete〔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,且要求当输入一样数据值时,线性表中不能存在数据值一样的数据元素,试写出其算法。
顺序存储构造的线性表描述为:
CONSTmaxlen={线性表可能到达的最大长度};
TYPEsqlisttp=RECORD
elem:
array[1..maxlen]ofinteger;
last:
0..maxlen
END;
VARL:
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.设民航公司有一个自动预订飞机票的系统,该系统中有一用双重链表示的乘客表,表中结点按乘客姓氏的字母序相链。
例如,下面是某个时刻的乘客表。
试为该系统写出一个当任一乘客要订票时修改乘客表的算法。
序号dataLlinkRlink
1Liu65
2Chan49
3Wang57
4Bao02
5Mai13
6Dong81
7Xi30
8Deng96
9Cuang28
32.设有一头指针为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表进展如下操作:
35.试编写算法将线性表就地逆置。
分别以顺序存储构造和链式存储构造实现。
36.己知两个线性表A,B均以带头结点的单链表作存储构造,且表中元素按值递增有序排列。
设计算法求出A与B的交集C,要求C另开辟存储空间,要求C同样以元素值的递增序的单链表形式存贮,并计算算法的时间复杂度。
37.不带头结点的线性链表list,链表中结点构造为〔data、link〕,其中data为数据域,link为指针域。
38.设键盘输入n个英语单词,输入格式为n,w1,w2,…,wn,其中n表示随后输入英语单词个数,试编一程序,建立一个单向链表,实现:
39.两个整数序列A=a1,a2,a3,…,am和B=b1,b2,b3,…,bn已经存入两个单链表中,设计一个算法,判断序列B是否是序列A的子序列。
40.设有一个由正整数组成的无序〔向