程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 通用棧的設計和實現[C實現]

通用棧的設計和實現[C實現]

編輯:C++入門知識

①、棧的定義 [cpp]   {       void **base; /* 棧底 */       void **top;  /* 棧頂 */       int size;    /* 棧的大小 */   }stack_t;   在此設計的通用棧將會達到以下兩點要求:     ①、可以處理任意的數據類型的數據             請注意棧中base和top的數據類型,其為void**,因此其可以處理各種數據類型     ②、高效的數據操作和訪問             void**其為雙指針,意味入棧和出棧的將只是對應數據的地址,而不需要對數據本身進行拷貝,因此也達到了高效的目的。 ②、宏定義 為提高棧的操作訪問效率,可使用宏定義: [cpp]   #define stack_maxsize(stack) (stack->size)   #define stack_isempty(stack) (stack->top == stack->base)   #define stack_depth(stack) (stack->top - stack->base)   #define stack_gettop(stack) ((stack->top == stack->base)? NULL: *(stack->top - 1))   ③、操作接口 [cpp]   /* 棧的初始化 */   int stack_init(stack_t *stack, int size)   {       memset(stack, 0, sizeof(stack_t));          stack->base = (void**)calloc(size, sizeof(void*));       if(NULL == stack->base)       {           return -1;       }       stack->top = stack->base;       stack->size = size;       return 0;   }   [cpp]   /* 入棧 */   int stack_push(stack_t *stack, void *node)   {       if(stack->top - stack->base >= stack->szie)       {           return -1;       }       *(stack->top) = node;       stack->top++;       return 0;   }   [html]  /* 出棧 */   int stack_top(stack *stack)   {       if(stack->top == stack->base)       {           return -1;         }       stack->top--;       *(stack->top) = NULL;       return 0;   }   [cpp]   /* 釋放棧 */   void stack_free(stack_t *stack)   {       free(stack->base);       stack->base = NULL;       stack->top = NULL;       stack->size = 0;   }    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved