关闭

数据结构——队列的使用

标签: 数据结构队列循环队列java
778人阅读 评论(0) 收藏 举报
分类:

       队列(Quene)是一种数据结构,与栈不同的是先进先出(FIFO),最先进去的数据最先出来,而栈是一种(LIFO)。quene结构在现实生活中很常见,例如可以用Quene模拟人们在银行里排队,打印机打印文件,飞机等待起飞,互联网上数据包的发送等。

      与stack一样,Quene也有一套自己的操作。插入队列(add、insert),删除(remove、delete)等。Quene有一个tail与head。通常情况add操作是在tail后面添加元素或者数据,而remove操作是在head(队列的头部进行删除数据)。通常Quene有Peek(查看)、add、remove操作。在add数据之前需要提前判断Quene isFull,在remove数据之前需要判断Quene isEmpty。这些都是保证Quene操作安全稳定的措施。

循环队列与缓冲环

      当向队列中不断从对尾(tail)添加数据时,tail指针不断上移(可以理解为向地址增大的方向的移动)。如果队列空间开辟很小,那么添加较少数数据tail指针就到了顶端。之后若是不及时优化处理就会使队列效率很低。因此采用循环队列或者缓冲环能够解决这一问题,缓冲环不仅在应用层使用广泛,特别是通信或者数据传输时使用方便。

这里写图片描述

环绕式处理

      为了避免队列不满却不能插入新数据的问题,可以让tail指针绕回到数组开始的位置。当删除数据项时可以让对头指针head也进行回绕,但是这样一来可能会形成“队列序列折断”现象。不过再继续下去就会恢复到head指针在tail指针下面的情况。在程序设计中表现为:在add数据项之前进行判断isFull,若true则可以使tail=-1;(回到初始状态),删除数据项之前判断isEmpty,若true则可以使head=0。

class QueneDemo
{
    private int n;
    private int nItem=0;
    private int head=0;
    private int tail=-1;
    int[] value=null;
    public QueneDemo(int n)
    {
        value=new int[n];
        this.n=n;
    }
    public void add(int data)
    {
        if(tail==n-1)
        {
            tail=-1;
        }
        value[++tail]=data;
        nItem++;
    }
    public int remove()
    {
        int temp=value[head++];
        if(head==n)
        {
            head=0;
        }
        nItem--;
        return temp;

    }
    public boolean isEmpty()
    {
        return (nItem==0);

    }
    public boolean isFull()
    {
        return (nItem==n);
    }
    public void peek()
    {
        System.out.println(value[head]); 
    }
}

测试类:

public class QueneApp {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        QueneDemo quene=new QueneDemo(5);
        quene.add(10);
        quene.add(20);
        quene.add(30);
        quene.add(40);
        quene.remove();
        quene.remove();
        quene.remove();
        quene.add(70);
        quene.add(80);
        quene.add(90);
        quene.add(80);
       // quene.peek();
        while(!quene.isEmpty())
        {
            int k=quene.remove();
            System.out.println(k);
        }
    }

}

测试结果:

40
70
80
90
80

结果分析

      创建一个长度为5的队列以后向队列添加4个数据项,再从队列head开始删除3个数据,head指针后移三个数据项,再向队列添加了4个数据项,此时已经出现了指针回绕现象,tail指针回到了队列初始位置(tail=-1)。最后输出队列中的数据,在输出队列数据使用remove方法,会出现head指针回到队列初始状态(head=0,head指针回绕),最终队列里面一次从上到存放着数据项是:70、40、80、90 、80,符合先进先出的结构特征。

1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

【数据结构】队列的典型应用

在日常生活和计算中,队列的应用也特别的广泛。 比如分解质因数问题
  • yexiao123098
  • yexiao123098
  • 2014-11-06 23:55
  • 1807

(三)实际项目中数据结构—队列的应用

1.队列:一种数据结构,有非阻塞对列和阻塞对列 特点:先进先出 两种典型操作:队尾添加、队头删除 非阻塞对列:当对列满或空时进行插入或者读取删除操作,抛出异常或者返回false,不对当前线程阻塞,没有...
  • zzw222222
  • zzw222222
  • 2016-10-25 10:06
  • 1364

队列的应用

题目:链式队列的基本操作 将从键盘输入的一系列字符存储到链式队列中,当输入的字符为’0’时,执行出队操作并将出队元素打印到屏幕上;当输入的字符为’@’时,队列中剩余所有元素依次出队并打印到屏幕上;当输...
  • xxiaobaib
  • xxiaobaib
  • 2016-05-23 19:31
  • 1543

数据结构——队列的使用

TOJ 4368 描述 请你定义一个队列,可以对队列进行“入队”、“出队”、“队列输出”等操作。键盘输入一些命令,可以执行上述操作。本题中,队列中元素均为整数。队列的最大元素个数为10...
  • TheWise_lzy
  • TheWise_lzy
  • 2017-01-30 20:26
  • 614

数据结构队列的简单应用--银行排队系统

  • 2012-04-22 13:13
  • 182KB
  • 下载

数据结构之队列(C实现)

一、队列是什么     队列是一种可以实现“先进先出”的存储结构。其实,说简单点,队列就是排队,跟我们日常生活中到银行取钱排队,排队打饭在道理上是一样的。     队列通常可以分为两种类型...
  • l494926429
  • l494926429
  • 2016-08-14 15:34
  • 2672

数据结构之队列

栈是“后进先出”(LIFO,Last InFirst Out)的数据结构,与之相反,队列是“先进先出”(FIFO,First InFirst Out)的数据结构 队列的作用就像售票口前的人们站成的一排...
  • u012152619
  • u012152619
  • 2014-12-08 09:06
  • 2494

数据结构—队列

数据结构—队列 1、队列的定义 队列(Queue)也是一种运算受限的线性表,它的运算限制与栈不同,是两头都有限制,插入只能在表的一端进行(只进不出),而删除只能在表的另一端进行(只出不进),允许插入...
  • u010555622
  • u010555622
  • 2014-08-11 00:50
  • 1216

【数据结构队列的应用】用队列打印杨辉三角

数学中的杨辉三角大家都不陌生,那怎样用程序的方式求n行的杨辉三角呢?方法很多,队列就是其中的一种。下面给出基于队列实现的杨辉三角。 # include # define M 100 typedef ...
  • htq__
  • htq__
  • 2016-03-12 11:00
  • 2621

【数据结构与算法】 队列——队列的应用举例

队列的应用举例1(共2例) 打印杨辉三角                1              1  1   ...
  • TW_345
  • TW_345
  • 2015-11-27 13:16
  • 1194
    个人资料
    • 访问:81382次
    • 积分:1501
    • 等级:
    • 排名:千里之外
    • 原创:68篇
    • 转载:0篇
    • 译文:0篇
    • 评论:46条
    最新评论
    友情链接