C语言实现使用动态数组来构造栈结构
2016-03-06 15:10
405 查看
我在面前一篇博客《C语言实现使用静态数组来构造栈结构》中使用了静态数组来模拟栈的操作。静态数组的大小是在代码中写死的,是存储在用户栈上面的,使用起来不灵活。在这篇博客中我会使用动态数组来构造,此时使用的内存是动态申请的,只是在数组的创建和释放上面有差别,其他的使用都一样。注意:动态申请的内存需要我们手动去释放,因为这些占用的内存是在运行时堆上,不会在程序退出后释放。而存放在栈上面的会在程序退出后自动释放。代码上传至 https://github.com/chenyufeng1991/Stack_DynamicArray 。
(1)创建栈
(2)销毁栈
(3)其他基本操作
(4)测试代码
(1)创建栈
//创建栈,也就是为数组分配数组 void createStack(int size){ if (staticSize == 0) { staticSize = size; stack = (int *)malloc(staticSize * sizeof(int)); if (stack == NULL) { printf("数组内存分配失败\n"); } } }
(2)销毁栈
//销毁这个栈,重点是释放这个栈占用的内存 void destroyStack(){ if (staticSize > 0) { staticSize = 0; free(stack); stack = NULL;//数组置空 top_element = -1;//指针置空 } }
(3)其他基本操作
//压入元素 void push(int value){ if (!isFull()) { stack[++top_element] = value; } } //弹出元素 void pop(){ if (!isEmpty()) { top_element--; } } //取栈顶元素 int top(){ if (!isEmpty()) { return stack[top_element]; } return -32768; } //判空 int isEmpty(){ return top_element == -1; } //判满 int isFull(){ return top_element == staticSize - 1; } //从栈顶开始打印元素 void printStack(){ int i = top_element; printf("打印出动态数组堆栈里面的值: "); if(i == -1){ printf("这是个空栈"); }else{ while(i!= -1){ printf("%d ",stack[i--]); } } printf("\n"); }
(4)测试代码
int main(int argc, const char * argv[]) { createStack(50); printStack(); push(6);push(3);push(9);push(1);push(4); printf("栈中压入数据后:\n"); printStack(); pop();pop(); printf("弹出数据后,栈内的元素为:\n"); printStack(); printf("取栈顶的元素:%d\n",top()); destroyStack(); printStack(); return 0; }
相关文章推荐
- CAF(C++ actor framework)使用随笔(延迟发送,消息转发,消息优先级)(四)
- C/C++基础-001
- C++primer plus 编程练习10.10
- C语言中的static 详细分析
- C/C++学习之基础-001
- C++11中值得关注的几大变化
- c++中的继承和组合
- c++拷贝构造函数
- 【HPU】[1015]【C语言训练】列出最简真分数序列
- c++初始化函数列表
- C/C++ 内存对齐
- #define和typedef的区别
- C++扬帆远航——1
- VC++6.0新认识
- VC++error LNK2001: unresolved external symbol的解决方法
- OC语言BLOCK和协议
- C++ 中的类型转换函数
- 【HPU】[1014]【C语言训练】亲密数
- C语言格式化说明符
- c++ split()实现