隨筆-126  評(píng)論-247  文章-5  trackbacks-0

                  
          隊(duì)列 (queue) 是先進(jìn)先出(FIFO, First In First Out)的線性表。隊(duì)列只允許在后端 (稱為rear) 進(jìn)行插入操作,在前端 (稱為front) 進(jìn)行刪除操作。

           



          /**
           * <!--
           * File   : queue.h
           * Author : fancy
           * Email  : fancydeepin@yeah.net
           * Date   : 2013-02-03
           * --!>
           
          */
          #include 
          <stdio.h>
          #include 
          <stdlib.h>
          #include 
          <malloc.h>
          #define Element char

          typedef 
          struct Node {
              Element data;
              
          struct Node *next;
          *QNode;

          typedef 
          struct TQueue {
              
          struct Node *front;
              
          struct Node *rear;
          *Queue;

          //隊(duì)列構(gòu)造器,創(chuàng)建空隊(duì)列
          void queueConstructor(Queue &queue){
              queue
          ->front = (QNode)malloc(sizeof(Node));  //頭結(jié)點(diǎn)
              if(!queue->front){
                  printf(
          "\n為隊(duì)列結(jié)點(diǎn)分配內(nèi)存空間失敗!\n");
                  exit(
          0);
              }
              queue
          ->front->next = NULL;
              queue
          ->rear = queue->front;  //空隊(duì)列,rear == front
          }

          //是否為空隊(duì)列
          bool isEmpty(Queue queue){
              
          if(queue->front == queue->rear){
                  
          return true;
              }
              
          return false;
          }

          //入隊(duì)
          void enqueue(Queue &queue, Element e){
              QNode node 
          = (QNode)malloc(sizeof(Node));  //新結(jié)點(diǎn)
              if(!node){
                  printf(
          "\n為隊(duì)列結(jié)點(diǎn)分配內(nèi)存空間失敗!\n");
                  exit(
          0);
              }
              node
          ->data = e;
              node
          ->next = NULL;
              queue
          ->rear->next = node;  //新結(jié)點(diǎn)排在隊(duì)尾
              queue->rear = node;  //隊(duì)尾指針指向新插進(jìn)的結(jié)點(diǎn)
          }

          //出隊(duì)
          Element dequeue(Queue queue){
              
          if(isEmpty(queue)){
                  printf(
          "\n隊(duì)列為空,出隊(duì)操作失敗!\n");
                  
          return ' ';
              }
              QNode node 
          = queue->front->next;  //隊(duì)頭結(jié)點(diǎn)
              Element e = node->data;
              queue
          ->front->next = node->next;  //隊(duì)頭指針指向隊(duì)頭結(jié)點(diǎn)的下一個(gè)結(jié)點(diǎn)
              if(queue->rear == node){  //隊(duì)列的最后一個(gè)結(jié)點(diǎn)出隊(duì)
                  queue->rear = queue->front;  //隊(duì)尾結(jié)點(diǎn)重新指向頭結(jié)點(diǎn)
              }
              free(node);  
          //釋放空間
              return e;
          }
             

           


          /**
           * <!--
           * File   : Queue.cpp
           * Author : fancy
           * Email  : fancydeepin@yeah.net
           * Date   : 2013-02-03
           * --!>
           
          */
          #include 
          "queue.h"

          int main() {

              Queue queue;
              queueConstructor(queue);
              enqueue(queue, 
          'f');
              enqueue(queue, 
          'a');
              enqueue(queue, 
          'n');
              printf(
          "%c", dequeue(queue));
              printf(
          "%c", dequeue(queue));
              printf(
          "%c", dequeue(queue));
              
          //output[result]:fan
              return 0;
              
          }
             


           



            
          posted on 2013-02-03 08:22 fancydeepin 閱讀(1068) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 巫溪县| 图片| 克什克腾旗| 循化| 开阳县| 琼中| 子洲县| 延寿县| 淳安县| 腾冲县| 剑河县| 平果县| 千阳县| 麻江县| 潮安县| 黄山市| 房产| 张家界市| 金塔县| 宣威市| 东宁县| 同心县| 乐陵市| 舟曲县| 浙江省| 青海省| 遂昌县| 定安县| 广宗县| 柳州市| 南郑县| 秦皇岛市| 方城县| 酒泉市| 抚宁县| 新昌县| 阳新县| 博兴县| 古田县| 漳平市| 辽阳市|