线性表-例题

合集下载

第2章 线性表

第2章 线性表

《数据结构》第2章线性表共55题一、单选1. (1)分题目ID号:10545 题目难度:容易在一个长度为n的顺序存储的线性表中,向第i个元素(1≤i≤i十1)位量插入一个新元素时,需要从后向前依次后移【1】个元素。

A. n—iB. n—i十1C. n一i一1 D. i题目答案:B2. (1)分题目ID号:10546 题目难度:容易线性表是【1】。

A. 一个有限序列,可以为空B. 一个有限序列,不能为空C. 一个无限序列,可以为空D. 一个无序序列,不能为空题目答案:A3. (1)分题目ID号:10548 题目难度:容易在一个长度为n的线性表中,删除值为x的元素时需要比较元素和移动元素的总次数为【1】A. (n十1)/2B. n/2C. nD. n十l题目答案:C4. (1)分题目ID号:10549 题目难度:容易在一个顺序表的表尾插入一个元素的时间复杂度的量级为【1】A. ○(n)B. ○(1)C. ○(n*n)D. ○(lbn)题目答案:B5. (1)分题目ID号:10550 题目难度:容易单链表的存储密度为【1】A. 大于1B. 等于1C. 小于1D. 不能确定题目答案:C题目分析:存储密度=单链表数据项所占空间/结点所占空间结点所占空间由数据项所占空间和存放后继结点地址的链域,所以,存储密度小于1 。

6. (4)分题目ID号:10551 题目难度:难设单链表中指针p指向结点ai,指针q指着将要插入的新结点x,问:[1] 当x插在链表中两个数据元素ai和ai+1之间时,只要先修改【1】后修改【2】即可。

A.p一>next=qB.p一>next=p一>next->nextC.p->next=q->nextD.q一>next=p一>nextE.q->next=NULLF.q一>next=p[2] 在链表中最后一个结点an之后插入时,只要先修改【3】后修改【4】即可。

数据结构_线性表练习题

数据结构_线性表练习题

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

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

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

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

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

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

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

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

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

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

(FALSE )二.选择题11.线性表是()。

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

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

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

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

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

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

(A)便于随机存取(B)花费的存储空间较顺序存储少(C)便于插入和删除(D)数据元素的物理顺序与逻辑顺序相同答:C15.单链表中,增加一个头结点的目的是为了()。

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

第二章线性表

第二章线性表

第二章线性表第二章线性表一、选择题1.线性表是具有n个__C___的有限序列(n>0)。

A.表元素B.字符C.数据元素D.数据项2.一个顺序表所占用的存储空间大小与___B___无关。

A.表的长度C.元素的类型B.元素的存放顺序D.元素中各字段的类型3.线性表的顺序存储结构是一种__A___。

A.随机存取的存储方式C.索引存取的存储方式B.顺序存取的存储方式D.Hash存取的存储方式4. 若线性表采用顺序存储结构,每个元素占用4 个存储单元,第一个元素的存储地址为100,则第12 个元素的存储地址是__B____。

A.112 B.144 C.148 D.4125. 线性表是__A____。

A.一个有限序列,可以为空B.一个有限序列,不能为空C.一个无限序列,可以为空D.一个无限序列,不能为空6.对于顺序存储的线性表,访问结点和增加、删除结点的时间复杂度为__C____。

A.O(n)O(n)B.O(n)O(1)C.O(1)O(n)D.O(1)O(1) 7.若长度为n的非空线性表采用顺序存储结构,删除表的第i个数据元素,首先需要移动表中___A____中数据元素。

A.n-i B.n+i C.n-i+1 D.n-i-1 8.对顺序存储的线性表,设其长度为n,在任何位置插入或删除操作都是等概率的。

删除一个元素时平均要移动表中的____C____个元素。

A.n/2 B.(n+1)/2 C.(n-1)/2 D.n 9.若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素的算法的时间复杂度为__C____。

(1≤i≤n+1)A.O(0)B.O(1)C.O(n)D.O(n2)10.线性表中各链接点之间的地址___C____。

A.必须连续B.部分地址必须连续C.不一定连续D.连续与否无所谓11.在n个结点的线性表的数组表示中,算法的时间复杂度是O(1)的操作是_A______。

