河南工业大学实验报告_实验一 线性结构(二)——栈和队列的操作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
xxxx大学实验报告
课程名称数据结构实验项目实验一线性结构(二)——栈和队列的操作
院系信息学院计类系专业班级计类1501 姓名学号
指导老师日期
批改日期成绩
一实验目的
1.熟练掌握栈的存储结构及相关典型操作。
2.熟练掌握队列的存储结构及相关典型操作。
二实验内容及要求
实验内容:
1.建立链式栈,实现栈的初始化、进栈、出栈等典型操作。
2.建立循环队列,实现队列的初始化、进队、出队等典型操作。
实验要求:
1.键盘输入数据;
2.屏幕输出运行结果。
3.要求记录实验源代码及运行结果。
4.运行环境:VC++6.0
三实验过程及运行结果
1、循环队列
#include
#include
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXQSIZE 100 //最大队列长度
typedef struct
{
int *base; //初始化的动态分配存储空间
int front;
int rear;
}SqQueue;
//初始化队列
int InitQueue(SqQueue Q)
{
Q.base=(int*)malloc(MAXQSIZE*sizeof(int));
if (!Q.base)exit(OVERFLOW); //存储分配失败
Q.front=Q.rear=0;
return OK;
}
//入队操作
int EnQueue(SqQueue Q)
{
int e;
if ((Q.rear+1)%MAXQSIZE==Q.front) //判断队满{
printf("队列已满,不能入队\n");
return ERROR;
}
printf("请输入入队元素:");
scanf("%d",&e);
Q.base[Q.rear]=e; //入队
Q.rear =(Q.rear+1)%MAXQSIZE; //队尾指针后移return OK;
}
//出队操作
int DeQueue(SqQueue Q)
{
int e;
if(Q.front==Q.rear) //判断队空
{
printf("队列已为空\n");
return ERROR;
}
e=Q.base[Q.front]; //队头出队
printf("输出的出队元素为:");
printf("%d\n",e);
Q.front=(Q.front+1)%MAXQSIZE; //队头下表后移return OK;
}
//队列长度
int QueueLength(SqQueue Q)
{
return((Q.rear-Q.front+MAXQSIZE)%MAXQSIZE); }
//队列遍历
int QueueTraverse(SqQueue Q)
{
printf("遍历结果为:");
while (Q.front!=Q.rear)
{
printf("%d ",Q.base[Q.front]);
Q.front=(Q.front+1)%MAXQSIZE;
}
printf ("\n");
return OK;
}
int main()
{
int n;
SqQueue Q;
InitQueue(Q);
printf("*输入1为入队*\n");
printf("*输入2为出队*\n");
printf("*输入3为队列长度*\n");
printf("*输入4为遍历*\n");
printf("*输入0为退出*\n");
printf("*****************\n");
while(scanf("%d",&n),n)
{
switch(n)
{
case 1:EnQueue(Q);break;
case 2:DeQueue(Q);break;
case 3:printf("队列长度为%d\n",QueueLength(Q));break;
case 4:QueueTraverse(Q);break;
}
}
return 0;
}
2、链式栈
#include
#include
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int SElemType;
typedef struct node
{
SElemType data;
struct node *next;}SLnode,*SLinkList;
typedef struct
{
SLinkList top,base;
int len;
}S_LinkList;
//栈的初始化
Status Creat_S(S_LinkList &S)
{
int n;
SLinkList p,q;
printf("栈的初始化,请输入数据,以-1结束:\n");
S.top=(SLinkList )malloc(sizeof(SLnode));
S.base=(SLinkList )malloc(sizeof(SLnode));
S.top->next=S.base;
q=S.base;
S.len=0;
while(scanf("%d",&n),n!=-1)
{
p=(SLinkList )malloc(sizeof(SLnode));
p->data=n;
S.top->next=p; p->next=q;
q=p;
S.len++;
}
q=S.top->next;
while(q!=S.base)
{
printf("%d\n",q->data);
q=q->next;
}
printf("*****\n");
return OK;
}
//进栈
Status Push_S(S_LinkList &S)
{