数组实现队列结构:
相对栈结构要难搞一些,队列的先进先出的,需要一个数组和三个变量,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());
}