①、棧的定義
[cpp]
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)
stack->top = stack->base;
stack->size = size;
return 0;
} [cpp]
/* 入棧 */
int stack_push(stack_t *stack, void *node)
*(stack->top) = node;
stack->top++;
return 0;
} [html]
/* 出棧 */
int stack_top(stack *stack)
stack->top--;
*(stack->top) = null;
return 0;
} [cpp]
/* 釋放棧 */
void stack_free(stack_t *stack)
C 實現順序棧和鏈棧
順序棧和鏈棧分別類似於順序表和單鏈表,只是由於棧的first in last out性質,其操作相對簡單,是順序表和單鏈表的子集。鏈棧中的鏈不使用head屬性,這一屬性是多餘的,使用鏈棧類的topnode屬性即可。另外,為了避免每次返回鏈棧的長度都要遍歷所有結點,在鏈棧類中增加num屬性,push操...
C 實現順序棧和鏈棧
二,順序棧的實現 三,鏈棧的實現 棧的初始化 template typename t bool stack isempty 判斷棧是否為空 template typename t int stack getlength 獲得棧中資料元素的個數 template typename t int stac...
C 棧的實現
2009 04 15 11 40 順序棧 seqential stack 就是用順序儲存方式儲存的棧。在下面順序棧的類定義中是用陣列儲存的。用stacka maxsize 儲存,maxsize是最大允許存放元素的個數。變數top表示棧頂部元素的位置,初始值為 1,表示棧空.我們首先給出順序棧的抽象資...