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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构与算法线性表练习题.docx

1、数据结构与算法线性表练习题三、写一个算法合并两个已排序的线性表。(用两种方法:数组表示的线性表(顺序表)和指针表示的线性表(链表) 要求:1、定义线性表节点的结构,并定义节点的型和位置的型。 2、定义线性表的基本操作 3、在1,2的基础上,完成本题。 4、在main函数中进行测试:先构建两个有序的线性表,然后合并这两个线性表。四、已知一个单向链表,试给出复制该链表的算法。要求:1、定义线性表的节点的结构以及节点的型和位置的型。 2、定义线性表的基本操作 3、在1,2的基础上,完成本题。 4、在main函数中进行测试:先构建一个线性表,并定义一个空线性表,然后进行复制。五、写出从一个带表头的单链

2、表中删除其值等于给定值x的结点的算法函数: int delete(LIST &L, int x);如果x在该链表中,则删除对应结点,并返回其在链表中的位置(逻辑位置,第一个结点的逻辑位置为1),否则返回-1。 要求:1、定义线性表的节点的结构以及节点的型和位置的型。2、定义线性表的基本操作3、在1,2的基础上,完成本题。4、在main函数中进行测试:先构建一个线性表,然后调用函数删除值等于给定值的节点。六、写出一个将两个静态链表(属于同一个存储池)合并的算法函数: void Merge(cursor M, cursor N); 合并的方法是将N链表中的所有结点添加到M链表的后面,并将N链表的表

3、头结点添加到空闲结点链表中。要求:1、定义静态链表的结点的结构以及结点的型SPACE以及位置(position)和游标(cursor)的型。 2、定义静态链表的基本操作:void Initialize(); 初始化,将所有存储池中的结点设置为空闲;cursor GetNode(); 从空闲链中获取一个结点;void FreeNode(cursor q); 将结点q加入到空闲链; void Insert ( elementtype x, position p, cursor M ); 在链表M中的位置为p的元素后面添加一个值为x的结点;void Delete (cursor M, positio

4、n p ); 在链表M中删除位置为p的元素的后一个元素。 3、在1、2的基础上完成本题。4、在main函数中进行测试:先构建一个存储池,然后在该存储池中创建两个静态表,最后将这两个静态表合并。七、利用指针表示的线性表(链表)表示一个多项式,并实现两个多项式的相加和相乘运算。假设多项式形式为: 其中,系数ai0,指数ei满足emem-1e2e1=0。要求:1、定义多项式每一项的结构。 2、定义两个多项式的相加和相乘运算函数。 3、在main函数中,构建两个多项式,并测试相加和相乘运算。八、试编写一个整数进制转换的通用函数convert(int num, STACK S, int n),要求将整数

5、m转换为n进制数,n进制数的各位依次存放在栈S中。并在主函数中进行测试。要求:1、定义栈以及栈的型。2、定义栈的各种操作。 3、实现函数convert。 4、在main函数中,通过调用函数convert将num的n进制数存放到一个栈中,并通过出栈的方法输出该n进制数九、设有一个循环队列Queue,只有头指针front,不设尾指针,另设一个含有元素个数的计数器count,试写出相应的判断队列空、判断队列满、出队算法和入队算法。要求:1、定义相应的循环队列的型(只有头指针,没有尾指针,但有一个元素个数的计数器);2、定义该队列的四个算法:判断队列空、判断队列满、出队算法和入队算法;3、在main函

6、数验证算法的正确性。十、设主串T=“abcaabbabcabaacbacba“,模式为p=“abcabaa”。 1、计算模式p的nextval函数值2、不写算法,只画出利用KMP算法进行模式匹配时,每一趟的匹配过程。要求:1、写出模式p的nextval值;2、画出KMP算法的每一趟匹配过程(可参照教材P61从第8行开始的内容);3、不需要编写程序。十一、假设表达式中允许包含三种括号:圆括号、方括号和大括号。设计一个算法采用顺序栈(用数组表示的栈)判断表达式中的括号是否正确配对。要求: 1、定义栈以及栈的型,栈中所存放元素的类型为字符型,定义枚举类型Boolean,其中两个元素分别为TRUE和F

7、ALSE。2、定义栈的各种操作。3、定义函数Boolean check(char *s); 判断s中的括号是否正确配对,如果正确配对,返回TRUE,否则返回FALSE。4、在主函数中验证所编写函数的正确性。十二、设有一个带头结点的双向链表h,设计一个算法用于查找第一个元素之为x的结点,并将其与其前驱结点进行交换。要求: 1、定义带头结点的双向链表的型DLIST。 2、定义双向链表DLIST的基本操作。 3、定义函数int swap(elementtype x, DLIST &h),查找第一个元素之为x的结点,如果在链表中存在元素值为x的结点,并其与其前驱结点进行交换,并返回1,否则返回0。 4

8、、在主函数中测试所编写函数的正确性。十三、试编写一个求三元组顺序表示的稀疏矩阵对角线元素之和的算法十四、当具有相同行值和列值的稀疏矩阵A和B均以三元组顺序表方式存储时,试写出矩阵相加的算法,其结果存放在以行逻辑链接顺序表方式存储的矩阵C中。十五、设有一个稀疏矩阵: 1、写出三元组顺序表存储表示 2、写出十字链表存储的顺序表示十六、画出广义表LS=( ), (e), (a, (b, c, d)的头尾链表存储结构(类似于教材P70图2-27.9)。要求:按照教材中的事例画出相应的图形,不需要编程。 其中第一个节点如下: 十七、试编写求广义表中原子元素个数的算法。要求:1、定义广义表的节点的型;2、

9、定义广义表的基本操作;3、定义本题要求的函数int elements(listpointer L);函数返回值为广义表中原子的个数。例如,广义表(a, b, c, d)原子的个数为4,而广义表(a, (a, b), d, e, (i, j), k)中院子的个数为3。提示:先利用基本操作Cal(L)获得表头,判断表头是不是原子,再利用基本操作Cdr(L)获得除第一个元素外的其他元素所形成的表L1,利用递归的方法求L1中原子的个数。要求:1、上述作业要求在单独完成;2、完成后,于规定期限内提交到ftp服务器的相应目录中中,注意,在提交时将所编写的程序统一拷贝到一个Word文件中,文件名格式为“学号

10、+姓名”三(数组表示)#includeusing namespace std;#define maxlength 100typedef int position;typedef int Elementtype;struct LIST Elementtype elementsmaxlength; int last;position End(LIST L)/线性表长度 return (L.last+1);void Insert(Elementtype x,position p,LIST&L) position q; if(L.last=maxlength-1) coutlist is fullL.

11、last+1)|(p1) coutposition does not exit=p;q-) L.elementsq+1=L.elementsq; L.last=L.last+1; L.elementsp=x; void Delete(position p,LIST &L) position q; if(pL.last)|(p1) coutposition does not existendl; else L.last=L.last-1; for(q=p;q=L.last;q+) L.elementsq=L.elementsq+1; position Locate(Elementtype x,L

12、IST L) position q; for(q=1;q=L.last;q+) if(L.elementsq=x) return q; return(L.last+1); void merge(LIST&L,LIST&L1,LIST&L2) position p=0,p1,p2; position len1=End(L1); position len2=End(L2); L.last=len1+len2-1; for(p1=0;p1End(L1);p1+) L.elementsp=L1.elementsp1; p+; p-; for(p2=0;p2End(L2);p2+) L.elements

