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. 如何在一台机子上启动两个TOMCAT

    同时启动两个tomcat设置,具体如下: 1.不要设置CATALINA_HOME 2.分别修改安装目录下的conf子目录中的server.xml文件: a.修改http访问端口为不同的端口,将8080 ...

  2. Cracking the coding interview--Q2.2

    Implement an algorithm to find the kth to last element of a singly linked list. 实现一个算法寻找链表中倒数第K个数.. ...

  3. Java---IO加强(3)-IO流的操作规律

    一般写关于操作文件的读取的几个通用步骤!!! 1.明确源和目的. 源:InputStream Reader 一定是被读取的. 目的:OutputStream Writer 一定是被写入的. 2.处理的 ...

  4. HDOJ 1014 Uniform Generator(公约数问题)

    Problem Description Computer simulations often require random numbers. One way to generate pseudo-ra ...

  5. [Java] JavaMail 查询邮件

    上两篇提到如何发送邮件:JavaMail 发送 html 格式.带附件的邮件, JavaMail 简单案例.本文再演示下,如何读取邮箱上的邮件. 邮件内容的数据格式种类比较多,用户直接阅读邮件比较常见 ...

  6. [Data Structure] 二叉搜索树(Binary Search Tree) - 笔记

    1. 二叉搜索树,可以用作字典,或者优先队列. 2. 根节点 root 是树结构里面唯一一个其父节点为空的节点. 3. 二叉树搜索树的属性: 假设 x 是二叉搜索树的一个节点.如果 y 是 x 左子树 ...

  7. C++类型转换[转]

    转自 http://www.cnblogs.com/goodhacker/archive/2011/07/20/2111996.html C风格的强制类型转换(Type Cast)很简单,不管什么类型 ...

  8. openStack 云平台使用一般杂记

    1. To launch an instance,you must at least specify the flavor,image name,network,security group,keyp ...

  9. Java中直接输出一个类的对象

    例如 package com.atguigu.java.fanshe; public class Person { String name; private int age; public Strin ...

  10. 夏普比率(Sharpe Ratio)

    投资中有一个常规的特点,即投资标的的预期报酬越高,投资人所能忍受的波动风险越高:反之,预期报酬越低,波动风险也越低.所以理性的投资人选择投资标的与投资组合的主要目的为:在固定所能承受的风险下,追求最大 ...