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. VitamioBundle-master

    1. 下载资源 (1) 核心插件 VitamioBundle 下载地址:https://github.com/yixia/VitamioBundle (2) 官方示例 VitamioDemo 下载地址 ...

  2. BZOJ 1010 [HNOI2008]玩具装箱toy

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 7184  Solved: 2724[Submit][St ...

  3. 【贪心+堆】XMU 1584 小明的烦恼

    题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1584 题目大意: 给n(n<=100 000)个任务的耗时和截至时间,问最少不能 ...

  4. A - 敌兵布阵 - hdu 1166

    Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些 ...

  5. Python之路【第一篇】:Python前世今生

    Python简介 Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解 ...

  6. mysql数据库sql常用命令

    1.查看索引:mysql> show index from tblname; 2.利用索引查询:SELECT * FROM product WHERE ID > =(select id f ...

  7. 国内三大PT(Private Tracker)站分析

    除这一行外,下面全部内容都是转载.出处不明. 国内三大PT(Private Tracker)站分析 先郑重的声明一下:本文以下的内容所有是复制粘贴的,不代表老夫的观点. 事实上内容我也没细致看. 贴这 ...

  8. SHELL网络爬虫实例剖析--转载

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://nolinux.blog.51cto.com/4824967/1552472 前天 ...

  9. PHP 将Base64图片保存到 Sae storage

    <?php $file_dir='tu/'.date("Y/m/d").'/'; $fileName=create_guid(); $storage = new SaeSto ...

  10. 基于Android Volley的网络请求工具

    基于Android Volley的网络请求工具. 一.说明 AndroidVolley,Android Volley核心库及扩展工程.AndroidVolleySample,网络请求工具示例工程.Re ...