13、p=L2.elementsp2; p+; p-;void read(LIST &L) coutendl; cout请输入线性表长度L.last; for(int i=0;iL.elementsi; void write(LIST &L) for(int i=0;iL.last;i+) coutL.elementsit; coutendl; int main() LIST L,L1,L2; read(L1); write(L1); read(L2); write(L2); merge(L,L1,L2); write(L); 数据结构三(指针)#includeusing namespace std

14、;typedef int Elementtype;struct celltype Elementtype element; celltype *next;typedef celltype *LIST;typedef celltype *position;position End(LIST L) position p; p=L; while(p-next!=NULL) p=p-next; return p;void Insert(Elementtype x,position p) position q; q=new celltype; q-element=x; q-next=p-next; p-

15、next=q;void Delete(position p)/删除p的下一个节点 position q; if(p-next!=NULL) q=p-next; p-next=q-next; delete q; position Locate(Elementtype x,LIST L) position p; p=L; while(p-next!=NULL) if(p-next-element=x) return p; else p=p-next; return p;position MakeNull(LIST&L) L=new celltype; L-next=NULL; return L;

16、void merge(LIST&L,LIST&L1,LIST&L2) position p,p1,p2; for(p1=L1;p1;p1=p1-next) p=new celltype; p-element=p1-element; if(L=0) L=p; p2=p; else p2-next=p; p2=p; p2-next=NULL; for(p1=L2;p1;p1=p1-next) p=new celltype; p-element=p1-element; if(L=0) L=p; p2=p; else p2-next=p; p2=p; p2-next=NULL;void Read(LI

17、ST &L) position p1,p2;/ p1=new celltype; cout请输入数据以-1结束p1-element; if(p1-element=-1) break; if(L=0) L=p1; p2=p1; else p2-next=p1; p2=p1; p2-next=NULL;void write(LIST&L) position p; p=L; for(;p;p=p-next) coutelementt; coutendl;int main() LIST L=NULL,L1=NULL,L2=NULL; Read(L1); write(L1); Read(L2); wri

18、te(L2); merge(L,L1,L2); write(L);数据结构四#includeusing namespace std;typedef int Elementtype;struct celltype Elementtype element; celltype *next;typedef celltype *LIST;typedef celltype *position;position End(LIST L) position p; p=L; while(p-next!=NULL) p=p-next; return p;void Insert(Elementtype x,posit

19、ion p)/节点插p节点之后 position q; q=new celltype; q-element=x; q-next=p-next; p-next=q;void Delete(position p)/删除P节点的下一个节点 position q; if(p-next!=NULL) q=p-next; p-next=q-next; delete p; position Locate(Elementtype x,LIST L) position p; p=L; while(p-next!=NULL) if(p-next-element=x) return p; else p=p-next

