(完整版)数据结构作业系统_第二章答案.pdf





《(完整版)数据结构作业系统_第二章答案.pdf》由会员分享,可在线阅读,更多相关《(完整版)数据结构作业系统_第二章答案.pdf(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2.11 设顺序表 L 中的数据元素递增有序。试写一算法,将 x 插入到 L 的适当位置上,并保 持该表的有序性。要求实现下列函数:void InsertOrderList(SqList&L,ElemType x)/*在有序的顺序表 L 中保序插入数据元素 x*/顺序表类型定义如下:typedef struct ElemType*elem;int length;int listsize;SqList;void InsertOrderList(SqList&L,ElemType x)/在有序的顺序表 L 中保序插入数据元素 x int i=0,j;while(L.elemixⅈj-)L.e
2、lemj=L.elemj-1;L.elemi=x;L.length+=1;2.12 设 A=(a1,am)和 B=(b1,bn)均为有序顺序表,A和 B分别为 A 和 B 中除去最大共同前缀后的子表(例如,A=(x,y,y,z,x,z),B=(x,y,y,z,y,x,x,z),则两者中最大 的共同前缀为(x,y,y,z),在两表中除去最大共同前缀后 的子表分别为 A=(x,z)和 B=(y,x,x,z))。若 A=B=空表,则 A=B;若 A=空表,而 B 空表,或者两者均不为空表,且 A的首元小于 B的首元,则 AB。试写一个比 较 A 和 B 大小的算法。(注意:在算法中,不要破坏原表 A
3、 和 B,也不一定先求得 A和 B才进行比较)。要求实现下列函数:char Compare(SqList A,SqList B);/*比较顺序表 A 和 B,*/*返回,若 A,若 AB */顺序表类型定义如下:typedef struct ElemType*elem;int length;int listsize;SqList;char Compare(SqList A,SqList B)/比较顺序表 A 和 B,/返回,若 A,若 AB int i=0;while(A.elemi=B.elemi&iA.length&iB.length)i+;if(i=A.length&i=B.length
4、)return=;else if(A.elemiB.elemi|i=A.length)return B.elemi|i=B.length)return;2.13 试写一算法在带头结点的单链表结构上实现线性表操作 Locate(L,x)。实现下列函数:LinkList Locate(LinkList L,ElemType x);/If x in the linked list whose head node is pointed /by L,then return pointer pointing node x,/otherwise return NULL 单链表类型定义如下:typedef s
5、truct LNode ElemType data;struct LNode*next;LNode,*LinkList;LinkList Locate(LinkList&L,ElemType x)/If x in the linked list whose head node is pointed/by L,then return pointer ha pointing node x,/otherwise return NULL LinkList p;int i=0;p=L-next;while(p-data!=x&p!=NULL)i+;p=p-next;return p;2.14 试写一算法
6、在带头结点的单链表结构上实现线性表 操作 Length(L)。实现下列函数:int Length(LinkList L);/Return the length of the linked list /whose head node is pointed by L 单链表类型定义如下:typedef struct LNode ElemType data;struct LNode*next;LNode,*LinkList;int Length(LinkList L)/Return the length of the linked list /whose head node is pointed b
7、y L LinkList p;int i=0;p=L-next;while(p!=NULL)i+;p=p-next;return i;2.17 试写一算法,在无头结点的动态单链表上实现 线性表操作 INSERT(L,i,b),并和在带头结点的动态单 链表上实现相同操作的算法进行比较。实现下列函数:void Insert(LinkList&L,int i,ElemType b);单链表类型定义如下:typedef struct LNode ElemType data;struct LNode*next;LNode,*LinkList;void Insert(LinkList&L,int i,El
8、emType b)LinkList p,q;int j=2;p=L;while(jnext;if(i!=0&i!=1)q=(LinkList)malloc(sizeof(LNode);q-data=b;q-next=p-next;p-next=q;if(i=1)q=(LinkList)malloc(sizeof(LNode);q-data=b;q-next=p;L=q;2.18 同 2.17 题要求。试写一算法,实现线性表操作 DELETE(L,i)。实现下列函数:void Delete(LinkList&L,int i);单链表类型定义如下:typedef struct LNode Elem
9、Type data;struct LNode*next;LNode,*LinkList;void Delete(LinkList&L,int i)LinkList p,q;int j=2;p=L;while(jnext;if(i!=0&i!=1)q=p-next;p-next=q-next;free(q);if(i=1)q=L;L=L-next;free(q);2.20 同 2.19 题条件,试写一高效的算法,删除表中所 有值相同的多余元素(使得操作后的线性表中所有元素的 值均不相同)同时释放被删结点空间,并分析你的算法的 时间复杂度。实现下列函数:void Purge(LinkList&L)
10、;单链表类型定义如下:typedef struct LNode ElemType data;struct LNode*next;LNode,*LinkList;void Purge(LinkList&L)LinkList p,q;int i=0;p=L;while(p!=NULL&p-next!=NULL)if(p-data=p-next-data)q=p-next;p-next=q-next;free(q);else p=p-next;2.21 试写一算法,实现顺序表的就地逆置,即利用原表的存储空间将线性表(a1,a2,an)逆置为(an,an-1,a1)。实现下列函数:void Inver
11、se(SqList&L);顺序表类型定义如下:typedef struct ElemType*elem;int length;int listsize;SqList;void Inverse(SqList&L)int i=0,j=0;i=L.length/2;for(j=0;jnext;while(p-next!=NULL)k=q;q=p-next;p-next=q-next;q-next=k;L-next=q;2.23 设线性表 A=(a1,.,am),B=(b1,.,bn),试写 一个按下列规则合并 A、B 为线性表 C 的算法,即使得 C=(a1,b1,.,am,bm,bm+1,.,bn
12、)当 mn 时;或者 C=(a1,b1,.,an,bn,an+1,.,am)当 mn 时。线性表 A、B 和 C 均以单链表作存储结构,且 C 表利用 A 表和 B 表中的结点空间构成。注意:单链表的长度值 m 和 n 均未 显式存储。实现下列函数:void Merge(LinkList ha,LinkList hb,LinkList&hc)/*依题意,合并带头结点的单链表 ha 和 hb 为 hc */单链表类型定义如下:typedef struct LNode ElemType data;struct LNode*next;LNode,*LinkList;void Merge(LinkLi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整版 数据结构 作业 系统 第二 答案

限制150内