线性表习题参考答案
数据结构:线性表期末单元测试与答案

线性表期末单元测试与答案顺序存储结构一、单选题1、顺序表中第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是()。
A.120B.100C.108D.110正确答案:C2、在n个结点的顺序表中,算法的时间复杂度是O(1)的操作是()。
A.将n个结点从小到大排序B.在第i个结点后插入一个新结点(1≤i≤n)C.访问第i个结点(1≤i≤n)和求第i个结点的直接前驱(2≤i≤n)D.删除第i个结点(1≤i≤n)正确答案:C3、向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动的元素个数为()。
A.8B.63.5C.7D.63正确答案:B4、将两个各有n个元素的有序顺序表归并成一个有序表,其最少的比较次数是()。
A.2n-1B.n-1C.2nD.n正确答案:D5、在一个长度为n的顺序表中,在第i个元素(1≤i≤n+1)之前插入一个新元素时须向后移动()个元素。
A.iB.n-i-1C.n-i+1D.n-i正确答案:C6、线性表L=(a1,a2,……an),下列说法正确的是()。
A.除第一个和最后一个元素外,其余每个元素都有一个且仅有一个直接前驱和直接后继B.线性表中至少有一个元素C.表中诸元素的排列必须是由小到大或由大到小D.每个元素都有一个直接前驱和一个直接后继正确答案:A7、在长度为n的顺序表中插入一个元素的时间复杂度为()。
A.O(log2n)B. O(n)C.O(1)D.O(n2)正确答案:B8、在长度为n的顺序表中删除一个元素的时间复杂度为()。
A.O(log2n)B. O(n2)C.O(n)D.O(1)正确答案:C9、将两个长度分别为n、m的递增有序顺序表归并成一个有序顺序表,其最少的比较次数是()(MIN表示取最小值)。
A.mB.m+nC.nD.MIN(m,n)正确答案:D10、下述()是顺序存储结构的优点。
A.方便地运用于各种逻辑结构的存储表示B.存储密度大C.删除运算方使D.插入运算方便正确答案:B11、线性表的顺序存储结构是一种()。
数据结构(线性表)练习题与答案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、在长度为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所指结点是尾结点,则()表达式为真。
第2章线性表习题参考答案

