• 数据结构期末复习(さん)--循环队列定义及使用


      1 #include<iostream>
      2 using namespace std;
      3 #define Ok 1
      4 #define Error 0
      5 #define Overflow -1
      6 #define Maxsize 100
      7 typedef struct
      8 {
      9     int *base;   //存储空间基地址
     10     int front;   //头指针,每次在队头删除元素,front加1
     11     int rear;    //尾指针,每次在队尾插入元素,rear 加1
     12     int queuesize;
     13 } SqQueue;
     14 
     15 //初始化
     16 int Init_Queue(SqQueue &Q)
     17 {
     18     //构造一个最大存储空间为MaxSize的空循环队列Q
     19     Q.base = new int[Maxsize];
     20     if(!Q.base)        //存储分配失败
     21         exit(Overflow);
     22     Q.queuesize = Maxsize;
     23     Q.front = Q.rear = 0;  //头尾指针置为0,对列为空
     24     return Ok;
     25 }
     26 
     27 //求队列长
     28 int QueueLength(SqQueue Q)
     29 {
     30     return (Q.rear - Q.front + Maxsize) % Maxsize;
     31 }
     32 
     33 //入队
     34 int EnQueue(SqQueue &Q, int e)
     35 {
     36     if((Q.rear + 1) % Q.queuesize == Q.front)
     37         return Error; //队满
     38     Q.base[Q.rear] = e; //保存队头元素
     39     Q.rear = (Q.rear + 1) % Q.queuesize; //队头指针加1
     40     return Ok;
     41 }
     42 
     43 //出对
     44 int DeQueue(SqQueue &Q)
     45 {
     46     if(Q.front == Q.rear)  //队空
     47         return Error;
     48     Q.front = (Q.front + 1) % Q.queuesize;
     49     return Ok;
     50 }
     51 
     52 //取队头元素
     53 int GetHead(SqQueue Q)
     54 {
     55     if (Q.front != Q.rear)  //队非空
     56     {
     57         return Q.base[Q.front]; //返回队头元素的值,队头指针不变
     58     }
     59 }
     60 
     61 //输出
     62 void printqueue(SqQueue Q)
     63 {
     64     while(Q.front != Q.rear)
     65     {
     66         cout << GetHead(Q) << " ";
     67         Q.front = (Q.front + 1) % Q.queuesize;
     68         //DeQueue(Q);
     69     }
     70     cout << endl;
     71 }
     72 int main()
     73 {
     74     SqQueue q;
     75     Init_Queue(q);
     76     cout << "请输入数字:(0-3):0--退出,1--求表长,2--DeQue,3--EnQue
    ";
     77     for (int i = 0; i < 10; ++i)
     78         EnQueue(q, i);
     79     int c, d;
     80     for(int i = 0; i < 4; ++i)
     81     {
     82         cin >> c;
     83         if(c == 1)
     84             cout << QueueLength(q) << endl;
     85         else if(c == 2)
     86         {
     87             cout << "yuan:";
     88             printqueue(q);
     89             DeQueue(q);
     90             cout << "DE hou:";
     91             printqueue(q);
     92             cout << "Len=: " << QueueLength(q) << endl;
     93         }
     94         else if(c == 3)
     95         {
     96             cout << "yuan:";
     97             printqueue(q);
     98             cout << "input num:";
     99             cin >> d;
    100             EnQueue(q, d);
    101             cout << "En hou:";
    102             printqueue(q);
    103             cout << "Len=: " << QueueLength(q) << endl;
    104         }
    105         else if(c == 0)
    106         {
    107             return 0;
    108         }
    109     }
    110     return 0;
    111 }
  • 相关阅读:
    解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.xyfer.dao.UserDao.findById
    Oracle使用MyBatis中RowBounds实现分页查询
    普元EOS开发经验总结——不定期持续更新中
    Vue数据列表倒计时展示
    Java后端学习路线
    Linux下命令行安装WebLogic 10.3.6
    Oracle快速运行一指禅
    maven学习知识点汇总
    EOS下控制台以及图形界面打印sql语句
    Myeclipse使用过程配置汇总
  • 原文地址:https://www.cnblogs.com/DSYR/p/9163114.html
Copyright © 2020-2023  润新知