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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构上机实验报告.docx

1、数据结构上机实验报告数据结构上机实验报告 学 院:电子工程学院 专 业:信息对抗技术 姓 名: 学 号: 教 师:饶 鲜 日 期:实验一 线性表一、实验目的1 熟悉线性表的顺序和链式存储结构2 掌握线性表的基本运算3 能够利用线性表的基本运算完成线性表应用的运算二、实验代码1 设有一个线性表E=e1, e2, , en-1, en,设计一个算法,将线性表逆置,即使元素排列次序颠倒过来,成为逆线性表E= en, en-1 , , e2 , e1 ,要求逆线性表占用原线性表空间,并且用顺序表和单链表两种方法表示,分别用两个程序来完成。(文件夹:习题1)代码:单链表代码:/单链表逆置主文件.cpp#

2、include#include#include单链表结构类型定义.h#include建立单链表.h#include输出单链表.h#include单链表逆置.hvoid main() linklist*head; creat(head); print(head); invert(head);/调用单链表逆置的函数 print(head);/单链表结构类型定义.htypedef char datatype;typedef struct node datatype data; struct node *next;linklist;/建立单链表.hvoid creat(linklist*&head)/

3、采用尾插法建立具有结点的单链表 char ch; linklist *s,*r; head=new linklist; r=head; while(ch=getchar()!=*) s=new linklist; s-data=ch; r-next=s; r=s; r-next=NULL;/输出单链表.hvoid print(linklist *head) linklist*p=head-next; while(p!=NULL) coutdatanext; coutnext; q=p-next; while(q!=NULL) r=q-next; q-next=p; p=q; q=r; head

4、-next-next=NULL; head-next=p; 单链表结果截图见下方实验结果。顺序表代码:/顺序表逆置主文件.cpp#include#include#include顺序表结构类型定义.h#include建立顺序表.h#include输出顺序表.h#include顺序表逆置.hvoid main() sequenlist*L; creat(L); print(L); invert(L);/调用顺序表逆值的函数 print(L);/顺序表的结构类型定义.htypedef char datatype;const int maxsize=1024;typedef struct dataty

