隨筆-126  評論-247  文章-5  trackbacks-0

           
          堆棧 ( stack ),也可直接稱棧。堆棧數據結構只允許在一端進行操作,并按照后進先出( LIFO, Last In First Out )的原理運作。

          堆棧數據結構使用兩種基本操作:

          壓棧( push ) :將數據放入堆棧的頂端,堆棧頂端指針指標+1。

          彈棧( pop )   :將頂端數據資料輸出,堆棧頂端指針指標-1。

           

           

           


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

          typedef 
          struct TStack {
              Element 
          *base;
              Element 
          *top;
              
          int size;
          *Stack;

          //棧的構造器,創建空棧
          void stackConstructor(Stack &stack){
              stack
          ->base = (Element *)malloc(INIT_SIZE * sizeof(Element));
              
          if(!stack->base){
                  printf(
          "\n為棧分配內存空間失敗!\n");
                  exit(
          0);
              }
              stack
          ->top = stack->base//空棧 top == base
              stack->size = INIT_SIZE;
          }

          //是否為空棧
          bool isEmpty(Stack stack){
              
          if(stack->top == stack->base){
                  
          return true;
              }
              
          return false;
          }

          //壓棧
          bool push(Stack &stack, Element e){
              
          if(stack->top - stack->base >= stack->size){  //棧滿
                  stack->base = (Element *)realloc(stack->base, (stack->size + INCREMENT_SIZE) * sizeof(Element));
                  
          if(!stack->base){
                      printf(
          "\n為棧擴展內存空間失敗!\n");
                      
          return false;
                  }
                  stack
          ->top = stack->base + stack->size;
                  stack
          ->size += INCREMENT_SIZE;
              }
              
          *stack->top++ = e;
              
          return true;
          }

          //彈棧
          Element pop(Stack stack){
              
          if(isEmpty(stack)){
                  printf(
          "\n棧為空,彈棧操作失敗!\n");
                  
          return ' ';
              }
              
          return *--stack->top;
          }

           


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

          int main() {

              Stack stack;
              stackConstructor(stack);
              push(stack, 
          'f');
              push(stack, 
          'a');
              push(stack, 
          'n');
              push(stack, 
          'c');
              push(stack, 
          'y');
              printf(
          "%c", pop(stack));
              printf(
          "%c", pop(stack));
              printf(
          "%c", pop(stack));
              printf(
          "%c", pop(stack));
              printf(
          "%c", pop(stack));
              
          //output[result]: ycnaf
              return 0;
          }
           

           


           



            
          posted on 2013-02-03 06:40 fancydeepin 閱讀(1572) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 余江县| 南雄市| 信宜市| 宁波市| 江北区| 尚义县| 门源| 重庆市| 南皮县| 宁陵县| 温宿县| 许昌市| 廉江市| 左贡县| 游戏| 镇江市| 广昌县| 昌图县| 绍兴县| 微山县| 尤溪县| 崇仁县| 车险| 腾冲县| 桓台县| 拜泉县| 静海县| 辰溪县| 法库县| 阜新市| 自贡市| 汝南县| 甘肃省| 上蔡县| 和平区| 新泰市| 雷州市| 静宁县| 额济纳旗| 贡嘎县| 波密县|