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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构报告.docx

1、数据结构报告 数 据 结 构 课 程 设 计 报 告 学院: 计算机科学与技术学院 专业: 计算机应用技术 班级: 2班 姓名: 文雨婷 学号: 120171021334 指导教师: 秦明 完成日期:6月30日 实验一 顺序表与单链表的基本运算实验一分录1.1 实验名称顺序表的基本运算1.2 实验内容(1) 已知长度为n的线性表A采用顺序存储结构,请写一时间复杂度为0(n)、空间复杂度为0(1)的算法,该算法删除线性表中所有值为item的数据元素。要求:线性表元素个数n很大,而值为item的数据元素个数很少,要求移动元素个数尽量少;删除后的数组元素与原数组元素不必保持顺序一致。(2)编写一个函

2、数将一个顺序表A(有n个元素,且任何元素均不为0)分拆成两个顺序表,使A中大于0的元素存放在B中,小于0的元素存放在C中。(3)假设一个算术表达式中包含圆括号,方括号和花号三种类型的括号,编写一个判别表达式中括号是否正确配对的函数correct(exp,tag);其中:exp为字符串类型量,表示被判别的表达式,tag为布尔型的变量。(4)编写向顺序分配的循环队列QU0,m-1中插入一个结点的函数enqueue和从该队列中取出一个节点的dequeue函数。(5)编写一个主函数,调试上述算法。1.3 实验代码#include#include#define MAXSIZE 100typedef in

