在函数调用的过程中, 需要的就是先进后出的特点, 因此, 栈就出现了
栈是一种数据结构, 是计算机怎么处理程序运行的一种方式具有先进后出的特点, 下面看的就是这些抽象的数据结构怎么用 C 语言代码来实现, 栈能实现, 那么其他的数据结构也就自然可以用 C 语言实现的了, 如: 队列
C 语言实现栈的代码, 可以有数组形式, 链表形式, 下面讲解的是数组形式来实现
静态数组因为有个大小, 而且它在内存的栈区, 默认为 1M, 所以静态数组不会分配的很大, 因此用数组来实现, 有个栈的容量的问题, 自然就会带出栈顶和栈底, 的概念
实现环境: Visual Studio 2017
小编推荐一个学 C 语言 / C++ 的学习裙 二六三, 六八八, 二七六 , 无论你是大牛还是小白, 是想转行还是想入行都可以来了解一起进步一起学习! 裙内有开发工具, 很多干货和技术资料分享!
存储数据需要数组, 同时有个栈中当前位置, 可以想的到, 在 C 语言中应该至少用结构体来实现
实现栈的结构体如下:
然后根据栈的特点, 会有这么几个接口:
1: 判断是否栈满;
2: 判断是否栈空;
3: 设置栈为空;
4: 入栈;
5: 出栈;
为了方便数组操作, 先定义一个宏:
#define N 100
下面是各个接口的实现:
小编推荐一个学 C 语言 / C++ 的学习裙 二六三, 六八八, 二七六 , 无论你是大牛还是小白, 是想转行还是想入行都可以来了解一起进步一起学习! 裙内有开发工具, 很多干货和技术资料分享!
调用以上接口, 来测试栈的效果:
测试结果:
其实栈的实现还有链表的方式来实现同时, C 语言实现栈, 只能到面向过程的范围可以用 C++ 来实现面向对象的栈方式, 调用起来更加方便, 形如:
- Mystack ms;
- ms.push(1);
- ms.push(2);
- ms.push(3);
- ms.push(4);
- ms.push(5);
弹出形如:
int a=ms.pop(1);
实现栈的方式虽然有多种, 但是不要死记硬背, 要根据自己的理解去选择, 怎么适合自己的理解就怎么选择, 灵活的学习轻松的学习, 秘诀就在于此比如我的笔记中就记录了多种方式, 但是这里只选择一种合适的:
小编推荐一个学 C 语言 / C++ 的学习裙 二六三, 六八八, 二七六 , 无论你是大牛还是小白, 是想转行还是想入行都可以来了解一起进步一起学习! 裙内有开发工具, 很多干货和技术资料分享!
编程领域其实是相通的, 相通的东西就是编程思想, 至于语言的语法不同, 只是表现形式, 要透过现象看本质, 才能真正把握编程的灵魂, 才能有希望学的越来越轻松, 否则很可能陷入其中很苦恼
这些是 C/C++ 能做的
服务器开发工程师人工智能云计算工程师信息安全 (黑客反黑客) 大数据 数据平台嵌入式工程师流媒体服务器数据控解图像处理音频视频开发工程师游戏服务器分布式系统游戏辅助等
来源: http://www.jianshu.com/p/f20244cfa4ad