• 数据结构——循环队列


      1 #include<iostream>
      2 #include<stdlib.h>
      3 using namespace std;
      4 
      5 typedef int QElemType;
      6 typedef int Status;
      7 #define MAXSIZE 10
      8 #define OVERFLOW -2
      9 #define OK 1
     10 #define ERROR 0
     11 
     12 //循环队列的存储结构
     13 typedef struct
     14 {
     15     QElemType *base;    //存储空间的基地址
     16     int front;          //头指针
     17     int rear;           //尾指针
     18 }SqQueue;
     19 
     20 //循环队列的初始化
     21 Status InitQueue(SqQueue &Q)
     22 {
     23     Q.base = new QElemType[MAXSIZE];  //为队列分配一个最大容量为MAXSIZE的数组空间
     24 
     25     if (!Q.base)                     //分配失败
     26         exit(OVERFLOW);
     27 
     28     Q.front = Q.rear = 0;               //头指针和尾指针置为0,对列为空
     29 
     30     return OK;
     31 }
     32 
     33 //队列长度
     34 int QueueLength(SqQueue Q)
     35 {
     36     return (Q.rear - Q.front + MAXSIZE) % MAXSIZE;    //循环队列,取余
     37 }
     38 
     39 //入队
     40 //插入元素e,作为队列Q的新的队尾元素
     41 Status EnQueue(SqQueue &Q, QElemType e)
     42 {
     43     if ((Q.rear + 1) % MAXSIZE == Q.front)     //尾指针在循环意义上加1后等于头指针,表明对满
     44         return ERROR;
     45 
     46     Q.base[Q.rear] = e;                   //新元素插入队尾
     47 
     48     Q.rear = (Q.rear + 1) % MAXSIZE;          //队尾指针加1
     49 
     50     return OK;
     51 }
     52 
     53 //出队
     54 //删除Q的队头元素,用e返回其值
     55 Status DeQueue(SqQueue &Q, QElemType &e)
     56 {
     57     if (Q.front == Q.rear)     //队空
     58         return ERROR;
     59 
     60     e = Q.base[Q.front];      //保存队头元素
     61 
     62     Q.front = (Q.front + 1) % MAXSIZE;    //出队,队头指针加1
     63 
     64     return OK;
     65 }
     66 
     67 //取队头元素
     68 //返回队头元素,不修改头指针
     69 QElemType GetHead(SqQueue Q)
     70 {
     71     if (Q.front != Q.rear)     //队列非空
     72         return Q.base[Q.front];
     73 }
     74 
     75 int main()
     76 {
     77     int i, e;
     78     int len;
     79     SqQueue Q;
     80 
     81     InitQueue(Q);   //初始化一个空队列
     82 
     83     for (i = 0; i < MAXSIZE; i++)
     84         EnQueue(Q, i);       //入队
     85 
     86     len = QueueLength(Q);
     87 
     88     cout << "当前队列情况为:";
     89 
     90     for (i = Q.front; i < Q.rear; i++)
     91     {
     92         cout << Q.base[i] << " ";
     93     }
     94     cout << endl;
     95 
     96     cout << "当前队列里的元素有" << len << "" << endl;
     97 
     98     cout << "当前的队头元素是:" << GetHead(Q) << endl;
     99 
    100     cout << "出队元素有:";
    101     for (i = 0; i < 3; i++)
    102     {
    103         DeQueue(Q, e);   //出队
    104         cout << e << " ";
    105     }
    106     cout << endl;
    107 
    108     len = QueueLength(Q);
    109 
    110     cout << "当前队列情况为:";
    111 
    112     for (i = Q.front; i < Q.rear; i++)
    113     {
    114         cout << Q.base[i] << " ";
    115     }
    116     cout << endl;
    117 
    118     cout << "当前队列里的元素有" << len << "" << endl;
    119 
    120     cout << "当前的队头元素是:" << GetHead(Q) << endl;
    121 
    122     system("pause");
    123         return 0;
    124 }

  • 相关阅读:
    局域网内其他机器访问本机80网站失败记录
    百度经纬度获取
    Win10安装安卓ADB驱动
    SQL Server 查看数据库是否存在阻塞
    IP地址接口小结
    雄冠条码PV系统-2016-05-17-收获
    slf4j MDC使用
    Java NIO之通道
    Java NIO之缓冲区
    记一次ThreadPoolExecutor面试
  • 原文地址:https://www.cnblogs.com/friend-A/p/9108694.html
Copyright © 2020-2023  润新知