A.访问第i个结点后插入一个新结点(1≤i≤n)和求第i个结点的直接前驱(2≤i≤n)B.在第i个结点后插入一个新结点(1≤i≤n)C.删除第i 个结点(1≤i≤n)D.以上都不对12.单链表中,增加一个头结点的目的是为了____C_____。

数据结构-线性表习题及解析

数据结构-线性表习题及解析

线性表典型例题一、单项选择题[例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指向头结点。

数据结构与算法(线性表)练习题

数据结构与算法(线性表)练习题

三、写一个算法合并两个已排序的线性表。

〔用两种方法:数组表示的线性表〔顺序表〕和指针表示的线性表〔链表〕〕要求: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 的元素的后一个元素。

第二章线性表例题

第二章线性表例题
8
例3.设有一个顺序表L,其元素为整型数 据,设计一个算法将L中所有小于0的整 数放在前半部分,大于等于0的整数放在 后半部分。

算法思路 从L的两端查找,前端找大于等于0的元素 (位置为i),后端找小于0的元素(位置为 j),然后将两位置的元素交换。
9
Status Move(SqList &L) { ElemType temp; int i=0,j=L.length-1; while( i<j ) { while( i<j && L.elem[ i ]<0) i++; //从前向后找大于等于0的元素 while( i<j && L.elem[ j ]>=0 ) j--; // 从后向前找小于0的元素 if ( i<j ) //交换L.elem[i]和L.elem[j] { temp=L.elem[ i ]; L.elem[ i ]=L.elem[ j ]; L.elem[ j ]=temp; } } 10 }
19
例3:已知非空线性链表L的链结点按结点数 据域值非递减链接,请写一算法,删除链表 中数据域值相同的多余链结点。

算法思路: 算法设置一指针变量p,从链表的第一个链结点开 始到链表最后那个链结点,依次判断当前p指的链 结点与其直接后继结点的值是否相同,若相同, 则删除其后继结点,否则,p移到下一个链结点。
பைடு நூலகம்
线性表链式存储
typedef struct Lnode { elemtype data; // 数据域 struct Lnode *next; // 指针域 }Lnode, *linklist;
15
例1:已知非空线性链表L,请写一逆转该线 性链表的算法。

数据库 线性表题库

数据库 线性表题库

一、单项选择题1、线性表的静态链表存储结构与顺序存储结构相比优点是()A、所有的操作算法实现简单 B 便于随机存取B、C便于插入和删除 D便于利用零散的存储器空间2、将下图所示的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;3、不带头结点的单链表head为空的判定条件是()A head= =NULLB head->next= =NULLC head->next= =headD head!=NULL4、带头结点的单链表head为空的判定条件是()A head= =NULLB head->next= =NULLC head->next= =headD head!=NULL5、在一个单链表中,已知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;6、在一个单链表中,若p所指结点不是最后结点,在p之后插入s结点,则应执行语句()A s->next=p:p->next=s;B s->next=p->next;p->next=s;C s->next=p->next;p=s;D p->next=s;s->next=p;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、从一个具有n个结点的单链表中查找其值等于x结点时,在查找成功的情况下,需平均比较__个结点()A nB n/2C (n-1)/2D (n+1)/29、数据在计算机存储器内表示时,物理地址与逻辑地址相同并且是连续的,称之为:(A)存储结构(B)逻辑结构(C)顺序存储结构(D)链式存储结构10、一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是(A)110 (B)108 (C)100 (D)12011、在n个结点的顺序表中,算法的时间复杂度是O(1)的操作是:(A)访问第i个结点(1≤i≤n)和求第i个结点的直接前驱(2≤i≤n)(B)在第i个结点后插入一个新结点(1≤i≤n)(C)删除第i个结点(1≤i≤n)(D)将n个结点从小到大排序12、向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动个元素(A)8 (B)63.5 (C)63 (D)713、链接存储的存储结构所占存储空间:(A)分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针(B)只有一部分,存放结点值(C)只有一部分,存储表示结点间关系的指针(D)分两部分,一部分存放结点值,另一部分存放结点所占单元数14、链表是一种采用存储结构存储的线性表;(A)顺序(B)链式(C)星式(D)网状15、线性表若采用链式存储结构时,要求内存中可用存储单元的地址:(A)必须是连续的(B)部分地址必须是连续的(C)一定是不连续的(D)连续或不连续都可以16、线性表L在情况下适用于使用链式结构实现。

数据结构--线性表习题及答案

数据结构--线性表习题及答案

数据结构--线性表习题及答案第⼆章线性表⼀、选择题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))和链接两种。

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

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

1、线性表是具有n 个______ 的有限序列。

A.数据项B.字符C.数据元素D.表元素正确答案:C2、线性表是_______。

A.一个无限序列,可以为空B.一个有限序列不可以为空C.一个无限序列,不可以为空D.一个有限序列,可以为空正确答案:D3、关于线性表的正确说法是_______。

A.每一个元素都有一个前驱和一个后继元素B.除第一个元素和最后一个元素外,其余元素有且仅有一个前驱和一个后继元素C.表中元素的排序顺序必须是由小到大或者由大到小D.线性表中至少有一个元素正确答案:B4、线性表采用链表存储时,其存放各个元素的单元地址是_______。

A.连续与否均可以B.部份地址必须是连续的C.一定是不连续的D.必须是连续的5、链表不具备的特点是_______。

A.插入删除不需要挪移元素B.所需空间与其长度成正比C.不必事先估计存储空间D.可随机访问任一节点正确答案:D6、线性表的静态链表存储结构与顺序存储结构相比,优点是_______。

A.所有的操作算法实现简单B.便于利用零散的存储器空间C.便于随机存取D.便于插入和删除正确答案:D7、线性表的顺序存储结构和链式存储结构相比,优点是_______。

A.便于随机存取B.便于插入和删除C.所有的操作算法实现简单D.节省存储空间正确答案:A 8、设线性表有n 个元素,以下操作中,_______在顺序表上实现比在链表上实现效率高。

A.交换第1 个元素第2 个元素的值B.输出与给定值x 相等的元素在线性表中的符号C.输入第i ( 1<=i<=n )个元素值D.顺序输出这n 个元素的值正确答案:C9、对于一个线性表,既要求能够较快地进行插入和删除操作,又要求存储结构能够反映数据元素之间的逻辑关系,则应采用_______ 存储结构。

A.顺序B.链式C.散列D.索引正确答案:B10、设线性表中有n 个元素,以下操作,_______ 在单链表上实现要比在顺序表上实现效率高。

线性表习题

线性表习题

填空题
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、数据逻辑结构包括线性结构、树型结构、图型结构这三种类型,树形结构和图形结构合称为非线性结构。

2、在线性结构中,第一个结点没有前驱结点,其余每个结点有且只有个前驱结点,最后一个结点没有后续结点,其余每个结点有且只有一个后续结点。

3、在顺序表中插入或删除一个元素,需要平均移动一半元素,具体移动的元素个数与插入或删除的位置有关。

4、在顺序表中,逻辑上相邻的元素,其物理位置一定相邻。

在单链表中,逻辑上相邻的元素,其物理位置不一定相邻。

5、在带头结点的非空单链表中,头结点的存储位置由头指针指示,首元素结点的存储位置由头结点的next域指示,除首元素结点外,其它任一元素结点的存储位置由其直接前趋结点的next域指示。

6、阅读下列算法,并补充所缺内容。

void purge_linkst( ListNode *& la ){// 从头指针为 la 的有序链表中删除所有值相同的多余元素,并释放被删结点空间ListNode *p,*q;if(la==NULL) return;q=la; p = la->link;while (p){if (p && ___(1)p->data!=q->data___) {q=p; p = p->link;}else{q->link= ___(2)p->link___;delete(p);p=___(3)q->link___;}}//while}// purge_linkst二、选择题1、在数据结构中,从逻辑上可以把数据结构分成 C。

A、动态结构和静态结构B、紧凑结构和非紧凑结构C、线性结构和非线性结构D、内部结构和外部结构2、线性表的逻辑顺序与存储顺序总是一致的,这种说法 B。

A、正确B、不正确3、线性表若采用链式存储结构时,要求内存中可用存储单元的地址D。

A、必须是连续的B、部分地址必须是连续的C、一定是不连续的D、连续或不连续都可以4、在以下的述叙中,正确的是B。

线性表习题

线性表习题

第二章习题:1.表长为n的顺序存储的线性表,当在任何位置上删除一个元素的概率相等时,删除一个元素所需移动元素的平均个数为()。

A.n B. n/2 C. (n-1)/2 D. (n+1)/22.在一个长度为n的顺序存储线性表中,删除第i个元素(1≤i≤n+1)时,需要从前向后依次前移()个元素。

A. n-iB. n-i+1C. n-i-1D. i3.设单链表中结点的结构为TYPEDEF STRUCT NODE { //链表结点定义ELEMTYPE DATA; //数据STRUCT NODE * NEXT; //结点后继指针} LISTNODE;已知指针P所指结点不是尾结点,若在*P之后插入结点*S,则应执行下列哪一个操作()。

A. S->NEXT = P; P->NEXT = S; B. S->NEXT = P->NEXT; P->NEXT = S;C. S->NEXT = P->NEXT; P = S; D. P->NEXT = S; S->NEXT = P;4.在一个单链表HL中,若要向表头插入一个由指针p指向的结点,则执行()。

A. HL = p; p->next = HL;B. p->next = HL; HL = p;C. p->next = HL; p = HL;D. p->next = HL->next; HL->next = p;5.非空的循环单链表FIRST的尾结点(由P所指向)满足:()A.P->NEXT = NULL; B.P = NULL; C.P->NEXT = FIRST; D.P = FIRST; 1.以下那一个术语与数据的存储结构无关?( A )A.队列 B. 哈希表C. 线索树D. 双向链表2、一个算法应该是( B )。

A.程序 B.问题求解步骤的描述C.要满足五个基本特性 D.A和C.3、数据结构中,与所使用的计算机无关的是数据的( C )A.存储结构 B.物理结构 C.逻辑结构 D.物理结构和存储结构4. 算法的计算量的大小称为计算的( 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语言给出一种高效算法,将LB中元素合到LA中,使新的LA的元素仍保持非递减有序。

高效指最大限度的避免移动元素。

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

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

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

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

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

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

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

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

数据结构第二章线性表习题含答案说明:顺序存储的线性表称为向量。

一,单项选择题一个向量第一个元素的地址是100,每个元素的长度为2,则第5个元素的地址是__①_B__。

A) 110 B) 108 C) 100 D) 120线性结构通常采用的两种存储结构是__①A___。

A) 顺序存储结构和链式存储结构B) 散列方式和索引方式C) 链表存储结构和数组D) 线性存储结构和非线性存储结构不带头结点的单链表head为空的判定条件是__①__A_.A) head==NULL B) head->next==NULLC) head->next==head D) head!=NULL带头结点的单链表head为空的判定条件是__①B___。

