循环顺序表实现队列的基本操作
不能插入字符 用%c 存储 老是不能输入字符 改成插入为数字了
准备去温习下字符的知识点 有改动会更新代码 = =
//循环顺序表实现队列的基本操作
#include<stdio.h>
#include<stdlib.h>
#define maxsize 50
#define True 1
#define False 0
//status状态信息定义为bool型
typedef bool status;
//定义队列中的元素数据类型
typedef int ElemType;
//定义队列的结构体类型
typedef struct SqQueue{
ElemType data[maxsize];
int front;//定义队首指正
int rear;//定义队尾指针
};
//顺序队列的基本操作
//队列的初始化
void initqueue(SqQueue &qu){
//栈的初始化代码 栈头和栈尾指向同一个元素0
qu.rear = qu.front=0;
printf("队列的初始化已经完成,请输入您接下来的操作\n");
}
//判断队列是否为空
status isempty(SqQueue qu){
if(qu.rear==qu.front)
// printf("队列空\n");
return True; //1
else
// printf("队列不空\n");
return False; //0
}
//判读队列是否为满
status isfull(SqQueue qu){
if((qu.rear+1)%maxsize==qu.front)
// printf("队列满\n");
return True; //1
else
// printf("队列不满\n");
return False; //0
}
//入队操作
status enqueue(SqQueue &qu,ElemType e){
//队列已满无法入队
if(isfull(qu)==1) //已满,无法入队
return False;
//队列不满可以入队
qu.data[qu.rear]=e;
qu.rear=(qu.rear+1)%maxsize; //队尾指针加一取模
return True;
}
//出队操作
status dequeue(SqQueue &qu,ElemType &e){
//队列为空无法出队
if(isempty(qu)==1) //空:1
return False;
e=qu.data[qu.front];
qu.front=(qu.front+1)%maxsize;
return True;
}
//打印队列中元素
void printfs(SqQueue qu)
{
int i;
printf("length:%d\n",(qu.rear-qu.front+maxsize)%maxsize);
printf("头 ");
for(i=(qu.front)%maxsize;i<(qu.rear)%maxsize;i++){
printf("%d ",qu.data[i]);
}
printf("尾\n");
}
//主函数
int main(){
SqQueue qu; //定义一个顺序队列
ElemType e; //入队的数据元素
int choose;
printf("1.初始化队列\n");
printf("2.判断队列是否为空\n");
printf("3.入队操作\n");
printf("4.出队操作\n");
printf("5.打印队列中元素\n");
for(;;){
printf("请输入您的操作\n");
scanf("%d",&choose);
switch(choose){
case 1:
initqueue(qu); //对顺序队列进行初始化
break;
case 2:
if(isempty(qu)==1)
printf("队列空\n");
else
printf("队列中存在元素\n");
break;
case 3: //入队列操作
printf("请输入您需要入队列的元素\n");
scanf("%d",&e);
enqueue(qu,e);
break;
case 4: //出队列操作
if(dequeue(qu,e)==1)
printf("出队列成功\n");
else
printf("出队列失败\n");
break;
case 5: //打印队列元素
printfs(qu);
break;
}
}
}