一、何为队列?
队列 (Queue) :是一种先进先出 (First In First Out ,简称 FIFO) 的线性表,也是运算受限的线性表。只允许在表的一端进行插入,而在另一端进行删除。
队首 (front) :允许进行删除的一端称为队首。
队尾 (rear) :允许进行插入的一端称为队尾。
队列中没有元素时称为空队列。在空队列中依次加入元素 a 1 , a 2 , …, a n 之后, a 1 是队首元素, a n 是队尾元素。显然退出队列的次序也只能是 a 1 , a 2 , …, a n ,即队列的修改是依先进先出的原则进行的,如图 3-5 所示。
二、基本操作
1、创建新队列
2、判空
3、进队
4、出队
5、清空队
6、获得队头元素
7、遍历队
8、销毁队
9、队长
三、队列的存储实现及运算实现
#include
#include//bool类型头文件
#define MaxSize 50
typedef int ElemType;
//定义循环队列结构体
typedef struct
{
ElemType data[MaxSize];
int front,rear;
} SqQueue; //typedef struct 命名方法 最简洁的 适合入门 http://blog.csdn.net/jianxiong8814/article/details/1556589
//初始化
void InitQueue(SqQueue *Q)
{
(*Q).rear = (*Q).front = 0;
}
//判断队列是否为空
bool isEmpty(SqQueue *Q)
{
if((*Q).rear == (*Q).front)
return true;
else
return false;
}
//入队操作
bool EnQueue(SqQueue *Q)
{
if((*Q).rear+1%MaxSize == (*Q).front)
return false;
ElemType m;
printf("请输入要输入的数据:");
scanf("%d",&m);
(*Q).rear = ((*Q).rear+1)%MaxSize;
(*Q).data[(*Q).rear] = m;
printf("%4d",(*Q).data[(*Q).rear]);
printf("\n");
//用于显示入队数据
return true;
}
//出队操作
bool DeQueue(SqQueue *Q,ElemType *x)
{
if(isEmpty(Q))
{
printf("该队列为空\n\n");
return false;
}
(*Q).front = ((*Q).front+1)%MaxSize;
*x = (*Q).data[(*Q).front];
printf("读出的数据为:");
printf("%d\n",*x);
//用于显示出队数据
return true;
}
int main()
{
SqQueue q;
ElemType x,n;
InitQueue(&q);
while(1)
//下面是用户操作菜单
{
printf(" 主菜单\n");
printf(" -----------------\n");
printf(" 0---结束\n");
printf(" 1-----插入\n");
printf(" 2-------读出\n");
printf("请选择0--2:");
scanf("%d",&n);
switch(n)
{
case 0:
return 0;
case 1:
EnQueue(&q);
break;
case 2:
DeQueue(&q,&x);
break;
}
}
return 0;
}
小编推荐一个学C语言/C++的学习裙【 六六六,二九五,四九八 】,邀请码(怀念c),无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!
网友评论