A) head==NULL B) head->next==NULLC) head->next==head D) head!=NULL非空的循环链表head的尾结点(由p所指向)满足__①_C__。

A) p->next==NULL B) p==NULLC) P->next==head D) p==head在循环双链表的p所指结点之后插入s所指结点的操作是___①_C_。

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;D) s->left=p; s->right=p->right; p->right->left=s; p->right=s;在一个单链表中,已知q所指结点是p所指结点的前驱结点,若在q和p之间插入s结点, 则执行__①c___。

第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 )。

线性表习题

线性表习题

线性表习题第二章一选择题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个结点及其前驱,则采用( )存储方式最节省时间。

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

数据结构练习题 第二章  线性表 习题及答案
{ p=head;j=0;
while(________________)
{ p=p->next; j++; }
if(i==j) return(p);
else return(NULL);
}
26.以下为单链表的定位运算,分析算法,请在____处填上正确的语句。
int locate_lklist(lklist head,datatype x)
if(________)return(i);
else return(0);
}
15.对于顺序表的定位算法,若以取结点值与参数X的比较为标准操作,平均时间复杂性量级为________。求表长和读表元算法的时间复杂性为________。
16.在顺序表上,求表长运算LENGTH(L)可通过输出________实现,读表元运算
36.当且仅当两个串的______相等并且各个对应位置上的字符都______时,这两个串相等。一个串中任意个连续字符组成的序列称为该串的______串,该串称为它所有子串的______串。
37.串的顺序存储有两种方法:一种是每个单元只存一个字符,称为______格式,另一种是每个单元存放多个字符,称为______格式。
2.为了满足运算的封闭性,通常允许一种逻辑结构出现不含任何结点的情况。不含任何结点的线性结构记为______或______。
3.线性结构的基本特征是:若至少含有一个结点,则除起始结点没有直接______外,其他结点有且仅有一个直接______;除终端结点没有直接______外,其它结点有且仅有一个直接______.
① 数据元素 ② 数据项 ③ 数据 ④ 数据结构
4.顺序表是线性表的 ( )
①链式存储结构 ②顺序存储结构 ③ 索引存储结构 ④ 散列存储结构

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

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

