#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <iostream>

using std::cout;

typedef int SElemType;
const int STACK_INIT_SIZE = 100;
const int STACKINCREMENT = 10;

typedef struct {
    SElemType *base;
    SElemType *top;
    int stacksize;
} SqStack;

bool InitStack(SqStack &S);

bool DestoryStack(SqStack &S);

bool ClearStack(SqStack &S);

bool StackEmpty(SqStack S);

int StackLength(SqStack S);

bool GetTop(SqStack S, SElemType &e);

bool Push(SqStack &S, SElemType e);

bool Pop(SqStack &S, SElemType &e);

bool StackTraverse(SqStack S);

int main() {
    SqStack s;
    InitStack(s);
    Push(s, 5);
    Push(s, 6);
    Push(s, 7);
    Push(s, 8);
    int a;
    Pop(s, a);
    cout << a << std::endl;
    GetTop(s, a);
    cout << a << std::endl;

    if (StackEmpty(s)) {
        printf("is empty!\n");
    } else {
        printf("is not empty!\n");
    }
    SElemType b;
    printf("%d\n", StackLength(s));
    StackTraverse(s);
    while (!StackEmpty(s)) {
        int b;
        Pop(s, b);
        cout << b << std::endl;
    }
    ClearStack(s);
    DestoryStack(s);
}

bool StackTraverse(SqStack S) {
    if (S.top == S.base) {
        return false;
    }
    while (S.base < S.top) {
        printf("%d\t", *(S.base++));
    }
    printf("\n");
    return true;
}

bool DestoryStack(SqStack &S) {
    free(S.base);
    S.base = NULL;
    return true;
}

bool ClearStack(SqStack &S) {
    S.top = S.base;
    return true;
}

int StackLength(SqStack S) {
    if (S.base == S.top) {
        return 0;
    }
    return (int) (S.top - S.base);
}

bool StackEmpty(SqStack S) {
    if (S.top == S.base) {
        return true;
    }
    return false;
}

bool InitStack(SqStack &S) {
    S.base = (SElemType *) malloc(sizeof(SElemType) * STACK_INIT_SIZE);
    if (!S.base) {
        exit(OVERFLOW);
    }
    S.top = S.base;
    S.stacksize = STACK_INIT_SIZE;
    return true;
}

bool GetTop(SqStack S, SElemType &e) {
    if (S.top == S.base) {
        return false;
    }
    e = *(S.top - 1);
    return true;
}

bool Push(SqStack &S, SElemType e) {
    if (S.top - S.base >= S.stacksize) {
        S.base = (SElemType *) realloc(S.base, (S.stacksize + STACKINCREMENT) * sizeof(SElemType));
        if (!S.base) {
            exit(OVERFLOW);
        }
        S.top = S.base + S.stacksize;
        S.stacksize += STACKINCREMENT;
    }
    *S.top++ = e;
    return true;
}

bool Pop(SqStack &S, SElemType &e) {
    if (S.top == S.base) {
        return false;
    }
    e = *--S.top;
    return true;
}

数据结构C语言版-栈的更多相关文章

  1. c++学习书籍推荐《清华大学计算机系列教材:数据结构(C++语言版)(第3版)》下载

    百度云及其他网盘下载地址:点我 编辑推荐 <清华大学计算机系列教材:数据结构(C++语言版)(第3版)>习题解析涵盖验证型.拓展型.反思型.实践型和研究型习题,总计290余道大题.525道 ...

  2. 数据结构C语言版 有向图的十字链表存储表示和实现

    /*1wangxiaobo@163.com 数据结构C语言版 有向图的十字链表存储表示和实现 P165 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h> ...

  3. 数据结构C语言版 表插入排序 静态表

    数据结构C语言版 表插入排序.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情./*  数据结构C语言版 表插入排序  算法10.3 P267-P270  编译 ...

  4. 数据结构C语言版 弗洛伊德算法实现

    /* 数据结构C语言版 弗洛伊德算法  P191 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h>#include <limits.h> # ...

  5. 《数据结构-C语言版》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明

    <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明 先附上文档归类目录: 课本源码合辑  链接☛☛☛ <数据结构>课本源码合辑 习题集全解析  链接☛☛☛  ...

  6. 【数据结构(C语言版)系列二】 栈

    栈和队列是两种重要的线性结构.从数据结构角度看,栈和队列也是线性表,但它们是操作受限的线性表,因此,可称为限定性的数据结构.但从数据类型角度看,它们是和线性表大不相同的两类重要的抽象数据类型. 栈的定 ...

  7. 深入浅出数据结构C语言版(8)——后缀表达式、栈与四则运算计算器

    在深入浅出数据结构(7)的末尾,我们提到了栈可以用于实现计算器,并且我们给出了存储表达式的数据结构(结构体及该结构体组成的数组),如下: //SIZE用于多个场合,如栈的大小.表达式数组的大小 #de ...

  8. 深入浅出数据结构C语言版(7)——特殊的表:队列与栈

    从深入浅出数据结构(4)到(6),我们分别讨论了什么是表.什么是链表.为什么用链表以及如何用数组模拟链表(游标数组),而现在,我们要进入到对线性表(特意加了"线性"二字是因为存在多 ...

  9. 数据结构(C语言版)顺序栈相关算法的代码实现

    这两天完成了栈的顺序存储结构的相关算法,包括初始化.压栈.出栈.取栈顶元素.判断栈是否为空.返回栈长度.栈的遍历.清栈.销毁栈.这次的实现过程有两点收获,总结如下: 一.清楚遍历栈的概念 栈的遍历指的 ...

随机推荐

  1. Post提交带参网址

    前端 $(function(){ var obj=$('#form1'); obj.validate({ submitHandler: function (form){ var data={}; da ...

  2. JS的基本(原始)数据类型

    1.boolean  true & false 2.null   空值类型 3.undefined  未定义类型 4.number    数值类型 5.string    字符串类型 6.sy ...

  3. c语言:第二次作业,循环结构

    1.本章学习总结(2分) 1.1 思维导图 1.2 本章学习体会及代码量学习体会 1.2.1 学习体会 循环相比分支和顺序结构难了许多,相对的来说我的c语言的基础比之前有提高,但是还是很多题想了很久也 ...

  4. Game Engine Architecture 10

    [Game Engine Architecture 10] 1.Full-Screen Antialiasing (FSAA) also known as super-sampled antialia ...

  5. heat-engine组件

    1.heat-engine启动一个rpc server端,EngineService在初始化时加载heat.clients插件和初始化env, env中包括各种资源关键字对应的映射类和constrai ...

  6. React中this.props的主要属性

    this.props主要包含:history属性.location属性.match属性 ①history属性又包含 ②location属性又包含 ③match属性又包含

  7. Centos7关闭防火墙

    CentOS 7.0默认使用的是firewall作为防火墙 systemctl stop firewalld.service #停止firewall systemctl disable firewal ...

  8. flutter Dialog里ListView的问题

    showDialog( context: context, builder: (ctx) { return // Dialog( // child: Container( // padding: Ed ...

  9. Codeforces Round #553 (Div. 2) D题

    题目网址:http://codeforces.com/contest/1151/problem/D 题目大意:给出n组数对,(ai , bi),调整这n组数对的位置,最小化 ∑(ai*( i -1)+ ...

  10. IDEA中,将项目加入maven管理。

    在项目上右键->Add Framework Support Choose Maven 生成pom.xml 在<project>下配置国内仓库 <properties>&l ...