zoukankan      html  css  js  c++  java
  • 队列

    1.队列定义

    • 先进先出first in first out
    • 按照到达的顺序删除元素
    • 所有的插入在表的一端进行,所有的删除在表的另一端
    • 主要元素 : 队头front  队尾rear
    • 主要操作: enQueue  deQueue getFront  isEmpty

    2.实现方式

    • 顺序队列  关键是防止假溢出
    • 链式队列  用单链表方式存储

    顺序队列(采用循环队列实现)

     1 #include<iostream>
     2 using namespace std;
     3 const int QueueSize=100;
     4  
     5 class CirQueue
     6 {
     7     public:
     8         CirQueue()                             //构造函数,置空队列
     9         {
    10             front=rear=0;
    11         }
    12         ~CirQueue(){cout<<"destory";}    //析构函数
    13         void EnQueue(int x);                   //元素x入队
    14         int DeQueue();                         //队头元素出队
    15         int GetQueue();                       //获取队头元素,不删除队头
    16         bool Empty()                          //判断队列是否为空
    17         {
    18             if(front==rear)
    19                 return 1;
    20             else
    21                 return 0;
    22         }
    23     private:
    24         int data[QueueSize];                  //存放队列的数组
    25         int front,rear;                      //头指针与尾指针
    26 };
    27  
    28 void CirQueue::EnQueue(int x)
    29 {
    30     if((rear+1)%QueueSize==front)             //判断队列是否已满
    31         cout<<"queue is full,can't put "<<x<<" into it"<<endl;
    32     else
    33     {
    34         rear=(rear+1)%QueueSize;             //移动尾指针指向下一个空间
    35         data[rear]=x;                        //元素x入队
    36     }
    37 }
    38  
    39 int CirQueue::DeQueue()                    //队头元素出栈     
    40 {
    41     if(Empty())                            //判断队列是否为空
    42         cout<<"queue is empty"<<endl;
    43     else
    44     {
    45         front=(front+1)%QueueSize;        //移动队头指针指向下一个空间,即被删元素所在位置
    46         return data[front];               //返回被删除的元素的值
    47     }
    48 }
    49  
    50 int CirQueue::GetQueue()
    51 {
    52     if(Empty())
    53         cout<<"queue is empty"<<endl;
    54     else
    55     {
    56         return data[(front+1)%QueueSize];
    57     }
    58 }
    59 int main()
    60 {
    61     CirQueue Q;
    62     Q.EnQueue(5);
    63     Q.EnQueue(9);
    64     Q.EnQueue(7);
    65     cout<<Q.DeQueue()<<endl;
    66     cout<<Q.GetQueue()<<endl;
    67     cout<<Q.DeQueue()<<endl;
    68     cout<<Q.DeQueue()<<endl;
    69     Q.DeQueue();
    70     return 0;
    71 }
    View Code
  • 相关阅读:
    指针理解
    http和https区别
    js 日历控件
    Linux 目录详解!(转)
    互换位置输出
    晨时跌荡起伏的心情
    c++冒泡排序
    游标使用
    防止Sql注入
    ssl加密原理
  • 原文地址:https://www.cnblogs.com/wsl96/p/13110701.html
Copyright © 2011-2022 走看看