栈的输入与输出方式
//队列:先进先出
//
#include "head.h"
#define SIZE 5
typedef struct queue
{
int *buf; //用于存储数据,整个队列中所有数据都存放在这
int x; //用于记录数据进队列时的下标
int y; //用于记录数据出队列时的下标
int size; //记录当前队列的容量
}QUEUE;
QUEUE*queue init()
{
QUEUE*que=(QUEUE*)malloc (sizeof(QUEUE));
que->buf=(int*)calloc(sizeof(int));
que->x=0;
que->y=0;
que->size=SIZE;
return que;
}
//向队列中存入数据
void queue push(QUEUE*q,int data)
{
int num=q-x%q-size;
q-buf[num]=data;
q->x++; //实际记录的是进入队列的元素个数
}
//从队列中取出数据
void queue pop(QUEUE*q,int*data)
{
//没有进入队列的元素
if(q-x==0)
{
return;
}
int num;
if(q-x>q->size)
{
//当队列中的元素的个数大于q->size时,产生溢出。
//队列头的元素溢出不存在
num=(q->y+q->x-q>size)%q->size;
}
else
{
//没有产生溢出时
num=q-y%q-size;
}
*data=q->buf[num];
q->y++;
}
void queue display(QUEUE*q)
{
for(int i=0;i<q->size;i++)
{
printf("%d",q-buf[i]);
}
printf("\n");
}
int main(int argc,char*argv[])
{
QUEUE*que=queue init();
queue push(que,1);
queue push(que,2);
queue push(que,3);
queue push(que,4);
queue push(que,5);
queue push(que,6);
queue push(que.7);
queue push(que,8);
queue push(que,9);
queue push(que,10);
queue push(que,11);
queue push(que,12);
queue display(que);
int data;
queue pop(que,&data);
printf("%d\n",data);
queue pop(que,&data);
printf("%d\n",data);
queue pop(que,&data);
printf("%d\n",data);
queue display(que);
return 0;
}