数据结构2-队列

  队列是可以在它的两端可以进行操作,一端入队列,一端出队列。

  队列中用两个标志来表示队列头和队列尾,front和rear,front指向队列头元素的前一个位置,rear指向队列尾的那个元素。

  用C++实现如下: 

//定义一个队列
#include<iostream>

using namespace std;

const int MAX=5;

class queue
{
private:
    int a[MAX];
    int front,rear;
public:
    queue()
    {
        front=0;
        rear=0;
    }
    ~queue(){}
    bool empty()const;
    bool full()const;
    void InQueue(int);       //入队列
    void OutOfQueue();    //出队列
    void GetFront()const;  //得到队列头元素
};

bool queue::empty()const
{
    return front==rear;
}

bool queue::full()const
{
    return rear==MAX-1;
}

void queue::InQueue(int x)
{
    if(full())
    {
        cout<<"full!"<<endl;
    }
    else
    {
        rear++;
        a[rear]=x;
    }
}

void queue::OutOfQueue()
{
    if(empty())
    {
        cout<<"empty!"<<endl;
    }
    else
    {
        front++;
    }
}

void queue::GetFront()const
{
    if(empty())
    {
        cout<<"empty!"<<endl;
    }
    else
    {
        cout<<a[front+1];
    }
}

int main()
{
    queue a;
    a.GetFront();
    a.InQueue(1);
    a.InQueue(2);
    a.InQueue(3);
    a.InQueue(4);
    a.InQueue(5);
    a.GetFront();
    a.OutOfQueue();
    a.GetFront();
    return 0;
}

  这里只实现了queue最基本的几个功能。由于这种顺序队列,当插入的数据达到MAX-1时,队列就会溢出,为了防止溢出,我们可以用循环队列。

  循环队列,即尾元素的下一个元素为头元素。即rear=MAX-1时,当再有一个元素入队列的时候,rear=0。

  实现代码如下:

//实现一个循环队列
#include<iostream>

using namespace std;

const int MAX=3;

class xhqueue
{
private:
    int a[MAX+1];
    int front,rear;
    int count;
public:
    xhqueue()
    {
        front=0;
        rear=0;
        count=0;
    }
    ~xhqueue(){}
    bool empty()const;
    bool full()const;
    void inq(int);
    void outq();
    void getfront()const;
};

bool xhqueue::empty()const
{
    return count==0;
}

bool xhqueue::full()const
{
    return count==MAX+1;
}

void xhqueue::inq(int x)
{
    if(full())
    {
        cout<<"full!"<<endl;
    }
    else
    {
        rear=(rear+1)%(MAX+1);
        a[rear]=x;
        count++;
    }
}

void xhqueue::outq()
{
    if(empty())
    {
        cout<<"empty!"<<endl;
    }
    else
    {
        front=(front+1)%(MAX+1);
        count--;
    }
}

void xhqueue::getfront()const
{
    if(empty())
    {
        cout<<"empty!"<<endl;
    }
    else
    {
        int j=(front+1)%(MAX+1);
        cout<<a[j];
    }
}

int main()
{
    xhqueue a;
    if(a.empty())
    {
        cout<<"empty!\n";
    }
    a.getfront();
    a.inq(1);
    a.getfront();
    cout<<endl;
    a.inq(2);
    a.getfront();
    cout<<endl;
    a.inq(3);
    a.inq(4);
    a.getfront();
    cout<<endl;
    a.outq();
    a.getfront();
    cout<<endl;
    a.inq(5);
    a.inq(6);
    cout<<endl;
    return 0;
}

  

数据结构2-队列

时间: 2024-07-29 20:20:13

数据结构2-队列的相关文章

简单数据结构之队列模拟