1.D
2.B
3.B
4.B
5.B
6.B
7.D
8.B
9.C
10.B
11.C
12.C
13.B
14.D
15.A
16.B
17.B
18.C
19.A
20.C
21.D
22.A
23.A
24.A
二、填空题
1.首元素其直接前驱结点的链域的值
2.HL→next =NULL;HL=HL→next
3.有限、一对一
4.O(1)随机存取
若用头指针来表示该链表,则查找终端结点的时间为O(n)。
五、编程题
1.解答:由于在单链表中只给出一个头指针,所以只能用遍历的方法来数单链表中的结点个数了。算法如下:
int ListLength ( LinkList L )
{
int len=0 ;
ListNode *p;
p=L; //设该表有头结点
while ( p->next )
int i;
for (i=0;i<=L->length/2;i++)//L->length/2为整除运算
{temp = L->data[i]; //交换数据
L -> data[ i ] = L -> data[ L -> length-1-i];
L -> data[ L -> length - 1 - i ] = temp;
p=p->next;
}
return min;
}
3.int searchmax(linklist l)
{int max;
数据结构(线性表)习题与答案

数据结构(线性表)习题与答案数据结构(线性表)习题与答案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,直到遍历结束。
《数据结构》习题及答案:第2章 线性表(第1次更新2012-3)

第2章线性表一、选择题1.表长为N 的顺序表,当在任何位置上插入或删除一个元素的概率相等时,插入一个元素所需移动元素的平均次数为(),删除一个元素需要移动的元素个数为()。
【**,★】A. (N-1)/2B. NC. N+1D. N-1E. N/2F. (N+1)/2G. (N-2)/22.线性表是具有N 个()的有限序列。
【*】A、表元素B、字符C、数据元素D、数据项E、信息3.“线性表的逻辑顺序和物理顺序总是一致的。
”这个结论是()。
【*】A、正确的B、错误的C、不一定,与具体结构有关。
4.线性表采用链式存储结构时,要求内存中可用存储单元的地址()。
【*,★】A、必须是连续的B、部分地址必须是连续的C、一定是不连续的D、连续或不连续都可以。
5.带头结点的单链表为空的判定条件是()。
【*】A、head==NULLB、head->next==NULLC、head->next==headD、head!=NULL6.不带头结点的单链表head 为空的判定条件是()。
【*】A、head==NULLB、head->next==NULLC、head->next==headD、head!=NULL7.非空的循环单链表head 的尾结点P 满足()。
(注:带头结点)【*】A、P->NEXT=NULLB、p=NULLC、p->next==headD、p==head8.在一个具有n 个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是()。
【*,★】A、O(1)B、O(n)C、O(n2)D、O(nlog2n)9.在一个单链表中,若删除P 所指结点的后继结点,则执行()。
【*,★】A、p->next=p->next->nextB、p=p->next;p->next=p->next->nextC、p->next=p->next;D、p=p->next->next;10.在一个单链表中,若在P所指结点之后插入S所指结点,则执行()。
第二章_线性表(参考答案)#(精选.)

第二章线性表一、填空题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的线性表采⽤顺序存储结构,在其第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个元素,需要向前移动()个元素。
数据结构(线性表)练习题与答案1

1、线性表是()。
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、关于线性表的顺序存储结构和链式存储结构的描述中,正确的是()。
Ⅰ.线性表的顺序存储结构优于链式存储结构Ⅱ.顺序存储结构比链式存储结构的存储密度高Ⅲ.如需要频繁插入和删除元素,最好采用顺序存储结构Ⅳ.如需要频繁插入和删除元素,最好采用链式存储结构A.Ⅰ、Ⅱ、ⅢB.Ⅱ、ⅣC.Ⅱ、ⅢD.Ⅲ、Ⅳ正确答案:B解析:线性表的顺序存储结构和链式存储结构各有优缺点,不能简单比较好坏,所以Ⅰ错误。
线性表习题参考答案(精品)

习题二参考答案一、选择题1. 链式存储结构的最大优点是( D )。
A.便于随机存取B.存储密度高C.无需预分配空间D.便于进行插入和删除操作2. 假设在顺序表{a 0,a 1,……,a n -1}中,每一个数据元素所占的存储单元的数目为4,且第0个数据元素的存储地址为100,则第7个数据元素的存储地址是( D )。
A. 106 B. 107 C.124 D.128 3. 在线性表中若经常要存取第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+1 8. 在带头结点的双向循环链表中的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 )。
线性表答案

