ImageVerifierCode 换一换
格式:DOCX , 页数:102 ,大小:47.81KB ,
资源ID:3448851      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3448851.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(经典数据结构例题代码.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

经典数据结构例题代码.docx

1、经典数据结构例题代码1.16 试写一算法,如果三个整数X,Y和Z的值不是依次非递增的,则通过交换,令其为非递增。要求实现下列函数:void Descend(int &x, int &y, int &z); /* 按从大到小顺序返回x,y和z的值 */void Descend(int &x, int &y, int &z)/* 按从大到小顺序返回x,y和z的值 */ int a; if(yx) a=x;x=y;y=a; if(zx) a=x;x=z;z=a; if(zy) a=y;y=z;z=a; 1.17 已知k阶裴波那契序列的定义为 f0=0, f1=0, ., fk-2=0, fk-1=1

2、; fn=fn-1+fn-2+.+fn-k, n=k,k+1,.试编写求k阶裴波那契序列的第m项值的函数算法,k和m均以值调用的形式在函数参数表中出现。要求实现下列函数:Status Fibonacci(int k, int m, int &f);/* 如果能求得k阶斐波那契序列的第m项的值f,则返回OK;*/* 否则(比如,参数k和m不合理)返回ERROR */Status Fibonacci(int k, int m, int &f) /* 求k阶斐波那契序列的第m项的值f */ int temp100,i,j;if(k2|m0) return ERROR;if(mk-1) f=0; el

3、se if (m=k-1 | m=k) f=1; else for(i=0;i=k-2;i+) tempi=0; tempk-1=1;tempk=1; for(i=k+1,j=0;iARRSIZE或对某个k(1kn)使k!2kMAXINT时,应按出错处理。注意选择你认为较好的出错处理方法。要求实现下列函数:Status Series(int ARRSIZE, int a);/* 求i!*2i序列的值并依次存入长度为ARRSIZE的数组a; */* 若所有值均不超过MAXINT,则返回OK,否则返回OVERFLOW */Status Series(int ARRSIZE, int a) /* 求

4、i!*2i序列的值并依次存入长度为ARRSIZE的数组a; */* 若所有值均不超过MAXINT,则返回OK,否则返回OVERFLOW */ int i,k,sum; for(i=i;i=1;k-) sum*=k; ai-1=sum*pow(2,i); if(ai-1MAXINT) return OVERFLOW; return OK; 1.20 试编写算法求一元多项式 P(x) = a0 + a1x + a2x2 + . + anxn的值P(x0),并确定算法中每一语句的执行次数和整个算法的时间复杂度。注意选择你认为较好的输入和输出方法。要求实现下列函数:float Polynomial(i

5、nt n, int a, float x0);/* 求一元多项式的值P(x0)。 */* 数组a的元素ai为i次项的系数,i=0,1,.,n */float Polynomial(int n, int a, float x)/* 求一元多项式的值P(x)。 */* 数组a的元素ai为i次项的系数,i=0,.,n */ int i; float j=1.0, P=a0; for(i=1;i=n;i+) j*=x; P+=ai*j; return P;2.11 设顺序表L中的数据元素递增有序。试写一算法,将x插入到L的适当位置上,并保持该表的有序性。要求实现下列函数:void InsertOrde

6、rList(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;if (L.length=0) L.elem0=x; L.length+;else while(iL.length&L.elemii;j-) L.elemj=L.elemj-1; L.el

7、emi=x; L.length+;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和B,也不一定先求得A和B才进行比较)。要求实现下列函数:char Compare(S

8、qList 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; if(A.length=0&B.length=0) return =; if(A.length=0&B.length!=0) return ; else for(i=0;A.elemi=B.elemi&iA.length&

9、iB.length;i+) if(A.elem0B.elem0) return B.elem0) return ; if(i=A.length&i=B.length) return =; else if(i=A.length) return ; else if(A.elemiB.elemi) return ; 2.13 试写一算法在带头结点的单链表结构上实现线性表操作Locate(L,x)。实现下列函数:LinkList Locate(LinkList L, ElemType x);/ If x in the linked list whose head node is pointed / b

10、y L, then return pointer pointing node x, / otherwise return NULL单链表类型定义如下:typedef struct 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 r

11、eturn NULL LNode *p=L-next; while(p) if(p-data=x) return p; else p=p-next; return NULL;2.14 试写一算法在带头结点的单链表结构上实现线性表操作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,

12、 *LinkList;int Length(LinkList L)/ Return the length of the linked list / whose head node is pointed by L int i=0; LNode *p=L-next; while(p) p=p-next; i+; return i;2.16 已知指针la和lb分别指向两个无头结点单链表中的首元结点。 下列算法是从表la中删除自第i个元素起共len个元素后,将它们插入到表lb中第i个元素之前。试问此算法是否正确? 若有错,则请改正之。实现下列函数:Status DeleteAndInsertSub(L

13、inkList &la, LinkList &lb, int i, int j, int len);/ la和lb分别指向两个单链表中第一个结点, */* 本算法是从la表中删去自第i个元素起共len个元素,*/* 并将它们插入到lb表中第j个元素之前, */* 若lb表中只有j-1个元素,则插在表尾。 */单链表类型定义如下:typedef struct LNode ElemType data; struct LNode *next; LNode, *LinkList;Status DeleteAndInsertSub(LinkList &la, LinkList &lb, int i, i

14、nt j, int len)/ la和lb分别指向两个单链表中第一个结点, */* 本算法是从la表中删去自第i个元素起共len个元素,*/* 并将它们插入到lb表中第j个元素之前, */* 若lb表中只有j-1个元素,则插在表尾。 */ LNode *p,*q,*s,*prev; int k; if(i=0|j=0|len=0) return ERROR; p=la; k=1; prev=NULL; while(p&knext; +k; if(!p) return ERROR; q=p; k=1; while(q&knext; k+; if(!q) return ERROR; if(!pre

15、v) la=q-next; else prev-next=q-next; if(j=1) q-next=lb; lb=p; else s=lb; k=1; while(s&knext; +k; if(!s) return ERROR; q-next=s-next; s-next=p; return OK; return OK;2.19 已知线性表中的元素以值递增有序排列,并以单链表作存储结构。试写一高效的算法,删除表中所有值大于mink且小于maxk的元素(若表中存在这样的元素)同时释放被删结点空间,并分析你的算法的时间复杂度(注意:mink和maxk是给定的两个参变量,它们的值可以和表中的元

16、素相同,也可以不同)。实现下列函数:void DeleteSome(LinkList &L, ElemType mink, ElemType maxk);/* Delete all the elements which value is between mink and */* maxk from the single sorted LinkList with head pointer L.*/单链表类型定义如下:typedef struct LNode ElemType data; struct LNode *next; LNode, *LinkList;void DeleteSome(Li

17、nkList &L, ElemType mink, ElemType maxk)/* Delete all the elements which value is between mink and */* maxk from the single sorted LinkList with head pointer L.*/ LNode *p=L,*q=L-next; while(q) if(q-datamink&q-datanext=q-next; free(q); q=p-next; else q=q-next; p=p-next; 2.20 同2.19题条件,试写一高效的算法,删除表中所有

18、值相同的多余元素 (使得操作后的线性表中所有元素的值均不相同) 同时释放被删结点空间,并分析你的算法的时间复杂度。实现下列函数:void Purge(LinkList &L);单链表类型定义如下:typedef struct LNode ElemType data; struct LNode *next; LNode, *LinkList;void Purge(LinkList &L) LNode *p,*d=L-next,*q; while(d) p=d;q=p-next; while(q) if(q-data=d-data) p-next=q-next; free(q); q=p-next

19、; else p=p-next; q=q-next; d=d-next; 2.21 试写一算法,实现顺序表的就地逆置,即利用原表的存储空间将线性表(a1,a2,an)逆置为(an,an-1,a1)。实现下列函数:void Inverse(SqList &L);顺序表类型定义如下:typedef struct ElemType *elem; int length; int listsize; SqList;void Inverse(SqList &L) ElemType temp; int i; for(i=0;inext,*q; L-next=NULL; while(p) q=p-next;

20、p-next=L-next; L-next=p; p=q; 2.23 设线性表A=(a1,.,am), B=(b1,.,bn),试写一个按下列规则合并A、B为线性表C的算法,即使得C=(a1,b1,.,am,bm,bm+1,.,bn) 当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

21、*/单链表类型定义如下:typedef struct LNode ElemType data; struct LNode *next; LNode, *LinkList;void Merge(LinkList ha, LinkList hb, LinkList &hc)/* 依题意,合并带头结点的单链表ha和hb为hc */ LNode *pa,*pb,*pc; pa=ha-next; pb=hb-next; pc=ha; if(!pa)hc=hb; if(!pb)hc=ha; else do pc-next=pa; pc=pc-next; pa=pa-next; pc-next=pb; pc

22、=pc-next; pb=pb-next; while(pa&pb); if(pb=NULL) pc-next=pa; else pc-next=pb; hc=ha; 2.26 假设以两个元素依值递增有序排列的线性表A和B分别表示两个集合(即同一表中的元素值各不相同),现要求另辟空间构成一个线性表C,其元素为A和B中元素的交集,且表C中的元素也依值递增有序排列。试对单链表编写求C的算法。实现下列函数:void Intersect(LinkList &hc, LinkList ha, LinkList hb);单链表类型定义如下:typedef struct LNode ElemType dat

23、a; struct LNode *next; LNode, *LinkList;void Intersect(LinkList &hc, LinkList ha, LinkList hb) LNode *p=ha-next,*q=hb-next,*pc,*sub; sub=(LNode*)malloc(sizeof(LNode); hc=sub; pc=sub; while(p&q) if(p-data=q-data) sub=(LNode*)malloc(sizeof(LNode); pc-next=sub; pc=pc-next; pc-data=p-data; p=p-next; q=q-next; else if(p-datadata) p=p-next; else q=q-n

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1