• 数据结构——链式队列


      1 #include<iostream>
      2 #include<stdlib.h>
      3 using namespace std;
      4 
      5 typedef int ElemType;
      6 typedef int Status;
      7 #define OK 1
      8 #define ERROR 0
      9 #define MAXSIZE 10
     10 
     11 //结点定义
     12 typedef struct QNode
     13 {
     14     ElemType data;        //数据域
     15     struct QNode *next;    //指针域
     16 }QNode, *QueuePtr;
     17 
     18 //链队定义
     19 typedef struct
     20 {
     21     QueuePtr front;        //队头指针
     22     QueuePtr rear;        //队尾指针
     23 }LinkQueue;
     24 
     25 //初始化链队
     26 Status InitQueue(LinkQueue &Q)
     27 {
     28     Q.front = Q.rear = new QNode;    //生成新结点作为头结点,队头和队尾指针指向此结点
     29     Q.front->next = NULL;            //头结点的指针域置为空
     30     return OK;
     31 }
     32 
     33 //入队
     34 //插入元素e为新的队尾元素
     35 Status EnQueue(LinkQueue &Q, ElemType e)
     36 {
     37     QueuePtr p;
     38 
     39     p = new QNode;                //为入队元素分配结点空间,用指针p指向
     40     p->data = e;                //将新结点数据域置为e
     41     p->next = NULL;
     42     Q.rear->next = p;            //将新结点插入到队尾
     43     Q.rear = p;                    //修改队尾指针
     44 
     45     return OK;
     46 }
     47 
     48 //出队
     49 //删除队头元素,用e返回其值
     50 Status DeQueue(LinkQueue &Q, ElemType &e)
     51 {
     52     if (Q.front == Q.rear)        //队列为空,返回ERROR
     53         return ERROR;
     54 
     55     QueuePtr p;
     56 
     57     p = Q.front->next;            //p指向队头元素
     58     e = p->data;                //e保存队头元素的值
     59     Q.front->next = p->next;    //修改头结点的指针域
     60 
     61     if (Q.rear == p)
     62         Q.rear = Q.front;        //最后一个元素被删,队尾指针指向头结点
     63 
     64     delete p;                    //释放原队头元素的空间
     65     return OK;
     66 }
     67 
     68 //取队头元素
     69 ElemType GetHead(LinkQueue Q)
     70 {
     71     if (Q.front != Q.rear)                //队列非空
     72         return Q.front->next->data;        //返回队头元素的值,队头指针不变
     73 }
     74 
     75 //创建队列
     76 //输入元素入队,以-1结束
     77 void CreatQueue(LinkQueue &Q, int &count)    //count用于计算队列中的元素个数
     78 {
     79     int n;
     80     InitQueue(Q);
     81     count = 0;
     82     cout << "请输入要入队的元素,以-1结束:" << endl;
     83     while (cin >> n && n != -1)
     84     {
     85         count++;
     86         EnQueue(Q, n);
     87     }
     88 }
     89 
     90 //输出队列
     91 void PrintQueue(LinkQueue Q)
     92 {
     93     if (Q.front == Q.rear)    //空队列
     94         return;
     95     QueuePtr p = Q.front->next;
     96     while (p != Q.rear)        //依次输出队列中的元素
     97     {
     98         cout << p->data << " ";
     99         p = p->next;
    100     }
    101     cout << p->data << endl;    //最后输出队尾元素
    102 }
    103 
    104 int main()
    105 {
    106     int i, n, e;
    107     int len;
    108     LinkQueue Q;
    109 
    110     InitQueue(Q);   //初始化一个空队列
    111 
    112     CreatQueue(Q, e);    //创建一个队列
    113 
    114     cout << "当前队列情况为:";
    115 
    116     PrintQueue(Q);    //输出队列的情况
    117 
    118     cout << "当前的队头元素是:" << GetHead(Q) << endl;
    119 
    120     cout << "请输入要出队的元素个数:";
    121 
    122     cin >> n;
    123 
    124     if (n > e)        //如果出队的元素个数大于队内的总元素个数,则输出错误
    125     {
    126         cout << "错误!" << endl;
    127         system("pause");
    128         return 0;
    129     }
    130     else if (n == e)    //如果出队的元素个数等于队内的总元素个数,则队列变空
    131     {
    132         cout << "队列为空!" << endl;
    133         system("pause");
    134         return 0;
    135     }
    136 
    137     for (i = 0; i < n; i++)
    138     {
    139         DeQueue(Q, e);   //出队
    140     }
    141 
    142     cout << "当前队列情况为:";
    143 
    144     PrintQueue(Q);    //输出队列的情况
    145 
    146     cout << "当前的队头元素是:" << GetHead(Q) << endl;
    147 
    148     system("pause");
    149 
    150     return 0;
    151 }

  • 相关阅读:
    自动从vss下载代码并编译的脚本
    自动执行Sql脚本的批处理
    编译 SharpDevelop2.2源码 经过
    .net框架源代码批量下载器使用方法
    sql server 解决孤立用户问题
    元数据学习分享
    SQL注入攻击的原理及其防范措施(转)
    .Net Remoting和Web Service浅析(转)
    usercontrol 和 page 的继承
    如何提高页面现实速度
  • 原文地址:https://www.cnblogs.com/friend-A/p/9108799.html
Copyright © 2020-2023  润新知