c语言学习,模拟栈操作
- 1.stack.c模拟栈操作函数的实现
- #include<stdio.h>
- #include<stdlib.h>
- static int sz=;
- static char *stack;//数据栈
- static int top=;//栈指针
- //用 static 修饰,作用延长变量生命周期,更重要一点防止其他文件对其值的修改
- /*
- *初始化数据栈大小(申请动态内存记得释放掉)
- */
- void init_stack(int size)
- {
- if(size==)
- {
- size=sz;
- }
- else
- sz=size;
- stack=(char *)malloc(sz);
- }
- /*
- *
- *释放数据栈申请的内存空间
- *
- */
- void destory_stack(void)
- {
- free(stack);
- }
- /*
- *数据入栈时,如果内存不够,进行扩容
- */
- char push(char ch)
- {
- if(top==sz)
- {
- sz+=sz;
- stack=(char *)realloc(stack,sz);//扩容有两种情况,1内存空闲,直接扩容
- //2数组后有数据,先拷贝元数据,然后进行扩容返回新的指针
- }
- stack[top++]=ch;
- }
- /*
- *数据出栈
- */
- char pop(void)
- {
- return stack[--top];
- }
- /*
- *
- *数据出栈完毕
- */
- int is_empty(void)
- {
- return top==;
- }
- /*
- *数据入栈完毕
- */
- int is_full(void)
- {
- return top=sz;
- }
- 2.stack.h 头文件的包含
- /*
- *对stack.c中的文件进行链接,申明
- */
- /*
- *初始化数据栈大小
- */
- extern void init_stack(int size);
- /*
- *销毁空间,防止内存泄漏
- */
- extern void destory_stack(void);
- /*
- *数据入栈,及扩容
- */
- extern char push(char ch);
- /*
- *数据出栈
- */
- extern char pop(void);
- extern int is_empty(void);
- extern int is_full(void);
- 3.main.c效果演示
- #include<stdio.h>
- #include<stdlib.h>
- #include "stack.h";
- /*
- *模拟栈操作
- */
- int main(int argc,char **argv)
- {
- char str[]="helloworld";
- char *p=str;
- /*while(1)
- {
- *p=getchar();
- if(*p++=='\n')
- {
- printf("请输入*结束\n");
- while(getchar()!='*')
- *p='*';
- p=str;
- break;
- }
- }*/
- init_stack();
- /*while(*p!='*')*/
- while(*p!='\0')
- {
- push(*p++);
- }
- printf("出栈结果:\n");
- while(!is_empty())
- {
- putchar(pop());
- }
- destory_stack();
- system("pause");
- return ;
- }
- 4.结果演示
c语言学习,模拟栈操作的更多相关文章
- 第一回写的用arraylist模拟栈操作
package hashMap; import java.util.ArrayList; import d.Student; /** * 用ArrayList模拟栈操作 * @author zhuji ...
- 数据结构C语言实现----出栈操作
代码如下: #include<stdio.h> #include<stdlib.h> typedef struct { char *base; char *top; int s ...
- C语言学习笔记--内存操作常见错误
1. 野指针 (1)指针变量中的值是非法的内存地址,进而形成野指针 (2)野指针不是 NULL 指针,是指向不可用内存地址的指针 (3)NULL 指针并无危害,很好判断,也很好调试 (4)C 语言中无 ...
- java:模拟栈操作
import java.util.ArrayList; public class MyStack { private ArrayList<Object> arrayList; public ...
- c语言学习笔记 - 文件操作
#include <stdio.h>#include <time.h> int main(void){ time_t t; //类似于size_t那 ...
- hdu 4699 Editor 模拟栈
思路:刚开始用STL中的栈,一直RE……,之后改为手动模拟栈操作,在注意点细节就可以了!!! 代码如下: #include<cstdio> #include<cstring> ...
- Python模拟入栈出栈操作
目标: 1.编写菜单,提示用户操作选项(push,pop,view,quit) 2.规则:定义列表,先入栈,后出栈,后入栈,先出栈 1.模拟入栈.出栈操作 >>> list1 = [ ...
- C语言学习笔记——堆和栈——未整理
C语言笔记 栈区 栈stack是一种先进后出的内存结构,所有的自动变量,函数的形参都是由编译器自动放出栈中,当一个自动变量超出其作用域时,自动从栈中弹出.出入栈是由C语言编译器自动分配 ...
- Lua和C++交互 学习记录之二:栈操作
主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3 参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...
随机推荐
- HTTP 代理原理及实现
本文转载自 https://imququ.com/post/web-proxy.html HTTP 代理原理及实现(一) 文章目录 普通代理 隧道代理 Web 代理是一种存在于网络中间的实体,提供各式 ...
- Solr4.8.0源码分析(4)之Eclipse Solr调试环境搭建
Solr4.8.0源码分析(4)之Eclipse Solr调试环境搭建 由于公司里的Solr调试都是用远程jpda进行的,但是家里只有一台电脑所以不能jpda进行调试,这是因为jpda的端口冲突.所以 ...
- allegro 的光绘层概念
TOP层: board geometry/outline manufacturing/photoplot_outline etch/top ...
- WinDebug 常用命令表【摘】
启动, 附加进程, 执行和退出(Starting, Attaching, Executing and Exiting) ======================= Start -> All ...
- MD3200扩展柜MD1200,玩起
杀到最后一关了,希望能让IOFENCE,IMPI之类的概念弄好. 至于ISCSI,CLVM,NAS,NFS,SAN这些东东的性能,我总觉得不如DAS,HBA卡直接到共享存储快.其它方案,不都灵活一点, ...
- 用UNetbootin来安装USB LINUX,好像比ULTRA ISO省事
UNetbootin can create a bootable Live USB drive, or it can make a "frugal install" on your ...
- C++类型转换总结
C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是:TYPE b = (TYPE)a.C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用. const_cast, ...
- 130+ essential vim commands
Basics :e filename Open filename for edition :w Save file :q Exit Vim :q! Quit without saving :x Wri ...
- cocos日记
n/2/2015 ADT E:\All Setup\eclipse_past\Eclipse_plugins_ADT 15/2/2015 配置cocos win32 开发环境 链接:htt ...
- centos系统安装中文字体几种方法
我们知道centos是基于linux内核的这款系统默认是不带中文字体了,如果我们要使用中文字体就需要自行安装了,下面一起来看看吧. 前天有用户反应,生成的报到单中他的名字少了一个字.仔细检查了一下 ...