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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

实验报告3讲解.docx

1、实验报告3讲解数据结构上机实验报告实验三 栈和队列 班 级:13级计本二班 姓 名:杨宴强 学 号:201392130129实验三 栈和队列一、实验目的: 学习顺序栈的基本操作2.学习链栈的基本操作 3.学习循环队列基本操作 4.学习链队列基本操作二、实验内容:顺序栈的基本运算 2.链栈的基本操作 3.循环队列的基本运算 4.链队列的基本运算三、实验步骤及结果:1:顺序栈#includestdio.h#includestdlib.h#define MAXSIZE 20typedef struct char dataMAXSIZE;/栈中元素存储空间 int top;/栈顶指针SeqStack;

2、/顺序栈类型void Init_SeqStack(SeqStack *s)/顺序栈初始化 *s=(SeqStack*)malloc(sizeof(SeqStack);/在主函数中申请栈空间 (*s)-top=-1;/置栈空标志int Empty_SeqStack(SeqStack*s)/判断栈是否为空 if(s-top=-1)/栈为空时 return 1;/返回1 else return 0;/返回0void Push_SeqStack(SeqStack *s,char x)/顺序栈入栈 if(s-top=MAXSIZE-1)/判断是否栈满 printf(Stack is full!n);/栈

3、已满 else s-top+;/s指向下个节点 s-datas-top=x;/元素x压入栈*s中 void Pop_SeqStack(SeqStack *s,char *x)/将栈*s中的栈顶元素出栈并通过参数x返回给主调函数 if(s-top=-1)/栈空返回1 printf(Stack is empty!n);/栈为空 else *x=s-datas-top;/栈顶元素出栈 s-top-;/栈顶指针top-1 void Top_SeqStack(SeqStack *s,char *x)/取顺序栈栈顶元素 if(s-top=-1)/栈空返回1 printf(Stack is empty!n)

4、;/栈为空 else *x=s-datas-top;/取栈顶元素值 void print(SeqStack *s)/顺序栈输出 int i;/定义变量i for(i=0;itop;i+)/判断 printf(%4d,s-datai);/读入数据 printf(n);/输出栈void main() SeqStack *s;/定义指针s char x,*y=&x;/y是指向x的指针,出栈元素经过y传给变量x Init_SeqStack(&s);/顺序栈初始化 if(Empty_SeqStack(s)/判断栈是否为空 printf(Stack is empty!n); printf(Input da

5、ta of stack:n);/顺序栈元素入栈 scanf(%c,&x);/读入数据 while(x!=n)/对x的计数直到n结束 Push_SeqStack(s,x);/x入栈 scanf(%c,&x); printf(Output all data of stack:n);/提示 print(s);/输出顺序栈中的元素 Pop_SeqStack(s,y);/顺序栈元素出栈 printf(Output data of Pop stack:%cn,*y);/输出出栈元素 printf(Output all data of stack:n); print(s);/输出出栈后顺序栈中的元素 Top

6、_SeqStack(s,y);/读取顺序栈栈顶元素 printf(Output data of top stack:%cn,*y);/输出读出的栈顶元素 printf(Output all data of stack:n); print(s);/输出当前的顺序栈中的元素2链栈#include#includetypedef struct node char data; struct node*next;StackNode;/链栈元素类型void Init_LinkStack(StackNode*s)/链栈初始化 *s=NULL;int Empty_LinkStack(StackNode*s)/判

7、断链栈是否为空 if(s=NULL) return 1; else return 0;void Push_LinkStack(StackNode*top,char x)/链栈元素入栈 StackNode*p; p=(StackNode*)malloc(sizeof(StackNode);/生成存储空间 p-data=x; p-next=*top;/新生成的栈顶元素*p其后继为原栈顶元素*top *top=p;/栈顶指针*top指向新的栈顶元素*pvoid Pop_LinkStack(StackNode*top,char*x)/链栈元素出栈 StackNode*p; if(*top=NULL)

8、printf(Stack is empty!n);/栈空 else *x=(*top)-data;/栈顶元素经指针x传给对应的变量 p=*top; *top=(*top)-next; free(p); void print(StackNode*p)/链栈输出 while(p!=NULL) printf(%c,p-data); p=p-next; printf(n);void main() StackNode*s; char x,*y=&x;/出栈元素经指针y传给x Init_LinkStack(&s);/链栈初始化 if(Empty_LinkStack(s)/判断链栈是否为空 printf(S

9、tack is empty!n); printf(Input any string:n);/链栈元素入栈 scanf(%c,&x); while(x!=n) Push_LinkStack(&s,x); scanf(%c,&x); printf(Output string:n);/链栈输出 print(s); printf(Output stack:n); Pop_LinkStack(&s,y); /链栈元素出栈 printf(Element of Output stack is %cn,*y);/输出出栈元素 printf(Output string:n); print(s);/链栈输出3循环

10、队列#includestdio.h#includestdlib.h#define MAXSIZE 20typedef struct char dataMAXSIZE;/队头元素存储空间 int rear,front;/队尾和队头指针SeQueue;/顺序队列类型void Int_SeQueue(SeQueue*q)/置空队 *q=(SeQueue*)malloc(sizeof(SeQueue);/生成循环队列的存储空间 (*q)-front=0;/队尾与队头指针相等则为队空 (*q)-rear=0;int Empty_SeQueue(SeQueue*q)/判队空 if(q-front=q-re

11、ar)/判断是否队空 return 1;/队空 else return 0;/队不空void In_SeQueue(SeQueue*q,char x)/元素入队 if(q-rear+1)%MAXSIZE=q-front)/判断是否队满 printf(Queue is full!n);/队满,入队失败 else q-rear=(q-rear+1)%MAXSIZE;/队尾指针加1 q-dataq-rear=x;/将元素X入队 void Out_SeQueue(SeQueue*q,char*x)/元素出队 if(q-front=q-rear)/判断是否队空 printf(Queue is empty

12、);/队空,出队失败 else q-front=(q-front+1)%MAXSIZE;/队头指针加1 *x=q-dataq-front;/队头元素出对并由x返回队头元素值 void print(SeQueue*q)/循环队列输出 int i;/定义变量i i=(q-front+1)%MAXSIZE;/i入队 while(i!=q-rear)/判断队空 printf(%4cn,q-datai);/读入数据信息 i=(i+1)%MAXSIZE;/逐步累加 printf(%4cn,q-datai);/输出void main() SeQueue*q;/定义指针q char x,*y=&x;/出对元素

13、经指针y传给x Int_SeQueue(&q);/循环队列初始化 if(Empty_SeQueue(q)/判队空 printf(Queue is empty!n);/提示 printf(Input any string:n);/给循环队列输入元素 scanf(%c,&x); while(x!=n) In_SeQueue(q,x);/元素入队 scanf(%c,&x); printf(Output elements of Queue:n); print(q);/循环队列输出 printf(Output Queue:n); Out_SeQueue(q,y);/循环队列元素出队 printf(Ele

14、ment of Output Queue is %cn,*y);/输出出队元素 printf(Output elements of Queue:n); print(q);/输出出队后的循环队列元素4.链队列#includestdio.h#includestdlib.h#define MAXSIZE 30typedef struct node char data; struct node *next;QNode;/链队列结点类型typedef struct QNode *front,*rear;/将头、尾指针纳入到一个结构体的链队列LQueue;/链队列类型void Init_LQueue(LQ

15、ueue *q)/创建一个带头结点的空队列 QNode *p; *q=(LQueue*)malloc(sizeof(LQueue);/申请带头、尾指针的结点 p=(QNode*)malloc(sizeof(QNode);/申请链队列的头结点 p-next=NULL;/头结点的next指针置为空 (*q)-front=p;/队头指针指向头结点 (*q)-rear=p;/队尾指针指向头结点int Empty_LQueue(LQueue *q)/判队空 if(q-front=q-rear) return 1;/队为空 else return 0;void In_LQueue(LQueue *q,ch

16、ar x)/入队 QNode *p; p=(QNode*)malloc(sizeof(QNode);/申请新链队列结点 p-data=x; p-next=NULL;/新结点作为队尾结点时其next域为空 q-rear-next=p;/将新结点*p链到原队尾结点之后 q-rear=p;/是队尾指针指向新的队尾结点*pvoid Out_LQueue(LQueue *q,char *x)/出队 QNode *p; if(Empty_LQueue(q) printf(Queue is empty!n);/队空,出队失败 else p=q-front-next;/指针p指向队头结点 q-front-ne

17、xt=p-next;/头结点的next指针指向链队列的第二个数据结点 *x=p-data;/将删除的队头结点数据经由指针x返回 free(p); if(q-front-next=NULL)/出队后队为空,则置为空队列 q-rear=q-front; void print(LQueue *q)/链队列输出 QNode *p; p=q-front-next; while(p!=NULL) printf(%4c,p-data); p=p-next; printf(n);void main() LQueue *q; char x,*y=&x;/出队元素经指针y传给x Init_LQueue(&q);/

18、链队列初始化 if(Empty_LQueue(q)/判队空 printf(Queue is empty!n); printf(Input any string:n);/给链队列输入元素 scanf(%c,&x); while(x!=n) In_LQueue(q,x); scanf(%c,&x);/元素入队 printf(Output elements of Queue:n); print(q);/链队列输出 printf(Output Queue:n); Out_LQueue(q,y);/元素出队 printf(Element of Output Queue is %cn,*y);/输出出队的元素值 printf(Output elements of Queue:n); print(q);/输出出队后链队列的元素四、实验总结: 通过本次试验,了解了栈和队列的基本操作。从数据结构的定义看,栈和队列也是一种线性表。其与线性表的不同之处在于栈和队列的相关运算具有特殊性,只是线性表相关运算的一个子集。一般线性表的上的插入、删除运算不受限制,而栈和队列上的插入、删除运算受某种特殊限制。因此。栈和队列也称为操作受限的线性表。

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

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