不废话了,快憋不住了

 

  1. #include<iostream>  
  2. using namespace std;  
  3.  
  4. typedef struct QNode{    //嗯,看来是个链队列FIFO,队尾进,队头出。队列节点的结构类型:当前数据+下一个数据的指针      
  5. int    data;  
  6. struct QNode *next;          
  7. }QNode,*QueuePtr;  
  8.  
  9. typedef struct{         //队列的数据结构,对头+对尾  
  10. QueuePtr front;         //front永远指向对头  
  11. QueuePtr rear;          //rear永远指向对尾  
  12. }LinkQueue;  
  13.  
  14. void InitQueue(LinkQueue *queue);              //初始化一个队列  
  15. void InQueue(LinkQueue *queue, int data);      //进队列  
  16. void display(LinkQueue *queue);                //打印队列  
  17. int OutQueue(LinkQueue *queue);     //出队列  
  18.  
  19. int main()  
  20. {  
  21.     LinkQueue Q;  
  22.     int choice,OutElem,InData;  
  23.     InitQueue( &Q );  
  24.     cout << "0 to Insert----1 to Display-----2 to OutQueue----options to exit" << endl;  
  25.     cin >> choice;  
  26.     while(choice == 0 ||choice == 1 ||choice == 2)  
  27.     {  
  28.         switch(choice)  
  29.         {  
  30.             case 0:  
  31.                  {  
  32.                  cout << "Input element:" << endl;  
  33.                  cin >> InData;  
  34.                  InQueue(&Q,InData);     
  35.                  cout << "Insert Successfully!" << endl;    
  36.                  }  
  37.                  break;  
  38.             case 1:  
  39.                  {  
  40.                  display(&Q);  
  41.                  }  
  42.                  break;  
  43.             case 2:  
  44.                  {  
  45.                  OutElem = OutQueue(&Q);  
  46.                  cout << OutElem << endl;  
  47.                  }  
  48.                  break;  
  49.             default:   
  50.                 exit(0);  
  51.                     break;  
  52.         }  
  53.     cout << "Your choice:";  
  54.     cin >> choice;  
  55.     }  
  56.     return 0;  
  57. }  
  58.  
  59. void InitQueue(LinkQueue *queue)  
  60. {  
  61.      queue->front = queue->rear = (QueuePtr)malloc(sizeof(QNode));   //头尾分配空间,且此时头等于尾,即空队列  
  62.      if(!queue -> front)  
  63.      {  
  64.          cout << "Created failed!" << endl;  
  65.          exit(0);  
  66.      }  
  67.      else cout << "Created successfully!" << endl;  
  68.      queue->front->data = 0;                //头节点数据域初始化为0,免得出现乱数,难看。  
  69.      queue->front->next = NULL;             //头节点指针域置空  
  70. }   
  71.  
  72. void InQueue(LinkQueue *queue,int data)  
  73. {  
  74.      QueuePtr p;                      //新建一个队列节点  
  75.      p = (QueuePtr)malloc(sizeof(QNode));  
  76.      if(!queue -> front)  
  77.          exit(0);  
  78.      p->data = data;  
  79.      p->next = NULL;  
  80.      queue->rear->next = p;    //*p链到原队尾结点后  
  81.      queue->rear = p;          //队尾指针指向新的尾  
  82. }  
  83.  
  84. void display(LinkQueue *queue)  
  85. {  
  86.     LinkQueue p;  
  87.     p.front = queue->front;  
  88.     p.rear = queue->rear;  
  89.     if(queue->front == NULL&& queue->rear == NULL )  
  90.      {  
  91.          cout << "EMPTY!" << endl;  
  92.          //exit(0);         //为了让while循环有意义  
  93.      }  
  94.      else 
  95.      while(queue -> front)  
  96.      {  
  97.          cout << queue->front->data << endl;  
  98.          queue->front = queue->front -> next;  
  99.      }  
  100.      queue->front = p.front;  
  101.      queue->rear = p.rear;  
  102. }  
  103.  
  104. int OutQueue(LinkQueue *queue)  
  105. {  
  106.     int temp;  
  107.     QueuePtr p;   
  108.     if(queue->front == NULL&& queue->rear == NULL)  
  109.      {  
  110.          cout << "Empty Queue!" << endl;  
  111.          return 0;  
  112.      }  
  113.     else 
  114.     {  
  115.      p = queue->front;  
  116.      temp = p->data;          //把头节点后的第一个数据赋给temp  
  117.      queue->front = p->next;  
  118.      if(queue->rear == p)  
  119.          queue->rear = NULL;  
  120.      free(p);  
  121.      return temp;  
  122.     }