3、t ElemType;typedef struct list ElemType elemMAXSIZE; int length;Sqlist;typedef struct Node ElemType date; struct Node *next;DNode;typedef struct DulNode ElemType date; struct DulNode *prev,*next; int freq;DLinkList;/定义双向链表void Creatlist(Sqlist &L) int i; printf(请输入顺序表的长度:); scanf(%d,&L.length); for(

4、i=0;iL.length;i+) scanf(%d,&L.elemi);void CreateSame(Sqlist &L1, Sqlist &L2) int counter=0; Sqlist L3; Creatlist (L1); Creatlist (L2); for(int i=0;iL1.length;i+) for(int j=0;jL2.length;j+) if(L1.elemi=L2.elemj) L3.elemcounter=L1.elemi; counter+; printf(删除相同元素后的链表元素:); for(i=0;icounter;i+) printf(%d

5、,L3.elemi); printf(n);void Chooseking(DNode *head) int m,num; printf(请输入猴子的总数:); scanf(%d,&num); printf(出局的猴子所报的号码是:); scanf(%d,&m); DNode *s,*q,*t; int i,counter=0; if(m=1) printf(最后一只猴子是%d号。n,num); else for(i=0;idate=i+1; s-next=NULL; if(i=0) head=s; q=head; else q-next =s; q=q-next; q-next=head;

6、q=head; while(q-next!=q) counter+; if(counter=m-1) t=q-next; q-next=t-next; counter=0; free(t); q=q-next; printf(最后一只猴子是%d号。n,q-date); DLinkList *Created() int num=0; DLinkList *head; DLinkList *p1,*p2; p1=p2=(DLinkList *)malloc(sizeof (DLinkList); scanf(%d,&p1-date); head=NULL; while(p1-date!=0) nu

7、m+; if(num=1) head=p1; else p2-next=p1; p1-prev=p2; p2=p1; p1=(DLinkList *)malloc(sizeof (DLinkList); scanf(%d,&p1-date); p2-next=NULL; return(head);void printed(DLinkList* head) DLinkList *p=head; while(p!=NULL) printf(%d ,p-date); p=p-next; printf(n);DLinkList *Locate(DLinkList *L, int x) DLinkLis

8、t *p=L-next; DLinkList *q; while(p & (p-date!=x) p=p-next; if(!p) return NULL; else p-freq+; q=p-prev; while( (q!=L) & (q-freq)freq) q=q-prev; if(q!=p-prev) p-prev-next=p-next; if(p-next) p-next-prev=p-prev; p-prev=q; p-next=q-next; q-next=p; p-next-prev=p; return p; void LocateLine() DLinkList *p,*

9、head; int i; head=(DLinkList *)malloc(sizeof(DLinkList); head-date=0; printf(输入链表各个结点的值(数字0代表结束):n); p=Created(); head-next=p; p-prev=head; printed(head); int num; printf(输入要访问的元素(数字0代表访问结束):n); for(;i!=0;) scanf(%d,&num); i=num; p=Locate(head,num); printf(根据访问频度重新排序后的链表变为:n); printed(head-next);voi

10、d main() int n; Sqlist head1,head2; DNode *head3; printf(*n); printf(0.退出程序。n); printf(1.删除两个链表中的不同元素。n); printf(2.猴子选大王的问题.n); printf(3.带有表头结点的非循环双向链表问题。n); printf(*n); while(n!=0) printf(请选择:); scanf(%d,&n); switch(n) case 0:printf(退出系统!n); exit(0);break; case 1:CreateSame(head1,head2); break; cas

11、e 2:Chooseking(head3);break; case 3:LocateLine();break; 1.4 运行结果 程序执行后出现下图样式的菜单:新建顺序表:删除顺序表中所要求的元素:拆分顺序表:判别括号是否配对:正确的匹配:建立一个循环队列:向循环队列中插入元素:从循环队列中删除元素:退出操作:实验一分录2.1 实验名称单链表的基本运算2.2 实验内容 (1) 假设有两个按元素值递增次序排列的线性表A和B,均以单链表形式存储,里面的大部分元素对应相等,请删除一些元素(A中有而B中没有,或B中有而A中没有),使得两个有序表中保留下来的元素对应相等。比如,A中元素为(1,3,5,8

12、,10,13,18),B中元素为(1,3,6,8,9,10,13,15),则删除元素后A、B里的元素为(1,3,8,10,13)。(2) 猴子选大王。n只猴子围成一圈,从1到m报数,报m的猴子出局。余下的猴子从第m+1只开始继续从1到m报数,报m的猴子出局。第n只猴子报数后,第1只猴子接着报数(因为围成了圈)。待整个圈只剩下一只猴子时,该猴子即为大王。n和m由用户输入,请输出当选大王的猴子的编号。(3) 设有一头指针为L的带有表头结点的非循环双向链表,其每个结点中除有prev(前驱指针),data(数据)和next(后继指针)域外,还有一个访问频度域freq。在链表被起用前,其值均初始化为零。

13、每当在链表中进行一次Locate(L,x)运算时,令元素值为x的结点中freq域的值增1,并使此链表中结点保持按访问频度非增(递减)的顺序排列,同时最近访问的结点排在频度相同的结点的最后,以便使频繁访问的结点总是靠近表头。试编写符合上述要求的Locate(L,x)运算的算法,该运算为函数过程,返回找到结点的地址,类型为指针型。 (4) 在主函数中设计一个简单的菜单,分别调试上述算法。2.3 实验代码#include#include#define MAXSIZE 100typedef int ElemType;typedef struct list ElemType elemMAXSIZE; i

14、nt length;Sqlist;typedef struct Node ElemType date; struct Node *next;DNode;typedef struct DulNode ElemType date; struct DulNode *prev,*next; int freq;DLinkList;/定义双向链表void Creatlist(Sqlist &L) int i; printf(请输入顺序表的长度:); scanf(%d,&L.length); for(i=0;iL.length;i+) scanf(%d,&L.elemi);void CreateSame(S

15、qlist &L1, Sqlist &L2) int counter=0; Sqlist L3; Creatlist (L1); Creatlist (L2); for(int i=0;iL1.length;i+) for(int j=0;jL2.length;j+) if(L1.elemi=L2.elemj) L3.elemcounter=L1.elemi; counter+; printf(删除相同元素后的链表元素:); for(i=0;icounter;i+) printf(%d ,L3.elemi); printf(n);void Chooseking(DNode *head) int

16、 m,num; printf(请输入猴子的总数:); scanf(%d,&num); printf(出局的猴子所报的号码是:); scanf(%d,&m); DNode *s,*q,*t; int i,counter=0; if(m=1) printf(最后一只猴子是%d号。n,num); else for(i=0;idate=i+1; s-next=NULL; if(i=0) head=s; q=head; else q-next =s; q=q-next; q-next=head; q=head; while(q-next!=q) counter+; if(counter=m-1) t=q

17、-next; q-next=t-next; counter=0; free(t); q=q-next; printf(最后一只猴子是%d号。n,q-date); DLinkList *Created() int num=0; DLinkList *head; DLinkList *p1,*p2; p1=p2=(DLinkList *)malloc(sizeof (DLinkList); scanf(%d,&p1-date); head=NULL; while(p1-date!=0) num+; if(num=1) head=p1; else p2-next=p1; p1-prev=p2; p2

18、=p1; p1=(DLinkList *)malloc(sizeof (DLinkList); scanf(%d,&p1-date); p2-next=NULL; return(head);void printed(DLinkList* head) DLinkList *p=head; while(p!=NULL) printf(%d ,p-date); p=p-next; printf(n);DLinkList *Locate(DLinkList *L, int x) DLinkList *p=L-next; DLinkList *q; while(p & (p-date!=x) p=p-n

19、ext; if(!p) return NULL; else p-freq+; q=p-prev; while( (q!=L) & (q-freq)freq) q=q-prev; if(q!=p-prev) p-prev-next=p-next; if(p-next) p-next-prev=p-prev; p-prev=q; p-next=q-next; q-next=p; p-next-prev=p; return p; void LocateLine() DLinkList *p,*head; int i; head=(DLinkList *)malloc(sizeof(DLinkList

20、); head-date=0; printf(输入链表各个结点的值(数字0代表结束):n); p=Created(); head-next=p; p-prev=head; printed(head); int num; printf(输入要访问的元素(数字0代表访问结束):n); for(;i!=0;) scanf(%d,&num); i=num; p=Locate(head,num); printf(根据访问频度重新排序后的链表变为:n); printed(head-next);void main() int n; Sqlist head1,head2; DNode *head3; prin

21、tf(*n); printf(0.退出程序。n); printf(1.删除两个链表中的不同元素。n); printf(2.猴子选大王的问题.n); printf(3.带有表头结点的非循环双向链表问题。n); printf(*n); while(n!=0) printf(请选择:); scanf(%d,&n); switch(n) case 0:printf(退出系统!n); exit(0);break; case 1:CreateSame(head1,head2); break; case 2:Chooseking(head3);break; case 3:LocateLine();break

22、; 2.4 运行结果 程序执行后出现下图样式的菜单:删除两个链表中的不同元素:猴子选大王问题:当所报号码为1时:非循环双向链表的访问频度排序:退出操作: 实验二 栈与队列的基本运算一、实验内容:(1)任意输入一个字符串,按反序输出。要求字符串从键盘随机输入,字符长度不做具体限制。实现时,以链栈为手段。(1)设计一个算法,判定一个字符串是否是对称字符串。若是,则返回1,否则返回0。(2)括号配对检查。试设计一个程序对任意输入的语句或数学表达式,判断其符号是否匹配。若匹配,则返回1;否则返回0。(3)编写递归和非递归程序,计算下列表达式的值 1 n=0 2x n=1 n1 (5)舞伴问题。假设在周

23、末舞会上,男士和女士各自组成一排,跳舞开始的时候,依次从男队和女队上各出一人配成舞伴。若两队初始人数不相同,则较长的那一队中未匹配对者等待下一轮舞曲。现要求写一篇算法模拟上述舞伴配对的问题。 二、程序代码: 1#include#includetypedef char ElemType;typedef struct snode ElemType data; struct snode *next;LinkSTACK;void InitStack(LinkSTACK *top) *top=(LinkSTACK *)malloc(sizeof(LinkSTACK);(*top)-next=NULL;i

24、nt push(LinkSTACK *top,ElemType x) LinkSTACK *s;s=(LinkSTACK *)malloc(sizeof(LinkSTACK);s-data=x;s-next=(*top)-next;(*top)-next=s;return 1;int Empty(LinkSTACK *top) return (*top)-next=NULL?1:0);int Pop(LinkSTACK *top,ElemType *x)LinkSTACK *s;if(Empty(top)printf(Stack is free!n);return 0;s=(*top)-nex

25、t;*x=s-data;(*top)-next=s-next;return 1;void main()char ch;LinkSTACK *top;InitStack(&top);printf(请输入一字串);while(ch=getchar()!=n) push(&top,ch);printf(n);while(!Empty(&top)Pop(&top,&ch);printf(%c,ch); 2#include #include #define MAXSIZE 40typedef char ElemType;typedef struct ElemType dataMAXSIZE; int top;STACK;void InitStack(STACK *S) S-top=-1;int Push(STACK *S,ElemType x) if(S-top=MAXSIZE-1) printf(St

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

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