数组实现队列结构:
相对栈结构要难搞一些,队列的先进先出的,需要一个数组和三个变量,size记录已经进来了多少个元素,不需要其它萌新看不懂的知识。
触底反弹,头尾追逐的感觉。
循环使用数组。
具体解释一下触底反弹:当我们的队头已经到了数组的底,我们就把对头设为数组的第一个元素,对于队尾也是一样。实现了对数组的循环使用。
#include<stdio.h>
#include<stdbool.h>
#define maxsize 10
typedef int datatype;
typedef struct queue
{
datatype arr[maxsize];
int a,b,size;//头、尾、数量
}queue;
queue s;
void init()//初始化
{
s.a=0;
s.b=0;
s.size=0;
}
int Empty()//判空
{
if(s.size==0)return 1;
return 0;
}
int full()//判满
{
if(s.size==maxsize)return 1;
return 0;
}
datatype peek()//查看队头
{
if(s.size!=0)return s.arr[s.a];
printf("queue is null\n");
}
datatype poll()//弹出队头
{
int temp=s.a;
if(s.size!=0)
{
s.size--;
s.a=s.a==maxsize-1? 0 :s.a+1;//触底反弹
return s.arr[temp];
}
printf("queue is null\n");
}
int push(datatype obj)//放入队尾
{
if(s.size!=maxsize)
{
s.size++;
s.arr[s.b]=obj;
s.b=s.b==maxsize-1? 0 : s.b+1;//触底反弹
return 1;
}
printf("queue is full\n");
return 0;
}
//测试
int main()
{
int i;
init();
if(Empty())printf("null\n");
for(i=0;i<20;i++)push(i);
while(!Empty())
{
printf("%d\n",poll());
}
printf("%d",poll());
}