本文写于本人小白入门之时,开始时举步难行,找了不少度娘、博客仍觉得不明确,走了许多的弯路,终于掌握了一些皮毛之见。自我总结了一些东西,个人认为是比较容易理解,以供大伙和个人学习,若有不正确之处恳请各位大神指出!
队列(queue)的结构是“先进先出”,和排队一个道理,谁先排队谁就轮到谁先。其实队列和栈都有一些相同点都可以用数组、指针、引用等方法创建,本文将只以指针为例,有兴趣的朋友可见本人的文章《栈的实现-简明易懂的2种方法》来试试队列用数组实现的效果。
指针传参实现:
本代码数据存储量为length-2,Key[0]在循环队列中被本人跳过key[99]则用作循环的跳点。
在本文中,为了方便理解,创建的队的存储量只有length-2,可以在代码上修改和调整就可以实现存储量为length。
#include<stdio.h>
#define length 100
typedef struct queue
{
int head;
int tail;
int key[length];
}queue;
void enterqueue(queue *p,int x)
{
if(p->tail==length-1)
p->tail=1;
else
{
p->key[p->tail]=x;
p->tail++;
}
}
void quitqueue(queue *p)
{
if(p->head==length-1)
p->head=1;
else
{
printf("%d\n",p->key[p->head]);
p->head++;
}
}
int main()
{
queue q;
q.tail=1;
q.head=1;
enterqueue(&q, 1);
enterqueue(&q, 3);
enterqueue(&q, 5);
enterqueue(&q, 7);
quitqueue(&q);
quitqueue(&q);
quitqueue(&q);
return 0;
}