1、线性表是具有n个 ______ 的有限序列。

A.数据项B.字符C.数据元素D.表元素正确答案:C2、线性表是 _______。

A.一个无限序列,可以为空B.一个有限序列不可以为空C.一个无限序列,不可以为空D.一个有限序列,可以为空正确答案:D3、关于线性表的正确说法是 _______。

A.每个元素都有一个前驱和一个后继元素B.除第一个元素和最后一个元素外,其余元素有且仅有一个前驱和一个后继元素C.表中元素的排序顺序必须是由小到大或由大到小D.线性表中至少有一个元素正确答案:B4、线性表采用链表存储时,其存放各个元素的单元地址是 _______。

A.连续与否均可以B.部分地址必须是连续的C.一定是不连续的D.必须是连续的5、链表不具备的特点是 _______。

A.插入删除不需要移动元素B.所需空间与其长度成正比C.不必事先估计存储空间D.可随机访问任一节点正确答案:D6、线性表的静态链表存储结构与顺序存储结构相比,优点是 _______。

A.所有的操作算法实现简单B.便于利用零散的存储器空间C.便于随机存取D.便于插入和删除正确答案:D7、线性表的顺序存储结构和链式存储结构相比,优点是 _______。

A.便于随机存取B.便于插入和删除C.所有的操作算法实现简单D.节省存储空间正确答案:A8、设线性表有n个元素,以下操作中,_______在顺序表上实现比在链表上实现效率高。

