队列(链式)

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

#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);//打印队列
}

执行结果如下图:

队列(链式)

时间: 2024-10-06 00:01:48

队列(链式)的相关文章

队列链式存储 - 设计与实现 - API函数

队列相关基础内容参我的博文:队列顺序存储 - 设计与实现 - API函数 队列也是一种特殊的线性表:可以用线性表链式存储来模拟队列的链式存储. 主要代码: // linkqueue.h // 队列链式存储API声明 #ifndef _LINKQUEUE_H_ #define _LINKQUEUE_H_ typedef void LinkQueue; // 创建队列 LinkQueue* LinkQueue_Create(); // 销毁队列 void LinkQueue_Destroy(Link

数据结构之队列——链式存储结构(php代码实现)

<?php class QNode{     public  $data;     public  $next;     public function __construct($data){         $this->data=$data;         $this->next=null;     } } class LinkQueue{ //链队列包含头结点,实例化时,此队列为空     private $data;     private $next;     private

队列——链式队列

原文地址:http://blog.csdn.net/hguisu/article/details/7674195 1 #include "stdafx.h" 2 #include "stdlib.h" 3 #include <stdio.h> 4 #include <iostream> 5 using namespace std; 6 7 #define TRUE 1 8 #define FALSE 0 9 #define OK 1 10 #

【数据结构-队列】链式队列

关于链式队列 链式队列又称为链队,是使用单链表实现的,需要一个头指针一个尾指针 结构图: 链队需要的元素组成 /*链式队列的每一个节点*/ struct node{ int data;//存储数据 struct node *next;//指向下一个节点的指针 }; /*链式队列*/ typedef struct{ struct node *head;//头指针 struct node *tail;//尾指针 }LinkedQueue; 创建一个带头节点的空队列 创建一个节点p 将p节点的next

队列的链式实现

队列的链式实现: 在这个队列里面:r 为低, f 为顶 //队列(链式) #include <iostream> using namespace std; typedef int DataType; struct QNode { DataType data; struct QNode *link; }; typedef struct QNode *PNode; //r为低 f为顶 struct LinkQueue { PNode f; PNode r; }; typedef struct Li

链式队列总结

基本数据结构之-链式队列 链式队列就是一个操作受到限制的单链表,学会了单链表再来写这个就是轻松加愉快,但是貌似我去用了两个小时搞定,主要是基础差! 队列的基本操作就是入栈和出栈,还可以看到对头和对尾 如果维护了长度参数,那么也可以返回一个长度 不说理论了,直接上代码吧! 首先定义基本数据结构的结构体: typedef struct _LINKQUEUENODE { struct _LINKQUEUENODE *next; }LinkQueueNode; typedef struct _LINKQ

大话数据结构----循环队列和链式队列

队列(Queue) 是只允许在一端进行插入操作,而在另一端进行删除操作的线性表 队列的特点就是:先进先出,和生活中排队的例子是很先进的,排队的目的不就是先到先得吗. 生活中的队列相当于顺序存储的队列,在火车站排队买票,前面的人买完票走了,后面的人一个一个往前移一位,这是很正常的事情,而计算机中队列队列第一个元素出去了,后面的元素一个一个往前移,这是一件很降低效率的一件事.为了解决这种效率问题,计算机采用循环队列的方式操作队数据. 循环队列 队列的头尾相接的顺序存储结构称为循环队列. 1.首先循环

队列的链式存储结构及实现

ref : https://blog.csdn.net/qq_29542611/article/details/78907339 队列的链式存储结构,其实就是线性表的单链表,只不过它只是尾进头出而已,我们把它简称为链队列.为了操作上的方便,我们将队头指针指向链队列的头结点,而队尾指针指向终端节点.如果 空队列时,front和rear都指向头结点. 入队操作: 在队尾添加元素,先将队尾元素的next指向添加的元素,然后将队尾指针重新指向新的队尾即可. 出队操作: 头结结点指向的结点即为队头结点,出

3-7-队列的链式存储-栈和队列-第3章-《数据结构》课本源码-严蔚敏吴伟民版

课本源码部分 第3章  栈和队列 - 队列的链式存储 ——<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑        本源码引入的文件  链接? Status.h        相关测试数据下载  链接? 无数据    

数据结构Java实现07----队列:顺序队列&amp;顺序循环队列、链式队列、顺序优先队列

数据结构Java实现07----队列:顺序队列&顺序循环队列.链式队列.顺序优先队列 一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其另一端进行删除操作. 队列中允许进行插入操作的一端称为队尾,允许进行删除操作的一端称为队头.队列的插入操作通常称作入队列,队列的删除操作通常称作出队列. 下图是一个依次向队列中插入数据元素a0,a1,...,an-