TCU_ZzR_实验3 栈和队列
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构A
班级:软件二班
学号:1607070212 姓名:张曾然
日期:2017/10/25
实验三栈、队列的实现及简单应用
一、实验目的
1.熟悉理解栈和队列的基本操作。
2.会使用栈和队列的基本操作求解一些实际问题。
二、实验要求
1.根据布置的作业编写源程序,上机验证实验结果;
2.独立做实验,输入、调试所编程序;
3.实验结束后,根据实验报告模板编写实验报告。
三、实验内容和步骤
用Visual C++作为实验开发环境,创建一个Win32 Console Application工程,工程名为你的学号,添加下面文件:
(1)数据结构定义:以seqStackDef.h和cirQueueDef.h为文件名;
(2)基本操作和算法:以seqStackAlgo.h和cirQueueAlgo.h为文件名;
(3)调用基本操作和实现应用的主程序:以stackQueueMain.cpp为文件名。
编写程序完成下列功能,文件seqStackDef.h定义顺序栈的结构体,文件cirQueueDef.h 定义循环队列的结构体,文件seqStackAlgo.h实现栈在下面应用中所需的基本操作,文件cirQueueAlgo.h实现队列在下面应用中所需的基本操作,文件stackQueueMain.cpp中编写以下算法:
源程序:
seqStackDef.h:
#define MAXSIZE 1024 //顺序栈最大长度
typedef char elemtype;//elemtype可以为任意类型,假设为int
typedef struct SequenStack
{
elemtype data[MAXSIZE];//将顺序栈定义为一维数组
int top;
}SequenStack; //顺序栈的结构类型为SequenStack
seqStackAlgo.h:
SequenStack * Init_SequenStack()//申请内存空间
{
SequenStack *S;
S=(SequenStack *) malloc (sizeof(SequenStack));
return S;
}
int SequenStack_Empty(SequenStack *S)//判断栈空
{
if(S->top==-1)
return 1;
else
return 0;
}
int SequenStack_Full(SequenStack *S)//判断栈满
{
if(S->top+1==MAXSIZE)
return 1;
else
return 0;
}
int SequenStack_Length(SequenStack *S)//取顺序栈的长度
{
return(S->top+1);
}
int Push_SequenStack(SequenStack *S,elemtype x)//入栈操作{
if(S->top>=MAXSIZE-1)
{
printf("overflow\n");
return 0;
}
S->top++;
S->data[S->top]=x;
return 1;
}
int Pop_SequenStack(SequenStack *S,elemtype *x)//出栈操作{
if(S->top==-1)
{
printf("overflow\n");
return 0;
}else
{
*x=S->data[S->top];
S->top--;
return 1;
}
}
int GetTop_SequenStack(SequenStack *S,elemtype *x)//取栈顶元素{
if(S->top==-1)
{
printf("overflow\n");
return 0;
}
else
{
*x=S->data[S->top];
return 1;
}
}
cirQueueDef.h:
#define MAXSIZE 1024
//顺序队列最大长度
typedef char elemtype;
typedef struct SequenQueue
{
elemtype data[MAXSIZE];
int front; //定义头指针
int rear; //定义尾指针
}SequenQueue;
cirQueueAlgo.h:
SequenQueue * Init_SequenQueue()//初始化队列
{
SequenQueue *Q;
Q=(SequenQueue *)malloc(sizeof(SequenQueue));
Q->front=0;
Q->rear=0;
return Q;
}
int SequenQueue_Empty(SequenQueue *Q)//判断队空{
if(Q->front==Q->rear)
{return 1;}//空
else
{return 0;}//不空
}
int SequenQueue_Full(SequenQueue *Q)//判断队满{
if((Q->rear+1)%MAXSIZE==Q->front)
{return 1;}
else
{return 0;}
}
int SequenQueue_Length(SequenQueue *Q)//取队列长度