20、; return p;position MakeNull(LIST &L) L=new celltype; L-next=NULL; return L;void Copy(LIST &L1,LIST &L2) position p1,p2,p3; for(p2=L2;p2;p2=p2-next) p1=new celltype; p1-element=p2-element; if(L1=0) L1=p1; p3=p1; else p3-next=p1; p3=p1; p3-next=NULL;void Read(LIST &L) position p1,p2; p1=new celltype;

21、 cout请输入数据以-1结束p1-element; if(p1-element=-1) break; if(L=0) L=p1; p2=p1; else p2-next=p1; p2=p1; p2-next=NULL;void Write(LIST &L) position p=L; for(;p;p=p-next) coutelementt; coutendl;int main() LIST L1=NULL,L2=NULL; Read(L2); Write(L2); Copy(L1,L2); Write(L1);数据结构五#includeusing namespace std;typede

22、f int Elementtype;struct celltype Elementtype element; celltype *next; typedef celltype *LIST; typedef celltype *position;position End(LIST L) position p; p=L; while(p-next!=NULL) p=p-next; return p; void Insert(Elementtype x,position p)/插入到P后面的一个节点 position q; q-element=x; q-next=p-next; p-next=q;v

23、oid Delete(position p)/删除P后面一个节点 position q; if(p-next!=NULL) q=p-next; p-next=q-next; delete q; int Delete(LIST &L,int x) position p=L; int count=1; if(p-element=x) return count; p=p-next; while(p-next!=NULL) count+; if(p-next-element=x) if(p-next-next!=NULL) position q; q=p-next; p-next=q-next; de

24、lete q; return count; else delete p-next; p-next=NULL; return count; else p=p-next; return -1;position Locate(Elementtype x,LIST L) position p=L; while(p-next!=NULL) if(p-next-element=x) return p; else p=p-next; return p;position MakeNull(LIST&L) L=new celltype; L-next=NULL; return L;void Read(LIST

25、&L) position p1,p2; p1=new celltype; cout请输入数据以-1结束p1-element; if(p1-element=-1) break; if(L=0) L=p1; p2=p1; else p2-next=p1; p2=p1; p2-next=NULL;void Write(LIST &L) position p=L; for(;p;p=p-next) coutelementt; coutendl;int main() LIST L1=NULL; Read(L1); Write(L1); coutDelete(L1,3); coutendl; Write(L1);数据结构六#includeusing namespace std;#define maxsize 100typedef int Elementtype;typedef struct Elementtype element; int next;spacestr;/节点类型 spacestr SPACEmaxsize;/存储池 typedef int position,cursor;cursor available;/游标变量,标识线性表 void Initialize() int j; for(j=0;jmaxsize-1;j+) SPACEj.next=j+1;/链接池中节点 S

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2