zoukankan      html  css  js  c++  java
  • 数据结构.队列

    一、定义

    队列(Queue)是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表。

    二、基本概念

    1.允许删除的一端称为队头(Front)。

    2.允许插入的一端称为队尾(Rear)。

    3.当队列中没有元素时称为空队列。

    4.队列亦称作先进先出(First In First Out)的线性表,简称为FIFO表。

     队列的修改是依先进先出的原则进行的。新来的成员总是加入队尾(即不允许"加塞"),每次
     离开的成员总是队列头上的(不允许中途离队),即当前"最老的"成员离队
    

     1 ///Name:Queue
     2 ///Author:JA
     3 ///Date:2015-3-6
     4 
     5 
     6 
     7 ///单链队列——队列的链式存储结构
     8 typedef  struct QNode{
     9     QElemType data;
    10     struct QNode *next;
    11 
    12 }QNode, *QueuePtr;
    13 typedef struct{
    14     Queue front;         //队头指针
    15     Queue rear;          //队尾指针
    16 }LinkQueue;
    17 
    18 ///基本操作的算法部分
    19 Status InitQueue(LinkQueue *Q){
    20     //构造一个空队列Q
    21     Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));
    22     if (!Q.front) exit(OVERFLOW);
    23     Q.front->next = NULL;
    24     return OK;
    25 }
    26 
    27 Status DestroyQueue(LinkQueue *Q){
    28     //销毁队列
    29     while (Q.front){
    30         Q.rear = Q.front->next;
    31         free(Q.front);
    32         Q.front = Q.rear;
    33     }
    34     return OK;
    35 }
    36 
    37 Status EnQueue(LinkQueue *Q,QElemType e){
    38     //插入元素e为新的队尾元素
    39     p=(QueuePtr)malloc(sizeof(QNode));
    40     if (!p)exit(OVERFLOW);
    41     p->data = e; p->next = NULL;
    42     Q.rear->next = p; 
    43     Q.rear = p;
    44     return OK;
    45 }
    46 
    47 Status DeQueue(LinkQueue *Q,QElemType &e){
    48     //若队列不为空,则删除Q的队头元素,用e返回其值,并返回OK
    49     //否则返回ERROR
    50     if (Q.front = Q.rear) return ERROR;
    51     p = Q.front->next;
    52     e = p->data;
    53     Q.front->next = p->next;
    54     if (Q.rear == p) Q.rear = Q.front;
    55     free(p);
    56     return    OK;
    57 }
    View Code

    三、队列的应用

    1.CPU资源的竞争问题。在具有多个终端的计算机系统中,有多个用户需要使用CPU各自运行自己的程序,它们分别通过各自终端向操作系统提出使用CPU的请求,操作系统按照每个请求在时间上的先后顺序,将其排成一个队列,每次把CPU分配给队头用户使用,当相应的程序运行结束,则令其出队,再把CPU分配给新的队头用户,直到所有用户任务处理完毕。

    2.主机与外部设备之间速度不匹配的问题。以主机和打印机为例来说明,主机输出数据给打印机打印,主机输出数据的速度比打印机打印的速度要快得多,若直接把输出的数据送给打印机打印,由于速度不匹配,显然是不行的。所以解决的方法是设置一个打印数据缓冲区,主机把要打印输出的数据依此写如到这个缓冲区中,写满后就暂停输出,继而去做其它的事情,打印机就从缓冲区中按照先进先出的原则依次取出数据并打印,打印完后再向主机发出请求,主机接到请求后再向缓冲区写入打印数据,这样利用队列既保证了打印数据的正确,又使主机提高了效率。

  • 相关阅读:
    Asp.net2.0 中自定义过滤器对Response内容进行处理 dodo
    自动化测试工具 dodo
    TestDriven.NET 2.0——单元测试的好助手(转) dodo
    JS弹出窗口的运用与技巧 dodo
    ElasticSearch 简介 规格严格
    修改PostgreSQL字段长度导致cached plan must not change result type错误 规格严格
    Linux系统更改时区(转) 规格严格
    mvn编译“Cannot find matching toolchain definitions for the following toolchain types“报错解决方法 规格严格
    ElasticSearch 集群 & 数据备份 & 优化 规格严格
    Elasticsearch黑鸟教程22:索引模板的详细介绍 规格严格
  • 原文地址:https://www.cnblogs.com/joeaaron007/p/4317997.html
Copyright © 2011-2022 走看看