5、pe datamaxsize; int last;sequenlist;/建立顺序表.hvoid creat(sequenlist*&L) L=new sequenlist; L-last=0; char ch; while(ch=getchar()!=*) L-dataL-last=ch; L-last+; /输出顺序表.hvoid print(sequenlist*L) for(int i=0;ilast;i+) coutdatai ; coutlast-1; while(idatai; L-datai=L-dataj; L-dataj=mid; i+;j-; 顺序表实验截图见下方实验结果

6、。2 已知由不具有头结点的单链表表示的线性表中,含有三类字符的数据元素(字母、数字和其他字符),试编写算法构造三个以循环链表表示的线性表,使每个表中只含有同一类的字符,且利用原表中的结点空间,头结点可另辟空间。(文件夹:习题2)代码:/分解单链表主程序文件.cpp#include#include#include单链表结构类型定义.h#include建立单链表.h#include输出单链表.h#include输出循环链表.h#include在循环链表中插入.h#include分解单链表.hvoid main() linklist *head,*letter,*digit,*other; crea

7、t(head); print1(head); letter=new linklist; letter-next=letter; digit=new linklist; digit-next=digit; other=new linklist; other-next=other; resolve(head,letter,digit,other);/调用分解单链表的函数 print2(letter); print2(digit); print2(other);/单链表结构类型定义typedef char datatype;typedef struct node datatype data; str

8、uct node *next;linklist;void creat(linklist*&head)/建立单链表 datatype x; linklist *s,*r; head=new linklist; r=head; cinx; while(x!=$) s=new linklist; s-data=x; r-next=s; r=s; cinx; r-next=NULL;void print1(linklist*head)/输出单链表 linklist *p=head-next; while(p!=NULL) coutdata; p=p-next; coutnext; while(p!=h

9、ead) coutdata; p=p-next; coutnext!=h) q=q-next; q-next=p; p-next=h;/分解单链表.hvoid resolve(linklist* head,linklist* letter,linklist* digit,linklist* other) linklist* p = head-next,*t; head-next =NULL; while (p!=NULL) t = p; p=p-next; if (t-data =0 & t-data data =a & t-data data =A & t-data quelen=0;队满的

10、条件:sq-quelen=m。(文件夹:习题3)/循环队列入队出队的主程序文件.cpp#include#include#include#include循环队列的结构类型定义.h#include置空队.h#include入队.h#include出队.hvoid main() qu *sq;datatype x, *p;int key;sq=new qu;setnull(sq);do coutkey;switch(key) case 1: coutx; enqueue(sq,x); break; case 2: p=dequeue(sq); if(p!=NULL) cout*pquelen=0)

11、printf(队列为空,请先进行入队操作n); return 0; else temp=(datatype*)malloc(sizeof(datatype); sq-quelen-; *temp=sq-sequ(sq-rear-sq-quelen+m)%m; coutquelen=m) printf(队列已满,请先进行出队操作n); else sq-quelen+; sq-rear=(sq-rear+1)%m; sq-sequsq-rear=x; coutrear=m-1;sq-quelen=0;实验截图见下方实验结果。2. 设单链表中存放有n个字符,试编写算法,判断该字符串是否有中心对称的关

12、系,例如xyzzyx是中心对称的字符串。(提示:将单链表中的一半字符先依次进栈,然后依次出栈与单链表中的另一半字符进行比较。)(文件夹:习题4)/判字符串中心对称的主程序文件.cpp#include#include单链表顺序栈结构类型定义.h#include置栈空.h#include求单链表长度.h#include输出单链表.h#include建立单链表.h#include顺序栈入栈.h#include顺序栈出栈.h#include判字符串是否中心对称.h void main() linklist *head;stack *s; datatypestr80; cinstr; creat(hea

13、d,str); printlink(head); setnull(s); if(symmetry(head,s) cout字符串str中心对称n; else cout字符串strdata=*p; r-next=s; r=s; p+; r-next=NULL;/判断字符是否中心对称.hint symmetry(linklist*head,stack*s) int n=length(head)/2; linklist*p=head-next; datatype x; for(inti=0;idata); p=p-next; if(length(head)%2=1) p=p-next; while(

14、p!=NULL) x=pop(s); if(x=p-data) p=p-next; else return 0; return 1; /求单链表长度.hint length(linklist*head) linklist *p=head-next;int n=0;while(p!=NULL) n+; p=p-next; return n;/输出单链表.hvoidprintlink(linklist*head) linklist *p=head-next;while(p!=NULL) coutdata; p=p-next; couttop-; temp=s-elementss-top+1; re

15、turn temp;/顺序栈入栈.hvoid push(stack*s,datatype e) s-top+; s-elementss-top=e;/置栈空.hvoidsetnull(stack *&s) s=new stack; s-top=-1;截图见下方实验结果。3、实验结果四、个人思路队列是一个先进先出的线性表,入队时,先判断队列是否已满,如果不满将元素插入到队尾,然后判断rear是否指向sequm,如果是,指向队尾指针rear+1,否者rear=sequ0,队列内元素个数quelen+1。出队时头指针front后移一位,如果front=sequm,front指向sequ0,否则fro

16、nt+,quelen-1,从而实现入队与出队的操作。 要判断字符串是否中心对称,首先获取栈的长度N,将前N/2个元素(N为偶数)或前(N-1)/2个元素(N为奇数)顺序压入栈中,然后依次出栈(先进后出),与另一半元素依次对应比较,全为真则可判断字符串中心对称。 实验三 数组一、实验目的1 熟悉数组的结构2 掌握矩阵的进行运算二、实验代码 若在矩阵Amn中存在一个元素Ai-1j-1,其满足Ai-1j-1是第i行元素中最小值,且又是第j列元素中最大值,则称此元素为该矩阵的一个马鞍点。用二维数组存储矩阵Amn ,设计算法求出矩阵中所有马鞍点。(文件夹:习题5)/找马鞍点的主程序文件.cpp#incl

17、ude#include数组的结构类型定义.h#include找马鞍点.husing namespace std;void main() array*pa=new array; int i, j; for (i=0;im;i+) for (j=0;jpa-Aij; minmax(pa); getchar();/数组的结构类型定义.hconstint m=3;constint n=3;typedefstruct int Amn; int maxm,minn;array;/找马鞍点.hvoidminmax(array*p) inti,j,have=0; for(i=0;imini=p-A0i; fo

18、r(j=1;jAijmini) p-mini=p-Aij; for (j=0;jmaxj=p-A0j; for(i=1;iAijp-maxj) p-maxj=p-Aij; for(i=0;im;i+) for(j=0;jmini=p-maxj) printf(矩阵中存在马鞍点:n); printf(行号:%d,列号:%d,数值:%dn,i+1,j+1,p-Aij); have=1; if(!have) printf(矩阵中没有马鞍点!n); 三、实验结果4、个人思路 若称元素为该矩阵的一个马鞍点,即说明该元素是第i行元素中最小值,且又是第j列元素中最大值。用两个循环遍历所有元素,第一个循环遍历

19、行,第二个循环遍历列,将Ai-1j-1与对应行和列的每一个元素比较,如果第i行的某元素比Ai-1j-1小或第j列的某元素比Ai-1j-1大则跳出内层循环,实现寻找马鞍点的要求。实验四 树一、实验目的1 熟悉二叉树的链式存储结构2 掌握二叉树的建立、深度优先递归遍历等算法3 能够利用遍历算法实现一些应用二、实验代码1 已知二叉树采用二叉链表存储结构,编写一个算法交换二叉树所有左、右子树的位置,即结点的左子树变为结点的右子树,右子树变为左子树。(文件夹:习题6)/交换左右子树的主程序文件.cpp#include#include#include二叉链表的结构类型定义.h#include二叉树的建立.h#include二叉树的输出.h#include交换左右子树.hvoid main() bitree * pb;/指针 pb=creattree();/创建一棵树,pb指向这棵树的根节点 preorder(pb);/打印这棵树 coutendl; swap(pb);/交换这棵树的所有子树 preorder(pb);/打印这颗新树 coutdata=ch; s-lchild=NULL; s-rchild=NULL; rear+; Qrear=s; if(rear=1)root=s; else if(s&Q

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

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