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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构实验报告.docx

1、数据结构实验报告数据结构实验报告第四次实验学号:20141060106 姓名:叶佳伟一、实验目的1、复习线性表、栈、队列的逻辑结构、存储结构及基本操作;2、掌握顺序表、(带头结点)单链表、顺序栈、链队列;3、了解有顺表、链栈、循环队列。3、了解有顺表、链栈、循环队列。二、实验内容1、(必做题)假设有序表中数据元素类型是整型,请采用顺序表或(带头结点)单链表实现:( 1) OrderInsert(&L, e, int (*compare)(a, b)/根据有序判定函数compare,在有序表L的适当位置插入元素e;( 2) OrderInput(&L, int (*compare)(a, b)/

2、根据有序判定函数compare,并利用有序插入函数OrderInsert,构造有序表L;( 3) OrderMerge(&La, &Lb, &Lc, int (*compare)()/根据有序判定函数compare,将两个有序表La和Lb归并为一个有序表Lc。2、(必做题)假设栈中数据元素类型是字符型,请采用顺序栈实现栈的以下基本操作:( 1) Status InitStack (&S) /构造空栈S;( 2) Status Push(&S, e) /元素e入栈S;( 3) Status Pop(&S, &e) /栈S出栈,元素为e。3、(必做题)假设队列中数据元素类型是字符型,请采用链队列实

3、现队列的以下基本操作:( 1) Status InitQueue(&Q) /构造空队列Q;( 2) Status EnQueue(&Q, e) /元素e入队列Q;( 3) Status DeQueue (&Q, &e) /队列Q出队列,元素为e。三、算法描述(采用自然语言描述)分别插入第一个链表和第二个链表的数据; 根据有序判定函数compare,将两个有序表La和Lb归并为个有序表。 输出归并后的有序表。2. 构造一个栈的结构体利用函数initstack构造空栈Push函数将元素依次存储到栈里利用pop函数输出栈顶元素3.1 构造Queueptr的结构体2 构造一个队列的结构体3 利用函数I

4、nitQueue构造空队列4 EnQueue函数将元素依次存储到栈里5 利用DeQueue函数输出栈顶元素四、详细设计(画出程序流程图)五、程序代码(给出必要注释)第一题:#include #include typedef struct LNode int date; struct LNode *next; LNode,*Link; typedef struct LinkList Link head; int len; LinkList; int compare (LinkList *L,int e) int Lc=0; Link p; p=L-head; p=p-next; while(p!

5、=NULL) if(ep-date) p=p-next; Lc+; else return Lc; return Lc; void OrderInsert (LinkList *L,int e,int (*compare)() Link temp,p,q; int Lc,i; temp=(Link)malloc(sizeof(LNode); temp-date=e; p=q=L-head; p=p-next; Lc=(*compare)(L,e); if(Lc=L-len) while(q-next!=NULL) q=q-next; q-next=temp; temp-next=NULL; e

6、lse for(i=0; inext;q=q-next; q-next=temp;temp-next=p; +L-len; void OrderMerge (LinkList *La,LinkList *Lb,int (*compare)() int i,Lc=0; Link temp,p,q; q=La-head-next; while(q!=NULL) p=Lb-head; temp=(Link)malloc(sizeof(LNode); temp-date=q-date; Lc=(*compare)(Lb,q-date); if(Lc=Lb-len) while(p-next!=NULL

7、) p=p-next; p-next=temp; temp-next=NULL; else for(i=0; inext; temp-next=p-next; p-next=temp; q=q-next; +Lb-len; LinkList *Initialize (LinkList *NewList) int i; Link temp; NewList=(LinkList *)malloc(2+1)*sizeof(LinkList); for(i=0; idate=0; temp-next=NULL; (NewList+i)-head=temp; (NewList+i)-len=0; ret

8、urn NewList; void Insert (LinkList *NewList) int a,i; char c; printf(在第1个表中插入数据,以空格和回车为间隔,输入”.”对下个表插入数据n); for(i=0; i2; i+) while(1) scanf(%d,&a); c=getchar(); if(c=.) if(ihead-next; while(p!=NULL) printf(%dt,p-date); p=p-next; void Display (LinkList *NewList,void (*Show)() printf(所有有序表如下n); printf(

9、第一个有序表为:n); (*Show)(NewList+0); printf(n); printf(第二个有序表为:n); (*Show)(NewList+1); printf(n); printf(归并后有序表为n); (*Show)(NewList+2); int main() LinkList *NewList=NULL; int i; printf(t 开始插入数据n); NewList=Initialize(NewList); Insert(NewList); for(i=0; i2; i+) OrderMerge (NewList+i,NewList+2,compare); Dis

10、play(NewList,Show); return 0;第二题:#include #include #include #define M 50typedef struct / 定义一个栈结构 int top; int arrayM; Stack;void Init(Stack *s); / 初始化栈的函数 void Push(Stack *s,int data); / 进行压栈操作的函数void Traverse(Stack *s); / 遍历栈函数char Pop(Stack *s); / 进行出栈操作的栈函数void Clear(Stack *s); / 清空栈的函数int main()

11、 Stack s; / 定义一个栈 int i; int num; char data; / 临时保存用户输入的数据 char re_num; / 保存pop函数的返回值 Init(&s); printf(你想输入几个数据:); scanf(%d,&num); for (i=0;inum;i+) printf(第%d个字符:,i+1); scanf(%s,&data); Push(&s,data); Traverse(&s); / 调用遍历函数 printf(你想去掉几个字符: ); scanf(%d,&num); printf(你去掉的字符是:); for (i=0;itop=-1;void

12、 Push(Stack *s,int data) /*进栈*/ if (s-top=M-1)return;/*full*/ s-top+; s-arrays-top=data;void Traverse(Stack *s)/ 遍历栈的函数 int i; for(i=0;itop;i+) printf(%2c,s-arrayi); char Pop(Stack *s)/ 进行出栈操作函数 char x; x=s-arrays-top; s-top-; return x; void Clear(Stack *s)/ 清空栈的函数s-top=-1;第三题:#include#includetypede

13、f void Status;typedef int QElemType;#define STACK_INIT_SIZE 10/初始容量#define STACKINCREMENT 5/容量增量typedef struct QNode QElemType data; struct QNode *next; QNode,*QueuePtr;typedef struct QueuePtr front;/队头指针 QueuePtr rear;/队尾指针LinkQueue;Status InitQueue(LinkQueue &Q) /构造一个空对列Q Q.front=Q.rear=(QueuePtr)

14、malloc(sizeof(QNode); if(!Q.front) exit(-1); Q.front-next=NULL;Status EnQueue(LinkQueue &Q,QElemType e) /插入元素e为对列Q的新元素 QueuePtr p; p=(QueuePtr)malloc(sizeof(QNode); if(!p) printf(OVERFLOW); p-data=e; p-next=NULL; Q.rear-next=p; Q.rear=p;Status DeQueue(LinkQueue &Q,QElemType e) /若对列不空,用e返回其值,并返回OK /否

15、则返回ERROR QueuePtr p; if(Q.front=Q.rear) printf(ERROR); p=Q.front-next; e=p-data; printf(对列中的队头元素为:%dn,e); Q.front-next=p-next; if(Q.rear=p) Q.rear=Q.front; free(p);main() LinkQueue Q;int n,i; QElemType e; InitQueue(Q); printf(请输入队列中要入队列的元素个数:n); scanf(%d,&n); for(i=0;in;i+) printf(队列里的第%d个元素为:,i+1); scanf(%d,&e); EnQueue(Q,e);printf(n); DeQueue(Q,e);六、测试和结果(给出测试用例以及测试结果)第二题: 第三题:七、用户手册(告诉用户如何使用程序)1. 使用Microsoft Visual C+2. 使用Microsoft Visual C+3. 使用Microsoft Visual C+

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

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