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

2022-09-23 13:42:09 字數 1130 閱讀 8058

①、棧的定義

[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,表示棧空.我們首先給出順序棧的抽象資...