第二章线性表作业-答案

合集下载

数据结构第2章作业 线性表(答案)

数据结构第2章作业 线性表(答案)

第2章线性表班级学号__________-姓名一、判断正误(×)1. 链表的每个结点中都恰好包含一个指针。

链表中的结点可含多个指针域,分别存放多个指针。

例如,双向链表中的结点可以含有两个指针域,分别存放指向其直接前趋和直接后继结点的指针。

(×)2. 链表的物理存储结构具有同链表一样的顺序。

链表的存储结构特点是无序,而链表的示意图有序。

(×)3. 链表的删除算法很简单,因为当删除链中某个结点后,计算机会自动地将后续的各个单元向前移动。

链表的结点不会移动,只是指针内容改变。

(×)4. 线性表的每个结点只能是一个简单类型,而链表的每个结点可以是一个复杂类型。

混淆了逻辑结构与物理结构,链表也是线性表!且即使是顺序表,也能存放记录型数据。

(×)5. 顺序表结构适宜于进行顺序存取,而链表适宜于进行随机存取。

正好说反了。

顺序表才适合随机存取,链表恰恰适于“顺藤摸瓜”(×)6. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。

前一半正确,但后一半说法错误,那是链式存储的优点。

顺序存储方式插入、删除运算效率较低,在表长为n的顺序表中,插入和删除一个数据元素,平均需移动表长一半个数的数据元素。

(×)7. 线性表在物理存储空间中也一定是连续的。

线性表有两种存储方式,顺序存储和链式存储。

后者不要求连续存放。

(×)8. 线性表在顺序存储时,逻辑上相邻的元素未必在存储的物理位置次序上相邻。

线性表有两种存储方式,在顺序存储时,逻辑上相邻的元素在存储的物理位置次序上也相邻。

(×)9. 顺序存储方式只能用于存储线性结构。

顺序存储方式不仅能用于存储线性结构,还可以用来存放非线性结构,例如完全二叉树是属于非线性结构,但其最佳存储方式是顺序存储方式。

(后一节介绍)(×)10. 线性表的逻辑顺序与存储顺序总是一致的。

理由同7。

链式存储就无需一致。

数据结构习题及答案 (2)

数据结构习题及答案 (2)

第二章线性表一、选择题1.一个线性表第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是( )(A)110 (B)108(C)100 (D)120参考答案:B2. 向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动()个元素。

(A)64(B)63 (C)63.5 (D)7参考答案:C3.线性表采用链式存储结构时,其地址()。

(A) 必须是连续的 (B) 部分地址必须是连续的(C) 一定是不连续的 (D) 连续与否均可以参考答案:D4. 在一个单链表中,若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;参考答案:B5.在一个单链表中,若删除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;参考答案:A6.下列有关线性表的叙述中,正确的是()(A)线性表中的元素之间隔是线性关系(B)线性表中至少有一个元素(C)线性表中任何一个元素有且仅有一个直接前趋(D)线性表中任何一个元素有且仅有一个直接后继参考答案:A7.线性表是具有n个()的有限序列(n≠0)(A)表元素(B)字符(C)数据元素(D)数据项参考答案:C二、判断题1.线性表的链接存储,表中元素的逻辑顺序与物理顺序一定相同。

()2.如果没有提供指针类型的语言,就无法构造链式结构。

()3.线性结构的特点是只有一个结点没有前驱,只有一个结点没有后继,其余的结点只有一个前驱和后继。

第二章线性表习题及答案

第二章线性表习题及答案

第二章线性表习题及答案‎一、基础知识题‎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)。

第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】即可。

第二章线性表作业参考答案

第二章线性表作业参考答案

第二章线性表作业参考答案第二章线性表2.2 何时选用顺序表、何时选用链表作为线性表的存储结构为宜?答:在实际应用中,应根据具体问题的要求和性质来选择顺序表或链表作为线性表的存储结构,通常有以下几方面的考虑:1.基于空间的考虑。

当要求存储的线性表长度变化不大,易于事先确定其大小时,为了节约存储空间,宜采用顺序表;反之,当线性表长度变化大,难以估计其存储规模时,采用动态链表作为存储结构为好。

2.基于时间的考虑。

若线性表的操作主要是进行查找,很少做插入和删除操作时,采用顺序表做存储结构为宜;反之,若需要对线性表进行频繁地插入或删除等的操作时,宜采用链表做存储结构。

