


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.数据构造A班级:软件二班学号:1607070212:X曾然日期:2021/10/25实验三 栈、队列的实现及简单应用一、实验目的1. 熟悉理解栈和队列的根本操作。2. 会使用栈和队列的根本操作求解一些实际问题。二、实验要求1. 根据布置的作业编写源程序,上机验证实验结果;2. 独立做实验,输入、调试所编程序;3. 实验完毕后,根据实验报告模板编写实验报告。三、实验内容和步骤用 Visual C+作为实验开发环境,创立一个Win32 Console Application工程,工程名为你的学号,添加下面文件:1数据构造定义:以seqStackDef.h和cirQueueDef.h为文件名; 2
2、根本操作和算法:以seqStackAlgo.h和cirQueueAlgo.h为文件名; 3调用根本操作和实现应用的主程序: 以stackQueueMain.cpp为文件名。 编写程序完成以下功能,文件seqStackDef.h定义顺序栈的构造体,文件cirQueueDef.h定义循环队列的构造体,文件seqStackAlgo.h实现栈在下面应用中所需的根本操作,文件cirQueueAlgo.h实现队列在下面应用中所需的根本操作,文件stackQueueMain.cpp中编写以下算法:源程序:seqStackDef.h:*define MAXSIZE 1024 /顺序栈最大长度typedef c
3、har elemtype;/elemtype可以为任意类型,假设为inttypedef struct SequenStackelemtype dataMAXSIZE;/将顺序栈定义为一维数组int top;SequenStack; /顺序栈的构造类型为SequenStackseqStackAlgo.h:SequenStack * Init_SequenStack()/申请内存空间SequenStack *S;S=(SequenStack *) malloc (sizeof(SequenStack);return S;int SequenStack_Empty(SequenStack *S)/判
4、断栈空if(S->top=-1)return 1;elsereturn 0;int SequenStack_Full(SequenStack *S)/判断栈满if(S->top+1=MAXSIZE)return 1;elsereturn 0;int SequenStack_Length(SequenStack *S)/取顺序栈的长度return(S->top+1);int Push_SequenStack(SequenStack *S,elemtype x)/入栈操作if(S->top>=MAXSIZE-1)printf("overflown"
5、);return 0;S->top+;S->dataS->top=x;return 1;int Pop_SequenStack(SequenStack *S,elemtype *x)/出栈操作if(S->top=-1) printf("overflown");return 0;else *x=S->dataS->top;S->top-;return 1;int GetTop_SequenStack(SequenStack *S,elemtype *x)/取栈顶元素if(S->top=-1) printf("overf
6、lown");return 0;else*x=S->dataS->top;return 1;cirQueueDef.h:*define MAXSIZE 1024/顺序队列最大长度typedef char elemtype;typedef struct SequenQueueelemtype dataMAXSIZE;int front; /定义头指针int rear; /定义尾指针SequenQueue;cirQueueAlgo.h:SequenQueue * Init_SequenQueue()/初始化队列SequenQueue *Q;Q=(SequenQueue *)m
7、alloc(sizeof(SequenQueue);Q->front=0;Q->rear=0;return Q;int SequenQueue_Empty(SequenQueue *Q)/判断队空if(Q->front=Q->rear)return 1;/空elsereturn 0;/不空int SequenQueue_Full(SequenQueue *Q)/判断队满if(Q->rear+1)%MAXSIZE=Q->front)return 1;elsereturn 0;int SequenQueue_Length(SequenQueue *Q)/取队列长
8、度return (Q->rear-Q->front+MAXSIZE)%MAXSIZE);int Enter_SequenQueue(SequenQueue *Q,elemtype x)/元素入队if(SequenQueue_Full(Q)return 0;/队满Q->dataQ->rear = x;Q->rear=(Q->rear+1)%MAXSIZE;return 1;int Delete_SequenQueue(SequenQueue *Q,elemtype *x)/队头元素出队if(Q->rear=Q->front)return 0;/队空
9、else*x=Q->dataQ->front;Q->front=(Q->front+1)%MAXSIZE;return 1;int GetFront_SequenQueue(SequenQueue *Q,elemtype *x)/取队头元素if(Q->rear=Q->front)return 0;/队空else*x=Q->dataQ->front;return 1;1. 函数Conversion实现进制转换。将十进制整数转换为二、八和十六进制数输出,要求用栈实现,栈中数据元素为char型。源程序:*include<stdio.h>*i
10、nclude<stdlib.h>*include"seqStackDef.h"*include"seqStackAlgo.h"*include"cirQueueDef.h"*include"cirQueueAlgo.h"void Conversion(int N,int d);int Inversion(char* a);void main()int N,d;printf("需要转换的十进制数为:");scanf("%d",&N);printf("
11、;n需要转换到几进制:");scanf("%d",&d); Conversion(N,d);void Conversion(int N,int d)elemtype *e,k;e=(elemtype *)malloc(sizeof(elemtype);int y;SequenStack *S=Init_SequenStack();printf("n%d转换到%d进制的数为",N,d);while(N>0)y=N%d;if(y<10)k=y+48;elsek=y+55;Push_SequenStack(S,k);N=N/d;w
12、hile(!SequenStack_Empty(S)Pop_SequenStack(S,e);printf("%c",*e);运行结果截图:2. 函数Inversion实现回文检测,判断字符串是否为回文,例abcba和123321为回文,字符串从键盘输入,要求用栈和队列实现。源程序:*include<stdio.h>*include<stdlib.h>*include"seqStackDef.h"*include"seqStackAlgo.h"*include"cirQueueDef.h"*
13、include"cirQueueAlgo.h"int Inversion(char* a);void main()char str20;int flag;printf("nn判断回文:请输入字符串n");scanf("%s",str);flag=Inversion(str);if(flag=1)printf("您所输入的数是回文");else printf("您所输入的数不是回文");int Inversion(char* a)int i=0;elemtype *x,*y;x=(elemtype *)malloc(sizeof(elemtype);y=(elemtype *)malloc(sizeof(elemtype); SequenStack *s=Init_SequenStack();SequenQueue *q=Init_SequenQueue();while(ai!='0')Push_SequenStack(s,ai);Enter_SequenQueue(q,ai);i+;while(!SequenStack_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 反家暴知识培训系列课件
- 清查情况报告范文
- MySQL教程(新体系-综合应用实例视频)(第4版) 习题-第09章-答案
- 二零二五年度旅游民宿物业一体化管理合同
- 2025年度道路铺砖施工工程保险与理赔合同
- 二零二五年度顺丰速运快递安全运输管理合同
- 2025年度篮球比赛裁判员及教练员选聘合同
- 2025年度汽车制造厂房租赁合同
- 2025年度股权质押与资产证券化合作合同
- 广东省2025年度简易劳动合同制作与备案流程合同
- 医药行业:创新药产业链研究培训框架-20210807-中信建投-79正式版
- 2022四川能投宜宾市叙州电力有限公司招聘试题及答案解析
- 07施工试验计划
- 小学2023-2024学年第二学期道德与法治教研组工作计划
- 地理人教版七年级下册亚洲的地形与河流课件
- 脓毒血症护理查房
- 苏科版七年级数学下册期末复习+10(专题-几何图形的证明)
- 西方经济学(第二版)完整整套教学课件
- 围术期下肢深静脉血栓预防的术中护理
- 《云南澜沧铅矿有限公司勐滨煤矿采矿权价款退还计算说明》
- GB/T 9113.1-2000平面、突面整体钢制管法兰
评论
0/150
提交评论