线性表习题2
数据结构习题及答案与实验指导(线性表)2

第2章线性表线性表是一种最基本、最常用的数据结构,它有两种存储结构——顺序表和链表。
本章主要介绍线性表的定义、表示和基本运算的实现。
重点讨论了线性表的存储结构,以及在顺序、链式两种存储结构上基本运算的实现。
重点提示:●线性表的逻辑结构特征●线性表的顺序存储和链式存储两种存储结构的特点●在两种存储结构下基本操作的实现2-1 重点难点指导2-1-1 相关术语1.线性表线性表是具有相同数据类型的n(n≥0)个数据元素的有限序列,通常记为:(a1,a2,…,a n),其中n为表长,n=0时称为空表。
要点:一种逻辑结构,其数据元素属于相同数据类型,之间的关系是线性关系。
2.顺序表顺序存储的线性表。
要点:按线性表中的元素的逻辑顺序依次存放在地址连续的存储单元里,其存储特点:用物理上的相邻实现逻辑上的相邻。
3.链表用链表存储的线性表。
要点:链表是通过每个结点的链域将线性表的n个结点按其逻辑顺序链接在一起的,对每个结点的地址是否连续没有要求。
4.单链表每个结点除了数据域外还有一个指向其后继的指针域。
要点:通常将每个元素的值和其直接后继的地址作为一个结点,通过每个结点中指向后继结点的指针表示线性表的逻辑结构。
5.头指针要点:头指针是一个指针变量,里面存放的是链表中首结点的地址,并以此来标识一个链表。
如链表H,链表L等,表示链表中第一个结点的地址存放在指针变量H、L中。
通常用头指针来惟一标识一个链表。
6.头结点要点:附加在第一个元素结点之前的一个结点,头指针指向头结点。
当该链表表示一个非空的线性表时,头结点的指针域指向第一个元素结点;为空表时,该指针域为空。
7.头结点的作用要点:其作用有两个,一是使对空表和非空表的处理得到统一;二是在链表的第一个位置上的操作和在其他位置上的操作一致,无需特殊处理。
2-1-2 线性表的顺序存储1.顺序表顺序存储的线性表称为顺序表。
其特点是:用一组地址连续的存储单元来依次存放线性表的数据元素,因此数据元素的逻辑顺序和物理次序一致(这是顺序存储的核心所在)。
第二章线性表习题

第二章线性表习题1 .填空题(1) 链表中逻辑上相邻的元素的物理位置( ) 相连。
(2) 在单链表中除首结点外,任意结点的存储位置都由( ) 结点中的指针指示。
(3) 在单链表中,设置头结点的作用是在插入或删除首结点时不必对( ) 进行处理。
(4) 已带头结点的单链表L ,指针p 指向L 链表中的一个结点,指针q 是指向L 链表外的一个结点,则:在指针p 所指结点后插入q 所指结点的语句序列是( ) ;在指针p 所指结点前插入q 所指结点的语句序列是( ) ;将q 所指结点插入在链表首结点的语句序列是( ) ;将q 所指结点插入在链表尾结点的语句序列是( ) 。
(5) 已知带表头结点的单链表L ,指针p 指向L 链表中的一个结点(非首结点,非尾结点),则:删除指针p 所指结点的直接后继结点的语句是( ) 。
删除指针p 所指结点的直接前驱结点的语句序列是( ) 。
删除指针p 所指结点的语句序列是( ) 。
删除首结点的语句序列是( ) 。
⑤删除尾结点的语句序列是( ) 。
(6) 已知指针p 指向双向链表中的一个结点(非首结点,非尾结点),则:将结点s 插入在指针p 所指结点的直接后继位置的语句是( ) 。
将结点s 插入在指针p 所指结点的直接前驱位置的语句是( ) 。
删除指针p 所指结点的直接后继结点的语句序列是( ) 。
删除指针p 所指结点的直接前驱结点的语句序列是( ) 。
⑤删除指针p 所指结点的语句序列是( ) 。
(7) 线性表的存储结构有顺序存储和( ) 存储两种。
(8) 线性表的元素长度为4 ,在顺序存储结构下Loc(ai)=2000 ,则Loc(ai +1)=( ) 。
(9) 线性表a 的元素长度为L ,在顺序存储结构下Loc(ai)=Loc(a1)+( ) 。
(10) 在线性表的链式存储结构中,某结点的指针字段指向该结点的( ) 两种存储。
(11) 线性表的元素长度为4 ,Loc(ai +1)=1000 ,则Loc(a3)=( ) 。
第二章 线性表 练习题

