队列一般用链式结构。所谓的链式结构的队列,就是在单链表的基础上进行再封装,从而使其成为队列。其用法类似与单链表,也与栈相似,;但是它与栈不同的是它遵循与栈相反的“先进先出”原则。
#include <stdio.h>
#include <stdlib.h>
typedef struct QNode//建立一个单链表结点
{
int data;
struct QNode *next;
} QNode, *QueuePrt;
typedef struct//建立头指针和尾指针
{
QueuePrt front, rear;
}LinkQueue;
void initQueue(LinkQueue *q)//初始化队列
{
q->front =q->rear = (QueuePrt)malloc(sizeof(QNode));//为头结点申请内存
q->front->next = NULL;
}
void InsertQueue(LinkQueue *q, int n)//入队操作
{
QueuePrt p;
printf("请输入元素:");
while(n--)
{
p = (QueuePrt)malloc(sizeof(QNode));
if( p == NULL )
exit(0);
scanf("%d",&p->data);
p->next = NULL;//最后一个元素指向NULL
q->rear->next = p;
q->rear = p;//尾指针指向p
}
}
void DeleteQueue(LinkQueue *q)//出队操作
{
QueuePrt p;
while(q->front->next != q->rear){//判断是否为剩余一个
p = q->front->next;
printf("%d ",p->data);
q->front->next = p->next;
free(p);
}
p = q->front->next;
printf("%d\n",p->data);
q->front->next = p->next;
free(p);
}
/*
销毁一个队列
void DestroyQueue(LinkQueue *q)
{
while(q->front){
q->rear = q->front->next;
free(q->front);
q->front = q->rear;
}
}
*/
int main()
{
int n;
LinkQueue l;
printf("请输入元素的个数:");
scanf("%d",&n);
initQueue(&l);
InsertQueue(&l,n);
printf("你输入的元素为:");
DeleteQueue(&l);
return 0;
}