码迷,mamicode.com
首页 > 其他好文 > 详细

队列(链式)

时间:2014-08-08 17:37:06      阅读:257      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   http   color   os   io   for   

队列,是一种先进先出的线性表,它只允许在队头删除,在队尾插入,链式队列和单链表操作类似,但是有队首指针和队尾指针,下面是链式队列的表示和实现:

#include <iostream>
using namespace std;
//队列的链式表现与实现
struct QNode
{
    int data;
    QNode *next;
};
struct LinkQueue
{
    QNode * front;
    QNode * rear;
};

bool InitQueue(LinkQueue &q)
{
    q.front=q.rear=(QNode*)malloc(sizeof(QNode));
    if (!q.front)
    {
        return false;
    }
    q.front->next=NULL;
    return true;
}

bool DestoryQueue(LinkQueue &q)
{
    while(q.front)
    {
        q.rear=q.front->next;
        free(q.front);
        q.front=q.rear;
    }
    return true;
}

//插入元素e 队尾元素
bool EnQueue(LinkQueue &q,int e)
{
    QNode *p=(QNode*)malloc(sizeof(QNode));
    if (!p)
    {
        return false;
    }
    p->data=e;
    p->next=NULL;
    q.rear->next=p;
    q.rear=p;//队尾指针需要移到最后
    return true;
}

bool DeQueue(LinkQueue &q,int &e)
{
    if (q.front==q.rear)
    {
        return false;
    }
    QNode *p = q.front->next;
    e=p->data;
    q.front->next=p->next;
    if (q.rear==p)//队尾指针不能丢 需要指向头结点
    {
        q.rear=q.front;
    }
    free(p);
    return true;
}

void PrintQueue(LinkQueue &q)
{
    if (q.front==q.rear)
    {
        cout<<"sorry ,the queue is empty"<<endl;
        return;
    }
    cout<<"Now print the queue:"<<endl;
    QNode *p=NULL;
    p=q.front->next;
    while(p)
    {
        cout<<p->data<<endl;
        p=p->next;
    }
}

void main()
{
    LinkQueue lq={0};
    if (InitQueue(lq))
    {
        cout<<"Initial Success!"<<endl;
    }
    int ElemNum=0;
    cout<<"请输入要插入元素的个数:";
    cin>>ElemNum;
    int Elem=0;
    for (int i=0;i<ElemNum;i++)
    {
        cout<<"请输入要插入第 "<<i+1<<" 个元素:";
        cin>>Elem;
        if (EnQueue(lq,Elem))
        {
            cout<<"插入成功"<<endl;;
        }
    }
    PrintQueue(lq);//打印队列
    int delnum;
    DeQueue(lq,delnum);//删除第一个元素
    cout<<"the delete num is :"<<delnum<<endl;
    PrintQueue(lq);//打印队列
    DestoryQueue(lq);//销毁队列
    PrintQueue(lq);//打印队列
}

执行结果如下图:

bubuko.com,布布扣

队列(链式),布布扣,bubuko.com

队列(链式)

标签:des   style   blog   http   color   os   io   for   

原文地址:http://www.cnblogs.com/mu-tou-man/p/3899571.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!