实验二 栈和队列
一、 实验目的
1.熟悉栈和队列的顺序和链式存储结构
2.掌握栈和队列的基本运算
3.能够利用栈和队列的基本运算完成栈和队列应用的运算
二、 实验内容
2.假设以数组sequ[m]存放循环队列的元素,同时设变量rear和quelen 分别指示循环队列中队尾元素的位置和内含元素的个数。编写实现该循环队列的入队和出队操作的算法。提示:队空的条件:sq->quelen==0;队满的条件:sq->quelen==m。(文件夹:习题10_9)
/*循环队列的结构类型定义.h*/
#define m 5
typedef int datatype;
typedef struct
{ datatype sequ[m];
int rear, quelen;
}qu;
/*循环队列入队出队的主程序文件.cpp*/
#include <stdio.h>
#include<stdlib.h>
#include"循环队列的结构类型定义.h"
#include"置空队.h"
#include"入队.h"
#include"出队.h"
int main()
{ qu *sq;
datatype x, *p;
int key;
/*sq=new qu;*/
sq = (qu*)malloc(sizeof(qu));
setnull(sq);
do
{ /*cout<<"1.Enter Queue 2.Delete Queue -1.Quit:";
cin>>key;
*/
puts("1.Enter Queue 2.Delete Queue -1.Quit:");
scanf("%d",&key);
switch(key)
{ case 1: /*cout<<"Enter the Data:"; cin>>x;*/
puts("Enter the Data:");scanf("%d",&x);
enqueue(sq,x); break;
case 2: p=dequeue(sq);
if(p!=NULL) /*cout<<*p<<endl;*/
printf("%d/n",*p);
break;
case -1: exit(0);
}
}while(1);
return 0;
}
/*该程序输入非数字时将出错*/
/*置空队.h*/
void setnull(qu *sq)
{ sq->rear=m-1;
sq->quelen=0;
}
void enqueue( qu * sq,datatype x)
{
if(sq->quelen==m)
{
printf("队满,入队失败./n");
return;
}
sq->rear=(sq->rear+1)%m;
sq->sequ[sq->rear]=x;
sq->quelen++;
return;
}
datatype* dequeue(qu* sq)
{
datatype *x;
x=(datatype*)malloc(sizeof(datatype));
if(sq->quelen==0)
{
printf("队空,出队失败./n");
return 0;
}
*x=sq->sequ[(sq->rear-sq->quelen+1+m)%m];
sq->quelen--;
return x;
}