zoukankan      html  css  js  c++  java
  • 循环队列-抽象数据类型

    1.初始化队列

    2.获取队列长度

    3.入队

    4.出队

    5.获取循环队列头元素

    6.判断是否为空队列

    7.遍历循环队列

    8.销毁队列

     
    代码
      1 #include<bits/stdc++.h>
      2 using namespace std;
      3 #define MAXQSIZE 100
      4 typedef struct{
      5     int *base;
      6     int front;
      7     int rear;
      8 }SqQueue;
      9 
     10 bool InitQueue(SqQueue &Q)
     11 {
     12     Q.base = (int *)malloc(MAXQSIZE*sizeof(int));
     13     if(!Q.base) exit(-1);
     14     Q.front = Q.rear = 0;
     15     return 1;
     16 } 
     17 
     18 int QueueLength(SqQueue &Q)
     19 {
     20     return (Q.rear - Q.front + MAXQSIZE) % MAXQSIZE;
     21 }
     22 
     23 bool EnQueue(SqQueue &Q,int e)
     24 {
     25     if((Q.rear + 1) % MAXQSIZE == Q.front) return 0;//表示队列已经满了
     26     Q.base[Q.rear] = e;//有很多人这里就一脸懵逼,什么东西,下面解释一下
     27 //Q.base 指向动态分配的数组中的元素。
     28 //a[n] 在C语言中相当于 (a+n),即使 a 是数组,
     29 //也会被转换成指向第一个元素的指针。(T*)a+n,
     30 //得到的是数组里的第 n 个元素的指针。
     31 //数组的元素访问就是按这样的方式实现的。 
     32     Q.rear = (Q.rear + 1) % MAXQSIZE;
     33     return 1;
     34 }
     35 
     36 bool DeQueue(SqQueue &Q,int &e)
     37 {
     38     if(Q.front == Q.rear) return 0;//队列为空一个元素都没有
     39     e = Q.base[Q.front];
     40     Q.front = (Q.front + 1) % MAXQSIZE;
     41     return 1;
     42 } 
     43 
     44 bool GetHead(SqQueue Q,int &e)
     45 {
     46     if(Q.front == Q.rear) return 0;
     47     e = Q.base[Q.front];
     48     return 1;
     49 }
     50 
     51 bool Empty(SqQueue *Q) 
     52 {
     53    if(Q->rear == Q->front)
     54    return 1;
     55    return 0;
     56 }
     57 
     58 void TraverQueue(SqQueue &Q)
     59 {
     60     int cur = Q.front;
     61     while(cur != Q.rear)
     62     {
     63         cout << Q.base[cur] << " ";
     64         cur++;
     65     }
     66     puts("");
     67 }
     68 
     69 void DestroyQueue(SqQueue *Q)  //销毁该队列
     70 {
     71         free(Q->base);
     72         Q->front=Q->rear=0;
     73 }
     74 
     75 int main()
     76 {
     77     SqQueue Q;
     78     InitQueue(Q);
     79     int x;
     80     for(int i = 5;i >= 1;i--)
     81     {
     82         EnQueue(Q,i);
     83     }
     84     TraverQueue(Q);
     85     cout << "Qlength = " << QueueLength(Q) << endl;
     86     bool ok = DeQueue(Q,x);
     87     if(ok)
     88     {
     89         cout << "x = " << x << endl;
     90         TraverQueue(Q);
     91         cout << "After DeQueue Qlength = " << QueueLength(Q) << endl;
     92     }
     93     
     94     ok = GetHead(Q,x);
     95     if(ok)
     96     cout << "Qhead = " << x << endl;
     97     DestroyQueue(&Q);
     98     cout << Q.front << " " << Q.rear << endl;
     99     TraverQueue(Q);//验证是否销毁 
    100     return 0;
    101 }
    View Code
  • 相关阅读:
    VSCode创建自定义代码段
    生命不息,折腾不止 ~ 旧PC改造之家庭影音
    万物互联之~网络编程基础篇
    PyCharm创建自定义代码段(JetBrains系列通用)
    VSCode设置Tab键为4个空格
    Jupyter-Notebook服务器自定义密码
    Jupyter ~ 像写文章般的 Coding (附:同一个ipynb文件,执行多语言代码)
    centos下使用nohup
    在centos中创建nginx启动脚本
    查看centos中的用户和用户组
  • 原文地址:https://www.cnblogs.com/mch5201314/p/11630462.html
Copyright © 2011-2022 走看看