与栈相似,队列是另一种顺序存储元素的线性数据结构。栈与队列的最大差别在于栈是LIFO(后进先出),而队列是FIFO,即先进先出。
一个完美的队列现实例子:售票亭排队队伍。如果有新人加入,他需要到队尾去排队,而非队首——排在前面的人会先拿到票,然后离开队伍。
Enqueue()——在队列尾部插入元素
Dequeue()——移除队列头部的元素
isEmpty()——如果队列为空,则返回 1
op()——返回队列的第一个元素
#include "stdio.h"
#include "stdlib.h"
#define num 512
typedef int Element;
/*
Enqueue()——在队列尾部插入元素
Dequeue()——移除队列头部的元素
isEmpty()——如果队列为空,则返回trueT
op()——返回队列的第一个元素
*/
struct Queue
{
Element head;
Element tail;
Element Q[num];
Element Q_size;
};
void Enqueue(int a);
void Dequeue();
void Delete_queue();
void Traverse_queue();
void Init_queue();
int isEmpty();
int op();
struct Queue queue;
void main()
{
printf("=======队列========\n");
Init_queue();
printf("初始化完成\r\n");
Traverse_queue();
printf("输入数据-->>\n");
for (int i=0;i<8;i++)
{
Enqueue(i);
}
Enqueue(10);
Traverse_queue();
Dequeue();
Traverse_queue();
printf("OP--->>:%d\n",op());
Traverse_queue();
Delete_queue();
Traverse_queue();
}
void Init_queue()
{
queue.head = queue.tail=0;
queue.Q_size = 0;
}
int isEmpty()
{
if (queue.head == queue.tail)
{
return 1;
}
else
return 0;
}
void Enqueue(int a)
{
if (queue.tail>num)
{
printf("队列溢出\n");
return;
}
else
{
printf("queue.tail:%d", queue.tail);
queue.Q[queue.tail++]=a;
queue.Q_size += 1;
}
}
void Dequeue()
{
if (!isEmpty() == 0)
{
printf("队列为空\n");
return;
}
else
{
queue.Q[queue.head] = 0;
queue.head = queue.head + 1;
queue.Q_size -= 1;
}
}
int op()
{
int q;
if (!isEmpty() == 0)
{
printf("队列为空\n");
return;
}
else
{
q=queue.Q[queue.head];
}
}
void Traverse_queue()
{
if (!isEmpty() == 0)
{
printf("队列为空\n");
return;
}
printf("queue.head--->>%d:\r\n", queue.head);
printf("queue.tail--->>%d:\r\n", queue.tail);
for (int i=queue.head;i<queue.tail;i++)
{
printf("--->>:%d\n",queue.Q[i]);
}
printf("queue length is:%d\n",queue.Q_size);
}
void Delete_queue()
{
int i;
if (!isEmpty() == 0)
{
printf("队列为空\n");
return;
}
for (i = queue.head; i < queue.tail;i++) queue.Q[queue.head]=0;
queue.tail = queue.head;
queue.Q_size = 0;
}