C基础--栈的静态和动态生成

main.c 文件

#include <stdio.h>
#include "stack.h"
int main(void)
{
    char *str = "abcdefghijklmn";

    init_stack(3);        //创建动态栈
    while (*str != ‘\0‘) {
        push(*str);
        str++;
    }
    while (is_empty() == 0)
        putchar(pop());
    putchar(‘\n‘);
    destory_stack();        //销毁动态栈

    return 0;
}

stack.c文件

#include <stdio.h>
#include <stdlib.h>
/*
static char stack[512] = {0};    //数据栈
static int top = 0;        //栈指针
void push(char ch)
{
    stack[top++] = ch;
}
char pop(void)
{
    return stack[--top];
}
int is_empty(void)
{
    return top == 0;
}
int is_full(void)
{
    return top == 512;
}
*/
static int sz = 512;
static char *stack;    //数据栈
static int top = 0;        //栈指针
void init_stack(int size)
{
    if (size == 0)
        size = sz;
    else
        sz = size;
    stack = (char *)malloc(sz);
}
void destory_stack(void)
{
    free(stack);
}
void push(char ch)
{
    if (top == sz)
    {
        sz += sz;
        stack = realloc(stack, sz);
    }
    stack[top++] = ch;
}
char pop(void)
{
    return stack[--top];
}
int is_empty(void)
{
    return top == 0;
}
int is_full(void)
{
    return top == sz;
}

stack.h文件

extern void push(char ch);
extern char pop(void);
extern int is_empty(void);
extern int is_full(void);
extern void init_stack(int size);
extern void destory_stack(void);
时间: 2024-10-13 00:09:42

C基础--栈的静态和动态生成的相关文章

IT菜鸟之路由器基础配置(静态、动态、默认路由)

路由器:连接不同网段的设备 企业级路由和家用级路由的区别: 待机数量不同(待机量) 待机量:同时接通的终端设备的数量 待机量的值越高,路由的性能越好 别墅级路由,表示信号好,和性能无关 交换机:背板带宽(专业术语)是内部的传输速度 网关:是用来处理不同网段数据通信 网关地址一般是路由器的地址 no 任何生效性的操作都可以使用no使其失效 rip Routing Information Protocol 路由信息协议 destination host unreachable 目标主机不可达 sho

sitemap.xml 静态和动态生成页面 shopnc二次开发 动态生成sitemap.xml

Sitemap 可方便网站管理员通知搜索引擎他们网站上有哪些可供抓取的网页.最简单的 Sitemap 形式,就是XML 文件,在其中列出网站中的网址以及关于每个网址的其他元数据(上次更新的时间.更改的频率以及相对于网站上其他网址的重要程度为何等),以便搜索引擎可以更加智能地抓取网站. 目前有两种格式 一.Google SiteMap <urlset xmlns=“网页列表地址”> <url> <loc>网址</loc> <lastmod>2005

VS2008 动态库和静态库的生成和加载

第一:动态库和静态库的生成: 1) 新建一个生成dll工程: 文件->新建->项目->Win32->Win32控制台应用程序 输入项目名称:dllTest ,项目路径:D:\VC 确定 下一步 应用程序类型:选择DLL 完成 2) 编写代码: 2-1) 增加一个头文件:dllTest.h #define ICILIB_UTIL_API __declspec(dllexport)  //生成动态库时,同时在Debug或Release目录下生成.lib和.dll文件. class IC

[Java Web]动态生成静态页

最近手机APP需要加一个分享功能.考虑到分享页面的点击量会远远大于注册用户量,为了减少服务器压力决定将分享页面生成html静态页供用户访问. 生成静态页的总体思路为: 从数据库中查找所需的数据 将数据嵌入到html代码中 把生成好的html代码通过文件流上传到服务器 数据嵌入可以通过两种方法实现:html模板替换或jsp动态生成. 1.html模板生成: 流程: 客户端向后端发出http请求 后端从数据库中查找需要的数据 从服务器找到对应的模板文件,替换其中内容并上传到服务器 将上传后得到的ur

malloc,colloc,realloc内存分配,动态库,静态库的生成与调用

 1.在main方法里面直接定义一个非常大的数组的时候,可能会出现栈溢出:错误代码演示: #include<stdio.h> #include<stdlib.h> void main() { int a[1024 * 1024]; int num = 100; system("pause"); } 错误截图: 2.在定义数组的时候要定义数组的长度,否则会出现错误.(特例:在GCC编译器下,不会出现错误(因为标准不一样)). 3.打印并且赋值的是: for (

后台动态生成静态select标签的option项

以下为代码示例: <select id="Category_<%#Eval("BTUserID") %>" name="Category_<%#Eval("BTUserID") %>" disabled on onchange=setHourlyCost("<%#Eval("BTUserID") %>") style="width:20

MVC 根据模板动态生成静态页面

不是自己想出来的,找了好久没有找到相关的内容,根据源码发现 返回视图时时返回的ActionResult 类型的对象,然后执行ExecuteResult 方法,源码如下: 1 public override void ExecuteResult(ControllerContext context) 2 { 3 if (context == null) 4 { 5 throw new ArgumentNullException("context"); 6 } 7 if (string.Is

Java逆向基础之动态生成类

为什么有这个东西,一方面时AOP框架的需要,另一方面是增加软件逆向的难度 动态生成类的技术目前大体上分为两类,一类是通过操作字节码框架如cglib/Javassist去实现,另一类就是JNI方式,调用dll/so库,内存中动态还原.这两种方式都能实现隐藏类 看一个Javassist动态生成类的例子 package com.vvvtimes; import java.lang.reflect.Modifier; import javassist.ClassPool; import javassis

在Vue项目中动态生成二维码 阿星小栈

一.使用jquery.qrcode生成二维码 1.首先在页面中加入jquery库文件和qrcode插件 <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="jquery.qrcode.min.js"></script> 2.在页面中需要显示二维码的