1 /************************************************************************************** 2 * Function : 模拟队列 3 * Create Date : 2014/04/23 4 * Author : NTSK13 5 * Email : [email protected] 6 * Copyright : 欢迎大家和我一起交流学习,转载请保持源文件的完整性. 7 * 任何单位和个人不经本人允许不

数据结构 - 链队列的实行(C语言)

数据结构-链队列的实现 1 链队列的定义 队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出而已, 我们把它简称为链队列.为了操作上的方便,我们将队头指针指向链队列的头结点,而队尾指针指向终端结点,如下图所示. 空队列时,front和rear都指向头结点,如下图所示. 链队列的结构为: typedef int QElemType; /* QElemType类型根据实际情况而定,这里假设为int */ typedef struct QNode /* 结点结构 */ { QElemTy

数据结构 - 顺序队列的实行(C语言)

数据结构-顺序队列的实现 1 顺序队列的定义 线性表有顺序存储和链式存储,队列作为一种特殊的线性表,也同样存在这两种存储方式.我们先来看队列的顺序存储结构. 队列的顺序储存结构:用数组存储队列,为了避免当只有一个元素时,队头和队尾重合使得处理变得麻烦,所以引入两个指针:front指针指向队头元素,rear指针指向队尾元素的下一个位置,当front=rear时,为空队列,结构如下图所示. 假设是长度为5的数组,初始状态,空队列如下图左所示,front与 rear指针均指向下标为0的位置.然后入队a

数据结构之队列and栈总结分析

一.前言: 数据结构中队列和栈也是常见的两个数据结构,队列和栈在实际使用场景上也是相辅相成的,下面简单总结一下,如有不对之处,多多指点交流,谢谢. 二.队列简介 队列顾名思义就是排队的意思,根据我们的实际生活不难理解,排队就是有先后顺序,先到先得,其实在程序数据结构中的队列其效果也是一样,及先进先出.    队列大概有如下一些特性: 1.操作灵活,在初始化时不需要指定其长度,其长度自动增加(默认长度为32) 注:在实际使用中,如果事先能够预估其长度,那么在初始化时指定长度,可以提高效率    

数据结构专题——队列的应用 A1056.Mice and Rice ( 25)

#include <bits/stdc++.h> #include<math.h> #include <string> using namespace std; const int maxn = 1010; struct mouse{ int weight;//质量 int R;//排名 }mouse[maxn]; int main(){ int np,ng,order; scanf("%d%d",&np,&ng); for(int

数据结构之队列【转】

转自http://www.cnblogs.com/kaituorensheng/archive/2013/02/28/2937865.html 队列特性:先进先出(FIFO)——先进队列的元素先出队列.来源于我们生活中的队列(先排队的先办完事). 队列有下面几个操作: InitQueue() ——初始化队列 EnQueue()        ——进队列 DeQueue()        ——出队列 IsQueueEmpty()——判断队列是否为空 IsQueueFull()    ——判断队列是

数据结构之队列c代码实现

一学期的数据结构,总不能毫无收获吧,因为书上的很多代码并不能实现,我一个编程小白可怎么过呢,难得假期有时间,于是我寻求度娘,从四面八方找了些可以编译通过的源码,这一次是队列,后面我还会逐渐补充,如果有什么差错,欢迎大佬们来留言啊. 交一下代码: 1 #include<stdio.h> 2 #include<stdlib.h> 3 #define QUEEN_SIZE 50 4 5 typedef struct SeqQueue 6 { 7 int data[QUEEN_SIZE];

数据结构实践——队列数组

本文是针对数据结构基础系列网络课程(3):栈和队列的实践项目. [项目 - 队列数组] 创建10个队列,分别编号为0-9(处理为队列数组,编号即下标).输入若干个正整数,以数字0作为结束.设输入的值为x,其个位数字的大小为i,则将x插入到编号为i的队列中.最后输出所有的非空队列. 要求将队列处理成链式队列,使用链式队列算法库中定义的数据类型及算法,程序中只包括一个函数(main函数),入队和出队等操作直接在main函数中调用即可. 设程序运行时输入:70 59 90 72 67 88 80 64

数据结构:队列的顺序存储结构【转】

本文转载自:http://blog.csdn.net/jnu_simba/article/details/8841657 队列(Queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表.是一种先进先出的线性表(FIFO).允许插入的一端称为队尾,允许删除的一端称为队头.我们在<栈的顺序存储结构>中发现,栈操作的top指针在Push时增大而在Pop时减小,栈空间是可以重复利用的,而队列的front.rear指针都在一直增大,虽然前面的元素已经出队了,但它所占的存储空间却不能重复利用

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

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