线性表编程练习题

合集下载

第二章线性表习题及答案

第二章线性表习题及答案

第二章线性表习题及答案‎一、基础知识题‎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结点时,在查找成功的情况下,需平均比较()个结点。

数据结构(线性表)习题与答案

数据结构(线性表)习题与答案

一、单选题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、定义线性表的基本操作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的元素的后一个元素。

线性表的习题

线性表的习题

3.在一个长度为 的顺序表中删除 在一个长度为n的顺序表中删除 在一个长度为 个元素,需向前移动 个元素. 第i个元素 需向前移动 )个元素 个元素 需向前移动( 个元素 4.带头结点 带头结点head的单链表为空的判 带头结点 的单链表为空的判 定条件是( 定条件是 ) 5. 在一个单链表中 已知 所指的结 在一个单链表中,已知 已知q所指的结 点是p所指结点的前驱结点 若在p和 之 所指结点的前驱结点,若在 点是 所指结点的前驱结点 若在 和q之 间插入s结点 则执行( 结点,则执行 间插入 结点 则执行 )
6.在一个单链表中 若p所指结点不是 在一个单链表中,若 所指结点不是 在一个单链表中 最后结点,在 之后插入 所指结点,则执行 之后插入s所指结点 最后结点 在p之后插入 所指结点 则执行 ( ) 7.在一个单链表中 若删除 所指结点 在一个单链表中,若删除 在一个单链表中 若删除p所指结点 的后续结点,则执行 则执行( 的后续结点 则执行 ).(要求不借助新的 要求不借助新的 变量) 变量
8.在一个单链表中的 所指的结点前插 在一个单链表中的p所指的结点前插 在一个单链表中的 入一个s所指结点时 可执行下面的操作: 所指结点时,可执行下面的操作 入一个 所指结点时 可执行下面的操作 s->next=( p->next=s; t=p->data; p->data=( s->data=( ); ); );
线性表的习题
1.一个顺序表的第一个元素的存 1.一个顺序表的第一个元素的存 储地址是100,每个元素的长度为2, 100,每个元素的长度为2,则 储地址是100,每个元素的长度为2,则 个元素的地址是( 第5个元素的地址是( ).
2.在一个长度为n 2.在一个长度为n的顺序表中的第 在一个长度为个元素. 动( )个元素.

线性表练习题(答案)

线性表练习题(答案)

线性表练习题(答案)第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语言版)线性表习题集

数据结构(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、假设有两个按元素值递增次序排列的线性表,均以单链表形式存储。

请编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表。

输入: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 S言给出一种高效算法,将LB中元素合到LA中,使新的LA的元素仍保持非递减有序。

咼效指最大限度的避免移动兀素。

5.已知不带头结点的线性链表list ,链表中结点构造为(data、link ),其中data为数据域,link为指针域。

请写一算法,将该链表按结点数据域的值的大小从小到大重新链接。

要求链接过程中不得使用除该链表以外的任何链结点空间。

6.设L为单链表的头结点地址,其数据结点的数据都是正整数且无相同的,试设计利用直接插入的原则把该链表整理成数据递增的有序单链表的算法。

7.设Listhead 为一单链表的头指针,单链表的每个结点由一个整数域DATA 和指针域NEXTS成,整数在单链表中是无序的。

编一PASCAL 过程,将Listhead链中结点分成一个奇数链和一个偶数链,分别由P,Q指向,每个链中的数据按由小到大排列。

线性表习题——精选推荐

线性表习题——精选推荐

线性表习题一、单选题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.若经常需要对线性表进行插入和删除运算,则最好采用___________存储结构;若经常需要对线性表进行查找运算,则最好采用_____________存储结构。

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

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

习题二参考答案一、选择题1. 链式存储结构的最大优点是( D )。

A.便于随机存取B.存储密度高C.无需预分配空间D.便于进行插入和删除操作2. 假设在顺序表{a 0,a 1,……,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(log 2n)C. O(n)D. O(n2)7. 要将一个顺序表{a 0,a 1,……,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 )。

数据结构(线性表)练习题与答案2

数据结构(线性表)练习题与答案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-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

数据结构(线性表)练习题与答案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.求单链表中当前结点的后继和前驱的时间复杂度分别是()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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 25Mai 136Dong817Xi 308Deng969Cuang2832.设有一头指针为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 分别为三个表的长度。

相关文档
最新文档