一、选择题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 )存储方式最节省时间。
数据结构习题及答案 (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.顺序存储的线性表可以按序号随机存取。
3.顺序表的插入和删除操作不需要付出很大的时间代价,因为每次操作平均只有近一半的元素需要移动。
4.线性表中的元素可以是各种各样的,但同一线性表中的数据元素具有相同的特性,因此是属于同一数据对象。
5.在线性表的顺序存储结构中,逻辑上相邻的两个元素在物理位置上并不一定紧邻。
6.在线性表的链式存储结构中,逻辑上相邻的元素在物理位置上不一定相邻。
7.线性表的链式存储结构优于顺序存储结构。
8.在线性表的顺序存储结构中,插入和删除时,移动元素的个数与该元素的位置有关。
9.线性表的链式存储结构是用一组任意的存储单元来存储线性表中数据元素的。
10.在单链表中,要取得某个元素,只要知道该元素的指针即可,因此,单链表是随机存取的存储结构。
二单选题 (请从下列A,B,C,D选项中选择一项)1.线性表是( ) 。
(A) 一个有限序列,可以为空;(B) 一个有限序列,不能为空;(C) 一个无限序列,可以为空;(D) 一个无序序列,不能为空。
2.对顺序存储的线性表,设其长度为n,在任何位置上插入或删除操作都是等概率的。
插入一个元素时平均要移动表中的()个元素。
(A) n/2 (B) n+1/2 (C) n -1/2 (D) n3.线性表采用链式存储时,其地址( ) 。
(A) 必须是连续的;(B) 部分地址必须是连续的;(C) 一定是不连续的;(D) 连续与否均可以。
4.用链表表示线性表的优点是()。
(A)便于随机存取 (B)花费的存储空间较顺序存储少(C)便于插入和删除 (D)数据元素的物理顺序与逻辑顺序相同5.某链表中最常用的操作是在最后一个元素之后插入一个元素和删除最后一个元素,则采用( )存储方式最节省运算时间。
(A)单链表 (B)双链表 (C)单循环链表 (D)带头结点的双循环链表6.循环链表的主要优点是( )。
第2章 线性表习题参考答案

习题二参考答案一、选择题1.链式存储结构的最大优点是( D )。
A.便于随机存取B.存储密度高C.无需预分配空间D.便于进行插入和删除操作2.假设在顺序表{a0,a1,……,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(log2n)C. O(n)D. O(n2)7.要将一个顺序表{a0,a1,……,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章线性表1.编写一个算法,往单链表里数据为w0的结点前面插入一个给定值x的结点。
2.写出将单链表逆置的算法。
即若原单链表中存储元素的次序为a0,a1,a2,…,an-1,则单链表逆置后便为an-1,an-2,…,a1,a0。
要求就地逆置,即不再重新开辟存储空间,只通过调整指针来完成,并且使用尽可能少的附加单元。
3 简述以下算法的功能。
(1) Status A(LinkedList L) { // L 是无表头结点的单链表if (L && L->next){Q =L; L =L->next; P =L ;while ( P->next) P =P->next ;P->next =Q; Q->next = NULL;}return OK;} // A(2) void BB(LNode *s, LNode *q ) {p =s ;while (p->next!=q) p =p->next ;p->next =s;} //BBvoid AA(LNode *pa, LNode *pb) {// pa 和pb 分别指向单循环链表中的两个结点BB(pa, pb);BB(pb, pa);} //AA4 指出以下算法的错误和低效(即费时)之处,并将它改写为一个既正确又高效的算法。
Status DeleteK(SqList &a, int i, int k){//本过程从顺序存储结构的线性表a中删除第i个元素起的k个元素if(i<1 || k<0 || i+k>a.length)return INFEASIBLE; //参数不合法else{for(count=1; count<k; count++){//删除一个元素for(j=a.length; j>=i+1; j--)a.elem[j-1]= a.elem[j];a.length--;}}returnOK;}//DeleteK5 试写一算法在带表头结点的单链表结构上实现线性表操作LOCATE(L,X)。
数据结构--线性表习题及答案

数据结构--线性表习题及答案第⼆章线性表⼀、选择题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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
线性表典型例题一、单项选择题[例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指向头结点。
空表即该表只有头结点,head—>next==head表示该单链表为空。
本题答案为:C。
[例7-6] 线性表采用链式存储时其存储地址( )。
A.必须是连续的B.部分地址必须是连续的C.一定是不连续的D.连续不连续都可以解析:链式存储采用动态存储,地址一般不连续。
本题答案为:D。
[例7-7] 在双向链表的* p结点前插入新结点*s的操作为( )。
A.p—>prior=s;s—>next=p;p—>prior—>next=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;解析:在双向链表的* p结点前插入新结点* s的操作如图7.12所示,图中虚线为所作的操作,序号为操作顺序。
本题答案为:D。
图7.12 双向链表插入结点的过程示意图(例7-8)若某表最常用的操作是在最后一个结点后插入一个结点和删除第一个结点,则采用( )存储方式最节省运算时间。
A.单链表B.双向链表C.给出表头指针的循环单链表D.给出尾指针的循环单链表解析:在链表中插入或删除一个结点,需修改相邻结点的指针域。
上述四个选项中,只有选项D才能从尾指针经过最少的结点来进行题目要求的插入或删除操作。
本题答案为:D。
[例7-9] 若线性表中有2n个元素,算法( )在单链表上实现要比在顺序表上实现效率更高。
A.删除所有值为x的元素B.在最后一个元素的后面插入一个新元素C.顺序输出前k个元素D.交换其中某两个元素的值解析:对于选项A,在单链表上和顺序表上实现的时间复杂度都为O(n),但后者要移动大量的元素,因此在单链表上实现效率更高。
本题答案为:A。
(例7-10) 在长度为n的( )上,删除第一个元素,其算法复杂度为O(n)。
A.只有表头指针的不带头结点的循环单链表B.只有尾指针的不带表头结点的循环单链表C.只有表尾指针的带头结点的循环单链表D.只有尾指针的带表头结点的循环单链表解析:本题答案为:A。
具体算法如下:linklist * delfirst(linklist * h){Linklist * p=h;while(p—> next!=h) //找到表尾结点p=p—>next;p—>next=h—> next;free(h);returnp一>next;//返回头指针}二、填空题[例7-11] 在单链表中结点* p后插入结点* s的指令序列为;。
解析:在单链表中结点* p后插入结点* s,即将* p 的后继结点变为* s 的后继结点,* s 则成为* p的后继结点。
操作指令序列为:s—>next=p—>next;p—>next=s。
[例7-12]在线性表的链式存储结构中,根据每个结点所含指针的个数,链表可分为和;而根据指针的链接方式,链表又可分为和。
解析:本题答案为:单链表;多重链表;循环链表;普通链表(非循环链表)。
[例7-13] 在单链表中,要删除某一个指定的结点,必须找到该结点的 结点。
解析:由单链表的特点可知,删除某一个结点的操作是将其前驱结点的next 指针域指 向该结点的后继结点。
本题答案为:前驱。
[例7-14] 在一个长度为n 的顺序表中删除第i(0≤i ≤n 一1)个元素,需向前移动 个元素。
解析:需将第i 个元素后的元素依次前移一个位置,总共移动(n-1)-(i+1)+1个元素。
本题答案为:n-i-1。
[例7-15] 在一个具有n 个结点的单链表,在 * p 结点后插入一个新结点的时间复杂度是 ;在给定值为x 的结点后插入一个新结点的时间复杂度是 。
解析:在 * p 结点后插入一个新结点 * s 的操作是:s —> next =p —> next ;p —>next = s ;其时间复杂度为0(1)。
在给定值为x 的结点后插入一个结点,首先要找到该结点,然后再进行插入。
找到该 结点的时间复杂度为O(n),插入的时间复杂度为O(1)。
本题答案为:O(1);O(n)。
三、应用题(例7-16) 设A 是一个线性表(a 0,a 1,…,a i ,…,a n-1),采用顺序存储结构,则在等概率情况下平均每插入一个元素需要移动的元素个数是多少?若元素插在a i 和a i+1之间 (0≤i ≤n-1)的概率为1(1)/2n n n -+,则平均每插入一个元素所需要移动的元素个数是多少?解析:在等概率情况下,平均每插入一个元素需要移动的元素个数为:(012)12n n n ++++=+ 若元素插在a i 和a i+l 之间(0≤i ≤n-1)的概率为(1)/2n i n n -+,则平均每插入一个元素所需 要移动的元素个数为:10n i -=∑2222()221(1)1(1)/2(1)3n i n n n n n n n -+⎡⎤=+-++=⎣⎦++ (例7-17) 简述线性表采用顺序存储方式和链式存储方式的优缺点。
解析:顺序表的优点是可以随机访问数据元素,而且不需要额外的空间存储元素间的逻辑关系;缺点是表的大小固定,增减结点需要移动大量元素。
链表的优点是增减元素非常方便,只需要修改指针内容;缺点是只能进行顺序访问,另外在每个结点上增加指针域会造成存储空间增大。
[例7-18] 若频繁地对一个线性表进行插入和删除操作,则应采用何种存储结构来存储该线性表?为什么?解析:应采用链式结构来存储该线性表。
采用链式存储结构来存储线性表,在进行插 入和删除操作时的复杂度体现在查找插入或删除结点的前驱结点的操作上,查找过程中平 均移动指针域的次数为表长的一半;而采用顺序存储结构存储线性表,在进行插入和删除 操作时的复杂度则体现在元素的移动上,平均需移动表中的一半元素。
因为指针域的移动 操作次数比元素的移动操作次数少得多,所以应采用链式结构来存储该线性表。
(例7—19) (1)写出在双向链表中的结点 * p 前插入一个结点 *s 的语句序列。
(2)写出判断带头结点的双向循环链表L 为空表的条件。
解析:(1)s —>prior =p —>prior ;p —>prior — >next =s ;s —>next =p ;p —>prior =s ;(2)(L==L—>next)&&(L==L—>prior)[例7-20] 链表所表示的元素是否是有序的?如果有序,则有序性体现在何处?链表所表示的元素是否一定要在物理上是相邻的?有序表的有序性又如何理解?解析:链表所表示的元素是有序的,其有序性体现在逻辑有序,即指针有指向。
链表所表示的元素在物理上不一定相邻。
有序表的有序性不仅在逻辑结构上有序,而且在物理结构上也有序。
四、算法设计题(例7-21)编写一个算法,将一个带头结点的单链表逆转。
要求在原链表空间上进行逆转,即不允许构造新的链表结点;解析:从单链表的一种构造方法——头插法中可以得知,该方法构造的线性表中结点的顺序与插人次序相反。
因此我们可以将表结点从前往后逐个拆下并用头插法插人新表,所构造的单链表即为原表的逆转。
具体算法如下:linklist * reverse(1inklist * h){linklist * p,*q,*r;p=h—>next;h—>next=NULL;//构造空表while(p!=NULL){q=p;//拆下结点p=p—> next;q—>next=h—>next;//用头插法插入h—>next=q;}return h;}(例7-22) 已知一个顺序表La的元素按值非递减有序,编写一个算法将元素x插人后保持该表仍然按值非递减有序。
解析:要让插入新元素后的顺序表仍然按值非递减有序,必须把x插入到表中第一个大于等于x的元素之前。
应先在表中找到该位置,然后后移该元素,空出一个位置,再将x 插入。
具体算法如下:insert(sqlist *La,datatype x) //La为指向顺序表的指针{int i=0,j;while(i<= La—>last) //查找插入位置i{if(x<=La—>data[i])break;i++;}for(j=La—>last+1;j>i;j--) //后移所有大于等于x的元素La—>data[j]=La—>data[j-1];La—>data[i]=x;//将x插入La—>last++;//表长度加1}(例7-23)用顺序表A、B表示集合,编写算法求集合A和集合B的交集C(假设A、B 表内无重复元素)。