一.靜態數組實現
1.堆棧接口
// 一個堆棧模塊接口 // 命名為stack.h #define STACK_YTPE int // 堆棧所存儲值的類型 // push函數 // 把一個新值壓入棧中 void push(STACK_YTPE value); // pop函數 // 從堆棧中彈出一個值 STACK_YTPE pop(void); // top函數 // 返回堆棧頂部元素的值 STACK_YTPE top(void); // is_empty函數 // 如果堆棧為空,返回TRUE,否則返回FALSE bool is_empty(void); // is_full函數 // 如果堆棧已滿,返回TRUE,否則返回FALSE bool is_full(void);
2.靜態數組堆棧
#include<stdio.h> #include<assert.h> #include"stack.h" #define STACK_SIZE 100 // 堆棧中值數量的最大限制 static STACK_TYPE stack[STACK_SIZE]; // 存儲堆棧中值得數組 static int top_element = -1; // 指向頂部元素的指針 void push(STACK_TYPE value){ assert(!is_full()); top_element += 1; stack[top_element] = value; } STACK_TYPE pop(void){ assert(!is_empty()); return stack[top_element--]; } STACK_TYPE top(void){ assert(!is_empty()); return stack[top_element]; } bool is_empty(void){ return top_element == -1; } bool is_full(void){ return top_element == STACK_SIZE-1; }
二.動態數組實現
1.堆棧接口
只需要最原來的stack.h接口基礎上加上添加以下兩個定義即可。
// creat_stack函數 // 創建堆棧。參數指定可以保存多少元素 void creat_stack(size_t size); // destroy_stack函數 // 銷毀堆棧。釋放堆棧所使用的內存 void destroy_stack(void);
2.動態數組堆棧
// 一個動態分配數組實現的堆棧 #include<stdio.h> #include<assert.h> #include<stdlib.h> #include<malloc.h> #include"stack.h" // 用於存儲堆棧元素的數組和指向堆棧頂部元素的指針 static STACK_TYPE *stack; static size_t stack_size; static int top_element = -1; //creat_stack void creat_stack(size_t size){ assert(stack_size == 0); stack_size = size; stack = malloc(stack_size*sizeof(STACK_TYPE)); assert(stack != NULL); } //destroy_stack void destroy_stack(void){ assert(stack_size>0); stack_size = 0; free(stack); stack = NULL; } void push(STACK_TYPE value){ assert(!is_full()); top_element += 1; stack[top_element] = value; } STACK_TYPE pop(void){ assert(!is_empty()); return stack[top_element--]; } STACK_TYPE top(void){ assert(!is_empty()); return stack[top_element]; } bool is_empty(void){ return top_element == -1; } bool is_full(void){ return top_element == stack_size-1; }
參考文獻
《C和指針》