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语言学习,模拟栈操作的更多相关文章

  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. 构建高可用web站点学习(二)

    web站点的缓存学习 缓存在web应用里面十分常见,也有各种各样的缓存,从请求开始一直到代码处理的阶段都可以采取缓存.下面就逐一介绍: 一.客户端缓存(浏览器和http方面) 前端页面缓存主要遵循ht ...

  2. STM8S学习笔记-时钟控制2

    今天把时钟系统的最后部分,时钟安全系统(CSS)和时钟输出功能(CCO),做一个简答的说明. 1.时钟安全系统(以下简称CSS) CSS功能很简单,就是监控HSE是否实效(如果系统使用HSE作为主时钟 ...

  3. Android调用 Webservice报org.ksoap2.serialization.SoapPrimitive(转)

    android Webservice开发的时候一般情况下大家接受webservice服务器返回值的时候都是使用SoapObject soapObject = (SoapObject) envelope ...

  4. java浮点类型计算

    java浮点类型需要采用java.math.*这个工具包,这样的计算结果才是我们想要的.呵呵 import java.math.BigDecimal; import java.text.NumberF ...

  5. 【HDOJ】4986 Little Pony and Alohomora Part I

    递推.设n个盒子的Spell次数为S(n),期望为E(n).当有n个盒子时,可能第n把钥匙在第n个盒子中,此时的Spell次数应该为(n-1)!+S(n-1):当第n把钥匙不在第n个盒子中,混合排列, ...

  6. Niagara解决设备连接应用的软件框架平台技术。

    Niagara 是Tridium公司所研发的设计用于解决设备连接应用的软件框架平台技术. Niagara是一种应用框架,或者说是软件框架,特别设计用于应对智能设备所带来的各种挑战,包括设备连接到企业级 ...

  7. COJN 0483 800501求最大非空子矩阵

    800501求最大非空子矩阵 难度级别:B: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩 ...

  8. -_-#【Mac】快捷操作

    快捷键 command + 拖拽 = 剪切option + 拖拽 = 复制command + option + 拖拽 = 快捷方式 command + ] 前进command + [ 后退 comma ...

  9. 【转】显示Ubuntu文件浏览器的地址栏--不错

    原文网址:http://www.blogbus.com/anythingok-logs/144447448.html Ubuntu默认使用nautilus作为其可视化的文件浏览器,其默认值不显示地址栏 ...

  10. Android Develop 之 Ddevelop WorkFlow Basics

    Android应用程序的开发流程一言以蔽之,可以用一图五步概括.一图如下. 第一步:安装.安装开发环境,包括JDK,Android Studio,SDK Manager(通常下载Android Stu ...