队列正如其名,是一个先入先出的逻辑结构,正如排队一样,排到队尾,从对头离开。这里用到队头、队尾指针。队列和指针十分相似,都是对于输入输出端进行限制的结构,难怪他俩搁在一章。
发现在入队的时候存在一些缺点,空间利用不充分,队尾指针后移造成前面分配空间不可用。
函数列表
void DestroyQueue(SqQueue * s);//销毁队列
bool EmptyQueue(SqQueue * s);//判空
bool enQueue(SqQueue *s,ElemType e);//入队操作
bool dlQueue(SqQueue *s,ElemType e);//出队操作
1.头文件
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MaxSize 50
typedef char ElemType;
2.初始化
typedef struct {
ElemType data[MaxSize];
int front,rear;
}SqQueue;
SqQueue *q;
q = (SqQueue * ) malloc(sizeof(SqQueue));
q -> front = q -> rear = -1;
3.销毁队列
void DestroyQueue(SqQueue * s) {
free(s);
printf("销毁成功\n");
}
4.判空
bool EmptyQueue(SqQueue * s){
if(s -> front == s -> rear){
printf("队列为空\n");
return false;
} else{
printf("队列不为空\n");
return true;
}
}
5.入队
bool enQueue(SqQueue *s,ElemType e){
if(s -> rear == MaxSize - 1){
printf("队列上溢出\n");
return false;
}
s -> rear++;
s -> data[s -> rear] = e;
printf("入队成功\n");
return true;
}
6.出队
bool dlQueue(SqQueue *s,ElemType e){
if(s -> front == s -> rear){
printf("队列空下溢出\n");
return false;
}
s -> front++;
e = s -> data[s -> front];
printf("%c出队成功\n",e);
return true;
}