1. 1.stack.c模拟栈操作函数的实现
  1.  
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4.  
  5. static int sz=;
  6.  
  7. static char *stack;//数据栈
  8.  
  9. static int top=;//栈指针
  10. //用 static 修饰,作用延长变量生命周期,更重要一点防止其他文件对其值的修改
  11.  
  12. /*
  13. *初始化数据栈大小(申请动态内存记得释放掉)
  14. */
  15. void init_stack(int size)
  16. {
  17. if(size==)
  18. {
  19. size=sz;
  20. }
  21.  
  22. else
  23. sz=size;
  24.  
  25. stack=(char *)malloc(sz);
  26. }
  27. /*
  28. *
  29. *释放数据栈申请的内存空间
  30. *
  31. */
  32. void destory_stack(void)
  33. {
  34. free(stack);
  35. }
  36.  
  37. /*
  38. *数据入栈时,如果内存不够,进行扩容
  39. */
  40. char push(char ch)
  41. {
  42. if(top==sz)
  43. {
  44. sz+=sz;
  45. stack=(char *)realloc(stack,sz);//扩容有两种情况,1内存空闲,直接扩容
  46. //2数组后有数据,先拷贝元数据,然后进行扩容返回新的指针
  47. }
  48. stack[top++]=ch;
  49. }
  50.  
  51. /*
  52. *数据出栈
  53. */
  54. char pop(void)
  55. {
  56. return stack[--top];
  57. }
  58.  
  59. /*
  60. *
  61. *数据出栈完毕
  62. */
  63. int is_empty(void)
  64. {
  65. return top==;
  66. }
  67.  
  68. /*
  69. *数据入栈完毕
  70. */
  71. int is_full(void)
  72. {
  73. return top=sz;
  74. }
  75.  
  76. 2.stack.h 头文件的包含
  1. /*
  2. *对stack.c中的文件进行链接,申明
  3. */
  4.  
  5. /*
  6. *初始化数据栈大小
  7. */
  8. extern void init_stack(int size);
  9.  
  10. /*
  11. *销毁空间,防止内存泄漏
  12. */
  13. extern void destory_stack(void);
  14.  
  15. /*
  16. *数据入栈,及扩容
  17. */
  18. extern char push(char ch);
  19.  
  20. /*
  21. *数据出栈
  22. */
  23. extern char pop(void);
  24.  
  25. extern int is_empty(void);
  26.  
  27. extern int is_full(void);
  1.  
  1. 3.main.c效果演示
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include "stack.h";
  4.  
  5. /*
  6. *模拟栈操作
  7. */
  8.  
  9. int main(int argc,char **argv)
  10. {
  11. char str[]="helloworld";
  12. char *p=str;
  13.  
  14. /*while(1)
  15. {
  16. *p=getchar();
  17. if(*p++=='\n')
  18. {
  19. printf("请输入*结束\n");
  20. while(getchar()!='*')
  21. *p='*';
  22. p=str;
  23. break;
  24. }
  25. }*/
  26.  
  27. init_stack();
  28.  
  29. /*while(*p!='*')*/
  30. while(*p!='\0')
  31. {
  32. push(*p++);
  33. }
  34.  
  35. printf("出栈结果:\n");
  36.  
  37. while(!is_empty())
  38. {
  39. putchar(pop());
  40. }
  41. destory_stack();
  42. system("pause");
  43. return ;
  44. }
  1.  
  1. 4.结果演示
     

c语言学习,模拟栈操作的更多相关文章

  1. 第一回写的用arraylist模拟栈操作

    package hashMap; import java.util.ArrayList; import d.Student; /** * 用ArrayList模拟栈操作 * @author zhuji ...

  2. 数据结构C语言实现----出栈操作

    代码如下: #include<stdio.h> #include<stdlib.h> typedef struct { char *base; char *top; int s ...

  3. C语言学习笔记--内存操作常见错误

    1. 野指针 (1)指针变量中的值是非法的内存地址,进而形成野指针 (2)野指针不是 NULL 指针,是指向不可用内存地址的指针 (3)NULL 指针并无危害,很好判断,也很好调试 (4)C 语言中无 ...

  4. java:模拟栈操作

    import java.util.ArrayList; public class MyStack { private ArrayList<Object> arrayList; public ...

  5. c语言学习笔记 - 文件操作

    #include <stdio.h>#include <time.h> int main(void){ time_t t;               //类似于size_t那 ...

  6. hdu 4699 Editor 模拟栈

    思路:刚开始用STL中的栈,一直RE……,之后改为手动模拟栈操作,在注意点细节就可以了!!! 代码如下: #include<cstdio> #include<cstring> ...

  7. Python模拟入栈出栈操作

    目标: 1.编写菜单,提示用户操作选项(push,pop,view,quit) 2.规则:定义列表,先入栈,后出栈,后入栈,先出栈 1.模拟入栈.出栈操作 >>> list1 = [ ...

  8. C语言学习笔记——堆和栈——未整理

    C语言笔记     栈区     栈stack是一种先进后出的内存结构,所有的自动变量,函数的形参都是由编译器自动放出栈中,当一个自动变量超出其作用域时,自动从栈中弹出.出入栈是由C语言编译器自动分配 ...

  9. Lua和C++交互 学习记录之二:栈操作

    主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...

随机推荐

  1. HTTP 代理原理及实现

    本文转载自 https://imququ.com/post/web-proxy.html HTTP 代理原理及实现(一) 文章目录 普通代理 隧道代理 Web 代理是一种存在于网络中间的实体,提供各式 ...

  2. Solr4.8.0源码分析(4)之Eclipse Solr调试环境搭建

    Solr4.8.0源码分析(4)之Eclipse Solr调试环境搭建 由于公司里的Solr调试都是用远程jpda进行的,但是家里只有一台电脑所以不能jpda进行调试,这是因为jpda的端口冲突.所以 ...

  3. allegro 的光绘层概念

    TOP层: board geometry/outline  manufacturing/photoplot_outline                  etch/top              ...

  4. WinDebug 常用命令表【摘】

    启动, 附加进程, 执行和退出(Starting, Attaching, Executing and Exiting) ======================= Start -> All ...

  5. MD3200扩展柜MD1200,玩起

    杀到最后一关了,希望能让IOFENCE,IMPI之类的概念弄好. 至于ISCSI,CLVM,NAS,NFS,SAN这些东东的性能,我总觉得不如DAS,HBA卡直接到共享存储快.其它方案,不都灵活一点, ...

  6. 用UNetbootin来安装USB LINUX,好像比ULTRA ISO省事

    UNetbootin can create a bootable Live USB drive, or it can make a "frugal install" on your ...

  7. C++类型转换总结

    C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是:TYPE b = (TYPE)a.C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用. const_cast, ...

  8. 130+ essential vim commands

    Basics :e filename Open filename for edition :w Save file :q Exit Vim :q! Quit without saving :x Wri ...

  9. cocos日记

    n/2/2015 ADT       E:\All Setup\eclipse_past\Eclipse_plugins_ADT 15/2/2015 配置cocos win32 开发环境 链接:htt ...

  10. centos系统安装中文字体几种方法

    我们知道centos是基于linux内核的这款系统默认是不带中文字体了,如果我们要使用中文字体就需要自行安装了,下面一起来看看吧.   前天有用户反应,生成的报到单中他的名字少了一个字.仔细检查了一下 ...