• 队列的封装(线性循环队列)


    源代码

    Queue.h

     1 #include<iostream>
     2 using namespace std;
     3 #define QMaxSize 100  //队列最大容量
     4 typedef int   QElemType;//提高程序可读性 
     5 typedef QElemType   Queue_Data;   //队列存储元素类型
     6 typedef struct QueueNode                //存储结构
     7 {
     8     Queue_Data data[QMaxSize];
     9     int front;
    10     int rear;
    11     int count;
    12 }QueueNode,*Que;
    13 class  Queue
    14 {
    15 private:
    16     Que  Q;
    17 public:
    18     Queue();//初始化空的队列
    19     bool EnterQueue(Queue_Data e);// 入队操作
    20     bool DeleteQueue(Queue_Data *e);//出队操作;
    21     bool IsEmpty();//判空
    22     bool IsFull();//判满
    23     void Display();
    24 };
    25 Queue::Queue()
    26     {  
    27         Q=new QueueNode;
    28         Q->front=0;
    29         Q->rear=0;
    30         Q->count=0;
    31     }
    32 bool Queue::EnterQueue(Queue_Data e)
    33 {
    34     if(!IsFull())//如果队列不满的话,增加元素
    35     {
    36         Q->count++;//计数器示数即为队列元素个数
    37         Q->data[Q->rear]=e;//队尾指针所指空间即为下一个入队元素的存放位置
    38         Q->rear=(Q->rear+1)%QMaxSize;//队列的精华
    39         return true;
    40     }
    41     else return false;
    42 }
    43 bool Queue::DeleteQueue(Queue_Data *e)
    44 {
    45     if(!IsEmpty())//如果队列不为空,操作合法
    46     {
    47         *e=Q->data[Q->front];//队首指针指示位置即为要出队元素的位置
    48         Q->front=(Q->front+1)%QMaxSize;//这里容易出错,切记是加一
    49         Q->count--;
    50         return true;
    51     }
    52     else return false;
    53 }
    54 bool Queue::IsEmpty()
    55 {
    56     if(Q->count==0)//判空最简单的一种计数器方法
    57         return true;
    58     else 
    59         return false;
    60 }
    61 bool Queue::IsFull()
    62 {
    63     if(Q->count==QMaxSize)//判满,计数器
    64         return true;
    65     else 
    66         return false;
    67 }
    68 void Queue::Display()
    69 {  
    70     int b;
    71     int p;
    72     b=Q->count;
    73     p=Q->front;
    74     while(b)
    75     {
    76         cout<<Q->data[p]<<endl;
    77         p=(p+1)%QMaxSize;
    78         b--;
    79     }
    80 }

    测试函数

    Main.cpp

    int main()
    {
        Queue q;
        bool t;
        while(true)
        {   
            cout<<"是否入队 "<<endl;
            cout<<"是    1"<<endl;
            cout<<"否    0"<<endl;
            cin>>t;
            if(!t)
            {
                break;
            }
            Queue_Data e;
            cout<<"请输入队元素"<<endl;
            cin>>e;
            if(!q.EnterQueue(e))
               cout<<"Defeat"<<endl;
    
        }
        q.Display();
        while(true)
        {   
            cout<<"是否出队 "<<endl;
            cout<<"是    1"<<endl;
            cout<<"否    0"<<endl;
            cin>>t;
            if(!t)
            {
                break;
            }
            Queue_Data e;
            if(q.DeleteQueue(&e))
               cout<<"出队元素   "<<e<<endl;
            else
                 cout<<"Defeat"<<endl;
        }
        q.Display();
        return 0;
    }

    运行结果

  • 相关阅读:
    CentOS6.5系统服务
    Linux下查看文件内容时去掉空行和#开头的注释行
    sql去重复(RecordNum )
    bootstrap-fileinput使用
    javascript事件失效l
    vs2015里,发布OSGI.NET
    视频允许播放禁止下载
    zTree模糊查询人员姓名:getNodesByParamFuzzy
    OSGI.NET,请求因HTTP状态404 失败:Not Found
    异常
  • 原文地址:https://www.cnblogs.com/Howbin/p/8780018.html
Copyright © 2020-2023  润新知