标准C语言没有像C++那样可以直接调用的STL容器,所以在c语言中实现容器功能就得自己去定义堆栈结构:

stack.h

/************this head file defines a stack******************
 ********************created on:2010-4-21********************
 ********************modify on: 2010-4-21********************
 ********************developed by御风**********************/
/*modify log:NULL*/
#ifndef __STACK_H__
#define __STACK_H__
#define ST_STACK_SIZE 1024  //定义栈空间大小
#define ST_FAILED (char)0xa5  //出错返回值
/*栈结构定义*/
typedef struct {
    char stack[ST_STACK_SIZE];  //存储空间
    int top;  //当前栈顶
} Stack_T;
void initStack(Stack_T* stack); //初始化栈!!!必须在使用栈前调用,否则将出现不明错误
char popData(Stack_T* stack); //弹出栈顶数据
char readData(Stack_T* stack); //读出数据(不对原数据删除,只读)
char pushData(Stack_T* stack, char data); //单个数据压栈
char pushNData(Stack_T* stack, char* buffer, int N); //多个数据压栈
#endif

stack.h

#include "stack.h"
void initStack(Stack_T* stack) {
    stack->top = ;
}
char popData(Stack_T* stack) {
    if (stack->top) {
        stack->top--;
        return stack->stack[stack->top];
    }
    ];
}
char readData(Stack_T* stack) {
    if (stack->top) {
        ];
    }
    return ST_FAILED ;
}
char pushData(Stack_T* stack, char data) {
    if (stack->top < ST_STACK_SIZE) {
        stack->stack[stack->top] = data;
        stack->top++;
        ;
    }
    return ST_FAILED ;
}
char pushNData(Stack_T* stack, char* buffer, int N) {
    if (ST_STACK_SIZE - stack->top >= N) {
        while (N--) {
            stack->stack[stack->top] = *(buffer++);
            stack->top++;
        }
        ;
    }
    return ST_FAILED ;
}

main.c

#include "stack.h"
#include <stdio.h>
void main() {
    char str[] = "\nthis is a stack test prog!";
    Stack_T stack;
    initStack(&stack);
    ) == ST_FAILED) {
        printf("插入数据错误!");
    }
    while (stack.top) {
        printf("%c", popData(&stack));
    }
}

堆栈C实现的更多相关文章

  1. 谈谈一些有趣的CSS题目(三)-- 层叠顺序与堆栈上下文知多少

    开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...

  2. History API与浏览器历史堆栈管理

    移动端开发在某些场景中有着特殊需求,如为了提高用户体验和加快响应速度,常常在部分工程采用SPA架构.传统的单页应用基于url的hash值进行路由,这种实现不存在兼容性问题,但是缺点也有--针对不支持o ...

  3. JVM学习(2)——技术文章里常说的堆,栈,堆栈到底是什么,从os的角度总结

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及到的知识点总结如下: 堆栈是栈 JVM栈和本地方法栈划分 Java中的堆,栈和c/c++中的堆,栈 数据结构层面的堆,栈 os层面 ...

  4. arcgis engine 中出现的内存堆栈溢出问题。

    两种解决方案: 1.循环加载mxd文档的时候出现的堆栈溢出,解决办法是每次循环结束时清空FeatureLayer,感觉并不好,但是确实可以实现功能. 2.循环调取featureclass的search ...

  5. java 堆栈 理解

    Java 中的堆和栈 堆和栈:分为数据结构的堆和栈以及内存中的堆和栈,两种理解应区分开. 数据结构中的堆: 堆实际上指的就是(满足堆性质的)优先队列的一种数据结构,第1个元素有最高的优先权. 堆性质: ...

  6. python列表模拟堆栈和队列

    对列特点:先进先出.后进后出 用列表insert.pop模拟进队出队: >>> l = [] >>> l.insert(0,'p1') >>> l ...

  7. GDB调试汇编堆栈过程分析

    GDB调试汇编堆栈过程分析 分析过程 这是我的C源文件:click here 使用gcc - g example.c -o example -m32指令在64位的机器上产生32位汇编,然后使用gdb ...

  8. 20145212——GDB调试汇编堆栈过程分析

    GDB调试汇编堆栈过程分析 测试代码 #include <stdio.h> short val = 1; int vv = 2; int g(int xxx) { return xxx + ...

  9. C和指针 第十七章 经典数据类型 堆栈 队列 二叉树

    堆栈: // // Created by mao on 16-9-16. // #ifndef UNTITLED_STACK_H #define UNTITLED_STACK_H #define TR ...

  10. gdb调试汇编堆栈过程的学习

    gdb调试汇编堆栈过程的学习 以下为C源文件 使用gcc - g code.c -o code -m32指令在64位的机器上产生32位汇编,然后使用gdb example指令进入gdb调试器: 进入之 ...

随机推荐

  1. poj 2153

    题意:题目还是很简单的,就是求Li Ming 在班上的排名,而且成绩是相加的. 思路:用map就行.不然好像用qsort+二分也可以,不过我在那里碰到了一些状况,然后就没用这种方法了,简单的map就可 ...

  2. CentOS 7部署flume

    CentOS 7部署flume 准备工作: 安装java并设置java环境变量,在`/etc/profile`中加入 export JAVA_HOME=/usr/java/jdk1.8.0_65 ex ...

  3. best matched pair

    今天的模拟赛,被虐的不行....英文太差,弄不懂题意,弄懂题意了还不会... 感觉快要受不了了... #include <iostream> #include <cstdio> ...

  4. nyoj925_国王的烦恼_并查集

    国王的烦恼 时间限制:3000 ms  |  内存限制:65535 KB 难度:2   描述 C国由n个小岛组成,为了方便小岛之间联络,C国在小岛间建立了m座大桥,每座大桥连接两座小岛.两个小岛间可能 ...

  5. 使用CSS中margin和padding的基础和注意事项

    在CSS中,margin和padding是页面布局的主要属性,如何灵活有效使用对于基于DIV+CSS设计网页方法是非常重要的,笔者经常使用且经常误使用,所以根据经验和网上资料整理出切合自己的内容,以备 ...

  6. 使用iScroll时,input等不能输入内容的解决方法(share)

    最近做移动平台的应用,使用iscroll使屏幕上下滑动.发现当使用iscroll后,input等不能输入内容了.只要在iscroll.js文件中加入如下代码就ok了. function allowFo ...

  7. 【leetcode】Text Justification(hard) ☆

    Given an array of words and a length L, format the text such that each line has exactly L characters ...

  8. 【leetcode】 Search a 2D Matrix (easy)

    Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the follo ...

  9. js闭包原理

    一.定义 官方解释:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. ****定义在函数中的函数,并且可在外部访问得到.(正常情况下我们是无法 ...

  10. ASP.NET Ajax 简单实例

    本实例讲解Ajax 调用WCF服务. 1.建立一个网站,并在其中添加一个WCF服务(这里需要选择Ajax-Enabled WCF Service). 2.IDE会自动生成一个SVC文件. 3.服务代码 ...