姓名刘茂 学号222012315220062
实验项目栈与队列的顺序表示和实现实验报告实验内容编写一个程序实现顺序栈和顺序队列的各种基本运算,并完成以下操作:
初始化顺序队列;
建立顺序队列;
入队;
出队;
判断队列是否为空;
取队头元素;
遍历队列;
初始化顺序栈;
插入元素;
删除栈顶元素;
取栈顶元素;
遍历顺序栈;
13、置空顺序栈;算法设计与程序实现:算法分析 1、对于顺序栈和顺序队列,都是采用一组地址连续的存储单元一次存放自栈底到栈顶或从队列头到队列尾的数据元素。
2、对于栈,设栈顶指针为top,栈底指针为base。用top=0或top=base表示栈空。对于队列,设指针front为队列头指针,设指针rear表示队列尾指针。用front=rear=0表示空队列。
3、初始化栈和队列时,令top=0或front=rear=0,将栈或队列置空。
4、每入栈一个数据元素,指针top增加1,出栈时,指针top减小1。每当插入新的队尾数据元素时,指针rear增加1,每当删除一个队头数据元素时,指针front减小1。核心程序//顺序队列
#include
#include
#include
#define MAXNUM 100
#define ElemType int
#define TRUE 1
#define FALSE 0
//定义队列的顺序存储结构
typedef struct
{
ElemType queue[MAXNUM];
int front;
int rear;
}sqqueue;
//初始化顺序队列
int initQueue(sqqueue *q)
{
if(!q)return FALSE;
q->front=-1;
q->rear=-1;
return TRUE;
}
//入队
int append(sqqueue *q,ElemType x)
{if(q->rear>=MAXNUM-1)return FALSE
{q->rear++;
q->queue[q->rear]=x;
return TRUE;
}
//出队
ElemType Delete(sqqueue *q)
{ElemType x;
if(q->front==q->rear)
{printf("队列空!\n");return 0;}
x=q->queue[++q->front];
printf("队头元素%d出队!\n",x);
return x;
}
//判断队列是否为空
int Empty(sqqueue *q)
{if(q->front==q->rear)return TRUE;
return FALSE;}
//获取队头元素
int gethead(sqqueue *q)
{ElemType x;
if(q->front==q->rear)
{printf("队列空!\n");return 0;}
x=q->queue[q->front+1];printf("\n队头元素:%d出队\n",x);
return x;
}
//遍历队
void display(sqqueue *q)
{int s;
s=q->front;
if(q->front==q->rear)
printf("队列为空!\n");
else
{printf("\n顺序队列依次为:");
while(srear)
{s=s+1;
printf("%dqueue[s]);
}
printf("\n");
printf("顺序队列队尾元素所在位置为:rear=%d\n,q->rear);
printf("书序队列队头元素所在位置为:front=%d\n,q->front);
}}
//建立顺序队列
void Setsqqueue(sqqueue *q)
{int n,i,m;
printf("\n请输入顺序队列的长度:");
scanf("%d",&n);
printf("\n请依次输入顺序队列的元素值:\n");
for(i=0;i
{scanf("%d",&m);
append(q,m);}
}
//主函数
void main()
{sqqueue *head;
int x,select;
head=(squeue*)malloc(sizeof(squeue));
printf("\n第一次使用必须初始化!\n");
do{
printf("