第二章线性表答案(总8页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--数据结构与算法上机作业第二章线性表一、选择题1、若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新的元素算法的时间复杂度为 C 。
A. O(log2n)B. O(1)C. O(n)D. O(n2)2、以下关于线性表的说法中,不正确的是 C 。
A. 线性表中的数据元素可以是数字、字符、结构等不同类型B. 线性表中包含的数据元素个数不是任意的C. 线性表中的每一个结点都有且只有一个直接前驱和直接后继D. 存在这样的线性表:表中各结点都没有直接前驱和直接后继3、在有n个结点的顺序表上做插入、删除结点运算的时间复杂度为 B 。
A. O(1)B. O(n)C. O(n2)D. O(log2n)4、等概率情况下,在有n个结点的顺序表上做插入结点操作,需平均移动的结点数目为C 。
提示:插入的位置有n+1个,移动总数为:1+2+3+……+nA. nB. (n-1)/2C. n/2D. (n+1)/25、在一个长度为n的顺序存储的线性表中查找值为x的元素时,平均查找长度(及x同元素的平均比较次数,假定查找每个元素的概率都相等)为 C 。
A. nB. n/2C. (n+1)/2D. (n-1)/26、在顺序表中,只要知道 D ,就可以求出任一结点的存储地址。
A. 基地址B. 结点大小C. 向量大小D. 基地址和结点大小7、将两个各有n个元素的有序表归并为一个有序表,其最少的比较次数是A 。
A. nB. 2n-1C. 2nD. n-18、线性表采用链表存储时其存储地址要求 D 。
A. 必须是连续的B. 部分地址必须是连续的C. 必须是不连续的D. 连续的和不连续的都可以9、下面关于线性表的描述中,错误的是 B 。
A. 线性表采用顺序存储,必须占用一片连续的存储单元B. 线性表采用顺序存储,便于进行插入和删除操作C. 线性表采用链式存储,不必占用一片连续的存储单元D. 线性表采用链式存储,便于插入和删除操作10、向具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是 BA. O(1)B. O(n)C. O(n2)D. O(log2n)11、在一个带头结点的单链表HL中,若要向表头插入一个由指针p指向的结点,则执行的语句是 D 。
数据结构试题及答案

数据结构试题及答案试题一:线性表题目:以下关于线性表的叙述中,错误的是()A. 线性表是一种基本的数据结构,它是由n个数据元素组成的有限序列B. 线性表中的数据元素可以是基本数据类型,也可以是复合数据类型C. 线性表中的数据元素是有序的,即元素之间的顺序是固定的D. 线性表的长度可以是零,也可以是任意正整数答案:D解析:线性表的长度可以是零,也可以是任意非负整数。
当线性表的长度为零时,称为空表。
---试题二:栈和队列题目:以下关于栈和队列的叙述中,正确的是()A. 栈是一种先进先出(FIFO)的数据结构B. 队列是一种先进后出(LIFO)的数据结构C. 栈的插入和删除操作都是在栈顶进行的D. 队列的插入操作在队尾进行,删除操作在队头进行答案:CD解析:栈是一种先进后出(LIFO)的数据结构,而队列是一种先进先出(FIFO)的数据结构。
栈的插入和删除操作都是在栈顶进行的,而队列的插入操作在队尾进行,删除操作在队头进行。
---试题三:链表题目:以下关于链表的叙述中,错误的是()A. 链表是一种动态的数据结构,其大小可以在运行时改变B. 链表中的元素可以是不连续存储的C. 链表的每个节点至少包含两个部分:一个是存储元素的数据域,另一个是存储下一个节点地址的指针域D. 链表的最后一个节点的指针域通常设置为NULL答案:A解析:链表确实是一种动态的数据结构,其大小可以在运行时改变。
但是,链表的大小并不是可以无限增加的,它受到系统内存大小的限制。
---试题四:树和二叉树题目:以下关于树和二叉树的叙述中,正确的是()A. 树是一种非线性的层次结构的数据结构B. 二叉树是一种特殊的树,每个节点最多有两个子节点C. 在二叉树中,节点的度是指节点的子节点数D. 二叉树的节点个数n与边数e之间的关系是 n = e + 1答案:ABCD解析:树是一种非线性的层次结构的数据结构,每个节点可以有零个或多个子节点。
二叉树是一种特殊的树,每个节点最多有两个子节点,通常称为左子节点和右子节点。
数据结构 第2章线性表 习题 答案

第2章线性表参考答案一、填空1. 【严题集2.2①】在顺序表中插入或删除一个元素,需要平均移动表中一半元素,具体移动的元素个数与表长和该元素在表中的位置有关。
2. 线性表中结点的集合是有限的,结点间的关系是一对一的。
3. 向一个长度为n的向量的第i个元素(1≤i≤n+1)之前插入一个元素时,需向后移动n-i+1 个元素。
4. 向一个长度为n的向量中删除第i个元素(1≤i≤n)时,需向前移动n-i 个元素。
5. 在顺序表中访问任意一结点的时间复杂度均为 O(1),因此,顺序表也称为随机存取的数据结构。
6. 【严题集2.2①】顺序表中逻辑上相邻的元素的物理位置必定相邻。
单链表中逻辑上相邻的元素的物理位置不一定相邻。
7. 【严题集2.2①】在单链表中,除了首元结点外,任一结点的存储位置由其直接前驱结点的链域的值指示。
8.在n个结点的单链表中要删除已知结点*p,需找到它的前驱结点的地址,其时间复杂度为O(n)。
二、判断正误(在正确的说法后面打勾,反之打叉)( × )1. 链表的每个结点中都恰好包含一个指针。
答:错误。
链表中的结点可含多个指针域,分别存放多个指针。
例如,双向链表中的结点可以含有两个指针域,分别存放指向其直接前趋和直接后继结点的指针。
( × )2. 链表的物理存储结构具有同链表一样的顺序。
错,链表的存储结构特点是无序,而链表的示意图有序。
( × )3. 链表的删除算法很简单,因为当删除链中某个结点后,计算机会自动地将后续的各个单元向前移动。
错,链表的结点不会移动,只是指针内容改变。
( × )4. 线性表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。
错,混淆了逻辑结构与物理结构,链表也是线性表!且即使是顺序表,也能存放记录型数据。
( × )5. 顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。
错,正好说反了。
顺序表才适合随机存取,链表恰恰适于“顺藤摸瓜”( × )6. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。
数据结构(线性表)习题与答案

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 个元素,以下操作,_______ 在单链表上实现要比在顺序表上实现效率高。
第2章 线性表习题及参考答案

for(j=elenum-1; j>=i; j--)
A[j+1] = A[j]; //将数据元素后移
A[i] = x;
elenum++;
return OK;}时间复杂度:
O(elenum)
2、void ReElemDelete(SqList &A){if (
1.Josephu问题
Josephu问题为:
设编号为1,2,…n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。
提示:
用一个不带头结点的循环链表来处理Josephu问题:
(D)从表中的任意结点出发都能扫描到整个链表
7.下面关于线性表的叙述错误的是()。
(A)线性表采用顺序存储,必须占用一片地址连续的单元;
1(B)线性表采用顺序存储,便于进行插入和删除操作;
(C)线性表采用链式存储,不必占用一片地址连续的单元;
(D)线性表采用链式存储,不便于进行插入和删除操作;
8.单链表中,增加一个头结点的目的是为了()。
先构成一个有n个结点的单循环链表,然后由k结点起从1开始计数,计到m时,对应结点从链表中删除,然后再从被删除结点的下一个结点又从1开始计数,直到最后一个结点从链表中删除算法结束。
2.一元多项式的相加
提示:
(1)一元多项式的表示问题:
对于任意一元多项式:
Pn(x)= P
0+ P
线性表复习题答案

线性表复习题答案1. 线性表的基本概念是什么?线性表是由一组数据元素构成的集合,其中每个元素称为线性表的节点。
这些节点之间存在一种线性关系,即每个节点(除了第一个和最后一个)都有一个唯一的前驱和一个唯一的后继。
2. 线性表有哪些基本操作?线性表的基本操作包括:- 插入:在指定位置插入一个新元素。
- 删除:删除指定位置的元素。
- 查找:查找线性表中是否存在某个特定元素。
- 遍历:按顺序访问线性表中的每个元素。
3. 线性表的顺序存储结构有哪些特点?顺序存储结构是使用一组连续的存储单元依次存储线性表的数据元素。
其特点包括:- 物理存储上的连续性。
- 逻辑上的顺序性。
- 可以通过计算得到任意位置的元素的存储地址。
4. 线性表的链式存储结构有哪些特点?链式存储结构是使用一组不连续的存储单元存储线性表的数据元素,并通过指针将它们连接起来。
其特点包括:- 物理存储上的非连续性。
- 逻辑上的顺序性。
- 需要额外的空间来存储指针信息。
5. 线性表的顺序存储结构和链式存储结构各有什么优缺点?顺序存储结构的优点是访问速度快,缺点是插入和删除操作效率较低,且空间利用率不高。
链式存储结构的优点是插入和删除操作效率高,空间利用率高,缺点是访问速度较慢。
6. 线性表的动态分配存储方式有哪些?线性表的动态分配存储方式包括:- 顺序分配:预先分配一定数量的存储空间。
- 链式分配:每个元素单独分配存储空间,并通过指针连接。
7. 线性表的静态分配存储方式有哪些?线性表的静态分配存储方式包括:- 固定大小的数组:预先定义一个固定大小的数组来存储线性表的元素。
- 动态扩展的数组:在数组空间不足时,通过复制数组到更大的空间来扩展存储容量。
8. 如何判断线性表是否为空?线性表为空的条件是其长度为0,即没有任何元素。
9. 线性表的长度和容量有何区别?线性表的长度是指当前线性表中元素的数量,而容量是指线性表能够存储的最大元素数量。
对于顺序存储结构,长度不能超过容量;对于链式存储结构,长度可以动态变化,不受容量限制。
《数据结构》第二章线性表习题及参考答案

《数据结构》第二章线性表习题一、单项选择题1. 线性表是________。
A.一个有限序列,可以为空B.一个有限序列,不可以为空C.一个无限序列,可以为空D.一个无限序列,不可以为空2. 在一个长度为n的顺序表中删除第i个元素(0<=i<=n)时,需向前移动个元素。
A.n-i B.n-i+l C.n-i-1 D.i3. 线性表采用链式存储时,其地址________。
A.必须是连续的B.一定是不连续的C.部分地址必须是连续的D.连续与否均可以4. 从一个具有n个结点的单链表中查找其值等于x的结点时,在查找成功的情况下,需平均比较________个元素结点。
A.n/2 B.n C.(n+1)/2 D.(n-1)/25. 在双向循环链表中,在p所指的结点之后插入s指针所指的结点,其操作是____。
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. 设单链表中指针p指向结点m,若要删除m之后的结点(若存在),则需修改指针的操作为________。
A.p->next=p->next->next; B.p=p->next; C.p=p->next->next; D.p->next=p;7. 在一个长度为n的顺序表中向第i个元素(0< i<n+l )之前插入一个新元素时,需向后移动______个元素。
数据结构(线性表)习题与答案

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个元素,以下操作,_______ 在单链表上实现要比在顺序表上实现效率高。
线性表练习参考答案

单元练习2一.判断题(下列各题,正确的请在前面的括号内打√;错误的打╳)(×)(1)线性表的链式存储结构优于顺序存储。
(×)(2)链表的每个结点都恰好包含一个指针域。
(√)(3)在线性表的链式存储结构中,逻辑上相邻的两个元素在物理位置上并不一定紧邻。
(×)(4)顺序存储方式的优点是存储密度大,插入、删除效率高。
(×)(5)线性链表的删除算法简单,因为当删除链中某个结点后,计算机会自动地将后续的各个单元向前移动。
(×)(6)顺序表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。
(√)(7)线性表链式存储的特点是可以用一组任意的存储单元存储表中的数据元素。
(√)(8)线性表采用顺序存储,必须占用一片连续的存储单元。
(×)(9)顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。
(ㄨ)(10)插入和删除操作是数据结构中最基本的两种操作,所以这两种操作在数组中也经常使用。
二.填空题(1)顺序表中逻辑上相邻的元素在物理位置上必须相连。
(2)线性表中结点的集合是有限的,结点间的关系是一对一关系。
(3)顺序表相对于链表的优点是:节省存储和随机存取。
(4)链表相对于顺序表的优点是:插入、删除方便。
(5)采用顺序存储结构的线性表叫顺序表。
(6)顺序表中访问任意一个结点的时间复杂度均为O(1) 。
(7)在单链表中要在已知结点*P之前插入一个新结点,需找到*P的直接前趋结点的地址,其查找的时间复杂度为O(n) 。
(10)在一个长度为n的顺序表中删除第i个元素,要移动n-i 个元素。
(11)在一个长度为n的顺序表中,如果要在第i个元素前插入一个元素,要后移n- i +1 个元素。
(12)当线性表的元素总数基本稳定,且很少进行插入和删除操作,但要求以最快速度存取线性表中的元素时,应采用顺序存储结构。
(13)在线性表的链式存储中,元素之间的逻辑关系是通过指针决定的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
习题二参考答案一、选择题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 )。
A .小于1 B. 等于1 C. 大于1 D. 不能确定10. 对于图2.29所示的单链表,下列表达式值为真的是( D )。
图2.29 单链表head 的存储结构图 A. head.getNext().getData()=='C' B. head.getData()=='B'C. P 1.getData()==’D ’D. P 2.getNext()==null二、填空题1.线性表是由n(n≥0)个数据元素所构成的有限序列,其中n为数据元素的个数,称为线性表的长度,n=0的线性表称为空表。
2.线性表中有且仅有一个开始结点和终端结点,除开始结点和终端结点之外,其它每一个数据元素有且仅有一个前驱,有且仅有一个后继。
3.线性表通常采用顺序存储和链式存储两种存储结构。
若线性表的长度确定或变化不大,则适合采用顺序存储存储结构进行存储。
4.在顺序表{a0,a1,……,a n-1}中的第i(0≤i≤n-1)个位置之前插入一个新的数据元素,会引起 n-i 个数据元素的移动操作。
5.在线性表的单链表存储结构中,每一个结点有两个域,一个是数据域,用于存储数据元素值本身,另一个是指针域,用于存储后继结点的地址。
6.在线性表的顺序存储结构中可实现快速的随机存取,而在链式存储结构中则只能进行顺序存取。
7.顺序表中逻辑上相邻的数据元素,其物理位置一定相邻,而在单链表中逻辑上相邻的数据元素,其物理位置不一定相邻。
8.在仅设置了尾指针的循环链表中,访问第一个结点的时间复杂度是 O(1)。
9.在含有n个结点的单链表中,若要删除一个指定的结点p,则首先必须找到指定结点p的前驱,其时间复杂度为 O(n)。
10.若将单链表中的最后一个结点的指针域值改为单链表中头结点的地址值,则这个链表就构成了循环单链表。
三、算法设计题1.编写一个顺序表类的成员函数,实现对顺序表就地逆置的操作。
所谓逆置,就是把(a1,a2,…,a n)变成(a n,a n-1,…,a1);所谓就地,就是指逆置后的数据元素仍存储在原来顺序表的存储空间中,即不为逆置后的顺序表另外分配存储空间。
参考答案:public void reverse() {for (int i = 0,j=curLen-1; i < j; i++,j--) {Object temp = listElem[i];listElem[i] = listElem[j];listElem[j] = temp;}}2.编写一个顺序表类的成员函数,实现对顺序表循环右移k位的操作。
即原来顺序表为(a1,a2,…,a n-k,a n-k+1,…,a n),循环向右移动k位后变成(a n-k+1,…, a n ,a1,a2,…,a n-k)。
要求时间复杂度为O(n)。
参考答案:public void shit(int k) {int n=curLen,p=0,i,j,l;Object temp;for(i=1;i<=k;i++)if(n%i==0&&k%i==0) //求n和k的最大公约数pp=i;for(i=0;i<p;i++){j=i;l=(i+n-k)%n;temp=listElem[i];while(l!=i){listElem[j]=listElem[l];j=l;l=(j+n-k)%n;}// 循环右移一步listElem[j]=temp;}}分析:要把数组listElem的元素循环右移k位,则listElem[0]移至listElem[k], listElem[k]移至listElem[2k]......直到最终回到listElem[0].然而这并没有全部解决问题,因为有可能有的元素在此过程中始终没有被访问过,而是被跳了过去.分析可知,当n和k的最大公约数为p时,只要分别以listElem[0],listElem[1],... listElem[p-1]为起点执行上述算法,就可以保证每一个元素都被且仅被右移一次,从而满足题目要求.也就是说,A的所有元素分别处在p个"循环链"上面.举例如下:n=15,k=6,则p=3.第一条链: listElem[0]->listElem[6], listElem[6]->listElem[12], listElem[12]-> listElem[3], listElem[3]-> listElem[9], listElem[9]-> listElem[0].第二条链: listElem[1]->listElem[7], listElem[7]->listElem[13], listElem[13]-> listElem[4], listElem[4]->listElem[10], listElem[10]-> listElem[1].第三条链: listElem[2]-> listElem[8], listElem[8]-> listElem[14], listElem[14]->listElem[5], listElem[5]->listElem[11], listElem[11]->listElem[2].恰好使所有元素都右移一次.虽然未经数学证明,但相信上述规律应该是正确的.3.编写一个单链表类的成员函数,实现在非递减的有序单链表中插入一个值为x的数据元素,并使单链表仍保持有序的操作。
参考答案(方法一):public void insert(int x) {Node p = head.getNext();//p指向首结点Node q = head;// q用来记录p的前驱结点int temp;while (p != null) {temp = ((Integer) p.getData()).intValue();if (temp < x) {q = p;p = p.getNext();} elsebreak;}Node s = new Node(x); // 生成新结点s.setNext(p);// 将s结点插入到单链表的q结点与p结点之间q.setNext(s);}参考答案(方法二):public void insert(int x) {Node p = head.getNext(); //p指向首结点while (p.getNext()!= null&&((Integer) p.getNext().getData()).intValue()<x) {p = p.getNext();}文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.Node s = new Node(x); // 生成新结点s.setNext(p.getNext());// 将s结点插入到单链表的q结点与p结点之间p.setNext(s);}4.编写一个单链表类的成员函数,实现对带头结点的单链表就地逆置的操作。
所谓逆置,就是把(a1,a2,…,a n)变成(a n,a n-1,…,a1);所谓就地,就是指逆置后的结点仍存储在原来单链表的存储空间中,只不过通过修改链来改变单链表中每一个结点之间的逻辑位置关系。
参考答案:public void reverse() { //实现对单链表就地逆置(采用的是头插法)Node p = head.getNext();head.setNext(null);Node q;while (p != null) {q = p.getNext();p.setNext(head.getNext());head.setNext(p);p = q;}}5.编写一个单链表类的成员函数,实现删除不带头结点的单链表中数据域值等于x的第一个结点的操作。
若删除成功,则返回被删除结点的位置;否则,返回-1。