C语言描述栈的实现及操作(数组实现)
一.静态数组实现
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和指针》