目录
1.结构体定义
typedef int datatype;
typedef struct queue{
datatype data[N]; //数组
int head; //队头指针
int tail; //队尾指针
} queue_t,*pqueue_t;
2.队列的初始化
/**
***************************************
*@brief : 队列的初始化
*@param :p 队列
*@retval :None
***************************************
*/
void queue_init(pqueue_t *p)
{
*p = (pqueue_t)malloc(sizeof(queue_t));
if(*p==NULL){
perror("malloc error");
return;
}
(*p)->head = 0;
(*p)->tail = 0;
}
3.入队
/**
***************************************
*@brief : 入队
*@param :p 队列
*@param :d 数据
*@retval :int :成功返回0,失败返回-1
***************************************
*/
int enqueue(pqueue_t p,datatype d)
{
//判断是否队满
if((p->tail+1)%N==p->head){
printf("sorry!队满\n");
return -1;
}
//队尾指针往后移动
p->tail = (p->tail+1)%N;
//将数据放入队尾指针指向的位置
p->data[p->tail]=d;
return 0;
}
4.出队
/**
***************************************
*@brief : 出队
*@param :p 队列
*@param :d 数据
*@retval :int :成功返回0,失败返回-1
***************************************
*/
int dequeue(pqueue_t p,datatype *d)
{
//判断队列是否为空
if(p->head==p->tail){
printf("sorry!队空\n");
return -1;
}
//队头指针往后移动
p->head = (p->head+1)%N;
//将队头指针处的数据出队
*d = p->data[p->head];
return 0;
}
5.遍历
/**
***************************************
*@brief : 遍历
*@param :p 队列
*@retval :None
***************************************
*/
void display(pqueue_t p)
{
printf("遍历结果为:\n");
int i;
for(i=(p->head+1)%N;i!=(p->tail+1)%N;i=(i+1)%N)
printf("| %d |\n",p->data[i]);
printf("\n");
}
6.测试--正数入队,负数出队
int main(void)
{
pqueue_t p = NULL;
queue_init(&p);
printf("%p\n",p);
//正数入队,负数出队
datatype d;
int ret;
while(1)
{
ret = scanf("%d",&d);
if(ret==0)
break;
if(d>0){
enqueue(p,d);
}else if(d<0){
if(!dequeue(p,&d))
printf("%d出队了\n",d);
}
display(p);
}
return 0;
}