插入队列时,注意判断队列是否为空
出队列时,注意判断:1 队列是否为空 2 是否是最后一个元素出队列 3 正常出队列
#include<stdio.h>
#include<stdlib.h>
typedef struct list
{
int data;
struct list*next;
}List;
typedef struct queue
{
List*front;
List*rear;
}Queue;
void init_queue(Queue*q)
{
q->front=q->rear=NULL;
}
void inqueue(Queue *q,int data)
{
List*newnode=(List*)malloc(sizeof(List));
newnode->next=NULL;
newnode->data=data;
if(q->front==NULL && q->rear==NULL)//如果是空队列
{
q->front=q->rear=newnode;
}
else//如果队列非空
{
q->rear->next=newnode;
q->rear=newnode;
}
}
int dequeue(Queue*q)
{ List*temp=NULL;
int result;
//如果队列为空
if(q->front==NULL && q->rear==NULL)
{
printf("queue is empty,out of queue failed\n");
return -1;
}
//如果最后一个元素出队列
else if(q->front==q->rear)
{
temp=q->front;
result=temp->data;
q->front=q->rear=NULL;
free(temp);
return result;
}
//非最后元素出队列
else
{
temp=q->front;
result=temp->data;
q->front=q->front->next;
free(temp);
return result;
}
}
int queue_isEmpty(Queue*q)
{
if(q->front==q->rear && q->front==NULL)
return 1;
else
return 0;
}
int main()
{ int i;
Queue*q=(Queue*)malloc(sizeof(Queue));
init_queue(q);
for(i=0;i<10;i++)
inqueue(q,i);
while(!queue_isEmpty(q))
{
printf("%d\n",dequeue(q));
}
}