A.交换第1个元素第2个元素的值B.输出与给定值x相等的元素在线性表中的符号C.输入第i(1<=i<=n)个元素值D.顺序输出这n个元素的值正确答案:C9、对于一个线性表,既要求能够较快地进行插入和删除操作,又要求存储结构能够反映数据元素之间的逻辑关系,则应采用 _______ 存储结构。

A.顺序B.链式C.散列D.索引正确答案:B10、设线性表中有n个元素,以下操作,_______ 在单链表上实现要比在顺序表上实现效率高。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【实例1】请设计算法,将一个保存在数组中的向量 (a1,a2,…,am)的内容原地逆置,成为(am,am-1,…,a1) 。 void Reverse(int A[], int m, int n) { int i=m, j=n; while ( i<j ) { swap(&A[i], &A[j]); i++; j--; } }
typedef struct DLinkNode { int data, freq; struct DLinkNode *llink, *rlink; }DLinkNode;
void locate(DLinkNode *L, int x) // L是带头结点的按访问频度递减的双向链表 { DLinkNode *p=L->rlink, *q; while (p&&p->data!=x) p=p->rlink; if (!p) { printf("Node x don't exist\n"); return; } else { p->freq++; q=p; p = p->llink; while (q->freq > p->freq) p = p->llink; { 将q从链中摘下,将其插入到p之后;} }
【实例3】 单链表每个结点由一个字符域data和一个 指针域next组成。请设计一个将单链表逆序输出的 算法。
void ReverseOutput(node *L) //逆序输出单链表 //L为指向单链表的指针 { if (L==NULL) return; else { ReverseOutput(L->next); printf("%c ", L->data); } }
【实例10】已知一个有表头结点的单链表,结点结构 为(data, link)。假设该链表只给出了头指针list。在不 改变链表的前提下,请设计一个尽可能高效的算法, 查找链表中倒数第k个结点(k为正整数)。若查找成 功,算法输出该结点的data域的值,并返回1,否则, 只返回0。
node *reverse_k(node *list, int k) //找到倒数第k个结点 { node *p, *q; int count = 0; p = q = list->next; while(p!=NULL) { if (count<k) count++; else q=q->next; p=p->next; } if (count<k) return 0; else { 输出q的内容; return 1;} }
【实例11】试设计一个对双向链表的进行查找的算法 ,要求在查找的同时,按访问频度重排链表(访问频 度越高的结点越靠近链头)。
【算法设计】 先从左向右搜索需要查找的结点,如找到,则改 变其访问频度,然后反向搜索其新的位置,最后从链 中摘下此结点并将其插入到新的位置。为方便起见, 在头结点的Freq域中存入一极大的值。链表结点的结 构为:
void swap(int *a, int *b) { int c; c=*a; *a=*b; *b=c; }
【实例2】已知有(a1, a2, …, am)和(b1, b2, …, bn)两个 向量存放在数组A[m+n]中,试设计一个线性时间 复杂度的算法,将两个向量的位置互换,要求不附 加额外的辅助空间。
【实例9】将两个非递减有序链表归并为一个非递减 的有序链表(利用原表结点)。
\\设pa、pb两个指针顺次遍历两个链表,lc指向结果链 while (pa、pb均不为空){ if (pa指向结点的值 > pb指向结点的值) { 将pb指向结点按后插法插入lc链; pb指向下一结点;} else { 将pa指向结点按后插法插入lc链; pa指向下一结点;(pb不空) pb指向结点接上lc链的链尾; return lc;
【实例5】 试设计求链表中结点个数的递归算法。
int NumberOfList(node *p) //求链表中结点个数 { if (p==NULL) return 0; else return 1+NumberOfList(p->next); }
【实例6】 单链表每个结点由一个整数域data和一 个指针域next组成。试设计一个求所有结点整数 之和的递归算法。
算法思想:先将数组A[m+n]逆置(方法参见前一 题),然后再分别将数组A[m+n]的前n个元素和后m 个元素逆置。
ChangeVector(int A[], int n, int p) { Reverse(A, 0, n-1); Reverse(A, 0, p-1); Reverse(A, p, n-1); }
【实例8】将两个非递减有序链表归并为一个非递增 的有序链表(利用原表结点)。
\\设pa、pb两个指针顺次遍历两个链表,lc指向结果链 while (pa、pb均不为空){ if (pa指向结点的值 > pb指向结点的值) { 将pb指向结点按前插法插入lc链; pb指向下一结点;} else { 将pa指向结点按前插法插入lc链; pa指向下一结点;} } while (pa不空) { pa指向结点按前插法插入lc链; pa指向下一结点;} while (pb不空) { pb指向结点按前插法插入lc链; pb指向下一结点;} return lc;
int SumOfList(node *p) //求链表中结点个数 { if (p==NULL) return 0; else return p->data+SumOfList(p->next); }
【实例7】 设有一个带头结点的单链表,数据项 递减有序。写一算法,重新排列链表,使数据项 递增有序,要求算法时间复杂度为O(n)。
讨论: 一、可行的解决方法及其分析 1、双指针 2、两遍扫描 3、利用栈(抽象数据类型/链表/数组) 4、利用队列(或定长队列) 5、利用大小为k的数组+模运算 6、利用定长为k的链表 7、利用新的倒置链表 8、采用递归 9、利用大小为n(链表长度)的数组 10、采用与字符串匹配类似的方法
二、不可行的解决方法 1、正数第k个 2、反向查找 3、二分查找 4、排序 三、不完善的解决方法 1、n-k+1,n未知 2、定义大小为n的数组,n未知
【实例4】单链表每个结点由一个整数域data和一 个指针域next组成。试设计一个求最大整数的递 归算法。
int MaxLinkedList(node *p) //求链表中的最大整数 { if (p==NULL) return 0; else return max(p->data, MaxLinkedList(p->next)); }
相关文档
最新文档