队列的链式实现(单链表)
#include <stdio.h>
struct queue //队列节点信息
{
int val;
struct queue *next;
};
typedef struct queue Queue;
static int queue_len = 0; //计算队列长度
Queue *front, *rear, *head;
void create_queue()
{
head = (Queue*) malloc(sizeof(Queue));
if(!head)
{
puts("create queue failed");
return;
}
front = rear = head;
}
void enter_queue(int num)
{
queue_len++; //入队列,长度加一
Queue *p;
p = (Queue*) malloc(sizeof(Queue));
if(!p)
{
puts("create node failed");
return;
}
p->val = num;
p->next = NULL;
rear->next = p; //入队列
rear = p; //队尾
}
int out_queue()
{
queue_len--; //出队列,长度减一
Queue *p;
int ret;
if(front == rear)
{
puts("queue is empty!");
return;
}
p = front->next;
ret = p->val;
front->next = p->next;
if(p == rear) //若只剩一个元素,删除后,让front=rear
{
rear = front;
}
free(p);
return ret;
}
void destroy_queue() //释放队列
{
Queue *p;
while(head->next != NULL)
{
p = head->next;
head->next = p->next;
free(p);
}
}
int main()
{
create_queue();
enter_queue(5);
out_queue();
destroy_queue();
return 0;
}