数据结构::队列

队列
限定只允许在表的一端插入,另一端删除,具有先进先出特点的线性表
队尾:允许插入的一端
队头:允计删除的一端
应用:凡是对数据的处理具有“先进先出”的特点,都可以用队列这种数据结构来操作。
循环队列
队尾插入信息并移动指针rear
队头取走信息并移动指针front
缓冲区有信息 rear与front不相等,有可能大于或小于 缓冲区无信息 rear
== front
/*=========================================================================
  工程名称:    通过链表管理队列 
  功能描述:    通过链表管理队列,,向循环队列中加入消息
  程序分析:    与栈不同的是,队列的指针域应该是向后顺序指的,主要是靠移动队头队尾指针进行操作  
=========================================================================*/
 
#include <stdio.h>
#include <stdlib.h>
 
typedef  struct Qnode
{
    int  data;
    struct Qnode *next;
}Qnode;
 
Qnode  *front;      //队头指针
Qnode  *rear;       //队尾指针
 
int EnQueue( int *e)
{
    Qnode *p;
    p=(Qnode *)malloc(sizeof(Qnode));
 
    p->data=*e;         //将数据加入到队列中
    p->next=NULL;       //队尾指向NULL
    rear->next=p;       //调整队尾指针位置,为下一次压栈做准备
    rear=p;
    return  1;
}
 
 
 
int DeQueue( int *e)
{
    Qnode *p;
    if(front==rear)
        return 0;           //队空
 
    p=front->next;          //获得出队指针
    *e=p->data;             //将待出队节点的数据取出
    front->next= p->next;   //调整对头指针,为下次出队做准备
 
    if(p == rear)           //若队头指针追上队尾指针,调整队头指针,此时队空
        rear = front;
 
    free(p);                //释放已出队数据
    return 1;
}
 
int main()
{
    int a = 11;
    int c = 12;
    int b = 0;
    rear=front=(Qnode *)malloc(sizeof(Qnode));
    EnQueue(&a);        //插入队列
    EnQueue(&c);        //插入队列
 
    DeQueue(&b);        //弹出队列
    printf("%d
",b);
DeQueue(
&b); //弹出队列 printf("%d ",b); }
原文地址:https://www.cnblogs.com/osbreak/p/14527227.html