并且,若链表的插入和删除主要发生在表的首尾两端,则采用尾指针表示的单循环链表为宜。

2.6 下述算法的功能是什么?LinkList Demo(LinkList L){ // L 是无头结点单链表ListNode *Q,*P;if(L&&L->next){Q=L;L=L->next;P=L;while (P->next) P=P->next;P->next=Q; Q->next=NULL;}return L;}// Demo答:该算法的功能是:将开始结点摘下链接到终端结点之后成为新的终端结点,而原来的第二个结点成为新的开始结点,返回新链表的头指针。

2.9 设顺序表L是一个递增有序表,试写一算法,将x插入L中,并使L仍是一个有序表。

答:因已知顺序表L是递增有序表,所以只要从顺序表终端结点(设为i位置元素)开始向前寻找到第一个小于或等于x的元素位置i后插入该位置即可。

在寻找过程中,由于大于x的元素都应放在x之后,所以可边寻找,边后移元素,当找到第一个小于或等于x的元素位置i时,该位置也空出来了。

算法如下:#define ListSize 100 // 假定表空间大小为100typedef int DataType;//假定DataType的类型为int型typedef struct{DataType data[ListSize];// 向量data用于存放表结点int length; // 当前的表长度} Seqlist;//以上为定义表结构void InsertIncreaseList( Seqlist *L , Datatype x ){int i;if ( L->length>=ListSize)Error(“overflow");for ( i=L -> length ; i>0 && L->data[ i-1 ] > x ; i--)L->data[ i ]=L->data[ i ] ; // 比较并移动元素L->data[ i ] =x;L -> length++;}2.13 设 A和B是两个单链表,其表中元素递增有序。

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

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

一、选择题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.描述以下三个概念的区别:头指针,头结点,首元素结点。

首元结点是指链表中存储线性表中第一个数据元素a1的结点。

为了操作方便,通常在链表的首元结点之前附设一个结点,称为头结点,该结点的数据域中不存储线性表的数据元素,其作用是为了对链表进行操作时,可以对空表、非空表的情况以及对首元结点进行统一处理。

头指针是指向链表中第一个结点(或为头结点或为首元结点)的指针。

若链表中附设头结点,则不管线性表是否为空表,头指针均不为空。

否则表示空表的链表的头指针为空。

2.填空:(1)在顺序表中插入或删除一个元素,需要平均移动一半元素,具体移动的元素个数与插入或删除的位置有关。

(2)在顺序表中,逻辑上相邻的元素,其物理位置也相邻。

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

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

3.已知L是无表头结点的单链表,且P结点既不是首元素结点,也不是尾元素结点。

按要求从下列语句中选择合适的语句序列。

a. 在P结点后插入S结点的语句序列是:(4)、(1)。

b. 在P结点前插入S结点的语句序列是:(7)、(11)、(8)、(4)、(1)。

c. 在表首插入S结点的语句序列是:(5)、(12)。

d. 在表尾插入S结点的语句序列是:(11)、(9)、(1)、(6)。

供选择的语句有:(1)P->next=S; (2)P->next= P->next->next; (3)P->next= S->next;(4)S->next= P->next; (5)S->next= L; (6)S->next= NULL;(7)Q= P; (8)while(P->next!=Q) P=P->next;(9)while(P->next!=NULL) P=P->next; (10)P= Q;(11)P= L; (12)L= S; (13)L= P;4.设线性表存于a[n]中且递增有序。

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

第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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2.8已知由单链表表示的线性表中,含有三类字符的数据元素( 2.8已知由单链表表示的线性表中,含有三类字符的数据元素(如:字母字符、数字字符 已知由单链表表示的线性表中,含有三类字符的数据元素 和其它字符) 和其它字符),试编写算法构造三个以循环链表表示的线性表,使每个表中只含同一类 的字符,且利用原表中的结点空间作为这三个表的结点空间,头结点可另辟空间。
2.8 已知由单链表表示的线性表中,含有三类 字符的数据元素( 字符的数据元素(如:字母字符、数字字符和 其它字符) 其它字符),试编写算法构造三个以循环链表 表示的线性表,使每个表中只含同一类的字 符,且利用原表中的结点空间作为这三个表 的结点空间,头结点可另辟空间。 2.9 假设在长度大于1的单循环链表中,既无 假设在长度大于1 头结点也无头指针。s 头结点也无头指针。s为指向链表中某个结 点的指针,试编写算法删除结点* 点的指针,试编写算法删除结点*s的直接前 趋结点。 2.10设顺序表L 2.10设顺序表L是一个递增有序表,试写一算 法,将x插入L中,并使L 法,将x插入L中,并使L仍是一个有序表。
Status locatenode(dullinklist &L,elemtype x) {dulnode *p,*q; p=q=Lp=q=L->next; while(p) (pp=p{if (p->data!=x) p=p->next; else {p->freq++; break;} } {pwhile(q) {if(q->freq>pq=q{if(q->freq>p->freq) q=q->next; {p->prior->next=pp->next->prior=pelse {p->prior->next=p->next; p->next->prior=p->prior; p->prior=qp->next=q; p->prior=q->prior; q->prior->next=p; q->prior=p} >priorq} return ok; }
要解决这样的问题,只要新建三个头结点,然后在原来的单链表中依次查询,找到 一类字符结点时,就摘下此结点链接到相应头结点指明的新链表中就是了。 算法如下: //设已建立三个带头结点的空循环链表A,B,C. //以下是 void DivideList( LinkList L, LinkList A, LinkList B, LinkList C) { ListNode *p=L->next, *q; ListNode *a=A, ListNode *b=B; ListNode *c=C; while ( p ) { if ( p->data>='a' &&p->data<='z'|| p->data>='A' &&p->data<='Z') { q=p; //保存字母结点位置 p=p->next;//指向下一结点 a->next=q;//将字母结点链到A表中 q->next=A;// 形成循环链表 a=a->next; // 指向下一结点 } else if( p->data>='0' && p->data<='9') { // 分出数字结点
第二章 线性表
作业评讲
பைடு நூலகம்
作业: 作业:
2.5、 2.7、2.9、2.11做在作业本上,交,其余堂下练习 、 做在作业本上, 、 、 做在作业本上 2.1 试描述头指针、头结点、开始结点的区别、并说明头指针 和头结点的作用。 2.2 何时选用顺序表、何时选用链表作为线性表的存储结构为 宜? 2.3 在顺序表中插入和删除一个结点需平均移动多少个结点? 在顺序表中插入和删除一个结点需平均移动多少个结点? 具体的移动次数取决于哪两个因素? 具体的移动次数取决于哪两个因素? 2.4 为什么在单循环链表中设置尾指针比设置头指针更好? 为什么在单循环链表中设置尾指针比设置头指针更好? 2.5 在单链表、双链表和单循环链表中,若仅知道指针p指向 在单链表、双链表和单循环链表中,若仅知道指针p 某结点,不知道头指针,能否将结点* 从相应的链表中删去? 某结点,不知道头指针,能否将结点*p从相应的链表中删去? 若可以,其时间复杂度各为多少? 若可以,其时间复杂度各为多少?
2.11 写出以下链表操作的算法
1)创建一个空的双向循环链表
• status CreateList_Dul(DuLinkList &L);
2)取得双向循环链表中第i个数据元素的位 取得双向循环链表中第i 置指针
• status GetElemP_Dul(DuLinkList L, int i);
3)将单链表置逆
status ReverseList_L(LinkList &L);
2.1 试描述头指针、头结点、开始结点的区别、并说明头指针和头 结点的作用。
开始结点是指链表中的第一个结点,没有直接前趋 开始结点是指链表中的第一个结点,没有直接前趋 的那个结点。 链表的头指针是一指向链表开始结点的指针( 链表的头指针是一指向链表开始结点的指针(没有头 结点时) 结点时),单链表由头指针唯一确定,因此单链 表可以用头指针的名字来命名。 头结点在链表的开始结点之前附加的一个结点。有 头结点在链表的开始结点之前附加的一个结点。有 了头结点之后,头指针指向头结点,不论链表 否为空,头指针总是非空。而且头指针的设置 使得对链表的第一个位置上的操作与在表其他 位置上的操作一致(都是在某一结点之后) 位置上的操作一致(都是在某一结点之后)。
2.3 在顺序表中插入和删除一个结点需平均移动多少 个结点?具体的移动次数取决于哪两个因素? 个结点?具体的移动次数取决于哪两个因素? 在等概率情况下, 在等概率情况下,顺序表中插入一个结点需平均 移动n/2个结点。 个结点。 移动 个结点 删除一个结点需平均移动(n-1)/2个结点。 个结点。 删除一个结点需平均移动 个结点 具体的移动次数取决于顺序表的长度n以及需插 具体的移动次数取决于顺序表的长度 以及需插 入或删除的位置i。 越接近 越接近n则所需移动的结点数越少 入或删除的位置 。i越接近 则所需移动的结点数越少 。
2.4 为什么在单循环链表中设置尾指针比设置头指针更 好? 尾指针是指向终端结点的指针,用它来表示单循环 链表可以使得查找链表的开始结点和终端结点都很方 链表可以使得查找链表的开始结点和终端结点都很方 ,设一带头结点的单循环链表,其尾指针为rear rear,则 便,设一带头结点的单循环链表,其尾指针为rear,则 开始结点和终端结点的位置分别是rear >nextrear开始结点和终端结点的位置分别是rear->next->next 和 查找时间都是O(1) O(1)。 rear, 查找时间都是O(1)。 若用头指针来表示该链表, 若用头指针来表示该链表,则查找终端结点的时 间为O(n)。 间为 。
写一算法在单链表上实现线性表的ListLength(L) ListLength(L)运算。 2.7 写一算法在单链表上实现线性表的ListLength(L)运算。 求单链表长只能用遍历的方法了,从头数到尾。算法如下: int ListLength ( LinkList L ) { int len=0 ; ListNode *p; p=L; //设该表有头结点 设该表有头结点 while ( p->next ) { p=p->next; len++; } return len; }
2.6 设有一个双链表,每个结点中除有prior、 设有一个双链表,每个结点中除有prior、 data和next三个域外,还有一个访问频度域 data和next三个域外,还有一个访问频度域 freq,在链表被起用之前,其值均初始化为 freq,在链表被起用之前,其值均初始化为 零。每当在链表进行一次LocateNode(L,s) 零。每当在链表进行一次LocateNode(L,s) 运算时,令元素值为x的结点中freq域的值 运算时,令元素值为x的结点中freq域的值 加1,并调整表中结点的次序,使其按访问 频度的递减序排列,以便使频繁访问的结点 总是靠近表头。试写一符合上述要求的 LocateNode运算的算法。 LocateNode运算的算法。 2.7 写一算法在单链表上实现线性表的 ListLength(L)运算。 ListLength(L)运算。
假设在长度大于1的单循环链表中,既无头结点也无头指针。s 2.9 假设在长度大于1的单循环链表中,既无头结点也无头指针。s为指 向链表中某个结点的指针,试编写算法删除结点* 向链表中某个结点的指针,试编写算法删除结点*s的直接前趋结点。 status DeleteNode( ListNode *s) { //删除单循环链表中指定结点的直接前趋结点 //删除单循环链表中指定结点的直接前趋结点 ListNode *p, *q; p=s; p->nextwhile( p->next->next!=s) { q=p; p=pp=p->next; } //删除结点 q->next=s; //删除结点 //释放空间 free(p); //释放空间 return OK; }
2.2 何时选用顺序表、何时选用链表作为线性表的存储 结构为宜? 结构为宜? 1.基于空间的考虑。当要求存储的线性表长度变化不大 1.基于空间的考虑。当要求存储的线性表长度变化不大 基于空间的考虑。当要求存储的线性表 ,易于事先确定其大小时,为了节约存储空间,宜采用 顺序表;反之,当线性表长度变化大,难以估计其存储 顺序表;反之,当线性表长度变化大,难以估计其存储 规模时,采用动态链表作为存储结构为好。 2.基于时间的考虑。若线性表的操作主要是进行查找, 基于时间的考虑。 查找, 基于时间的考虑 若线性表的操作主要是进行查找 很少做插入和删除操作时 采用顺序表 操作时, 顺序表做存储结构为宜 很少做插入和删除操作时,采用顺序表做存储结构为宜 ;反之, 若需要对线性表进行频繁地插入或删除等的操 反之, 作时,宜采用链表做存储结构。并且, 作时,宜采用链表做存储结构。并且,若链表的插入和 删除主要发生在表的首尾两端, 删除主要发生在表的首尾两端,则采用尾指针表示的单 循环链表为宜。 循环链表为宜。
相关文档
最新文档