数据结构C语言版-栈
#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语言版-栈的更多相关文章
- c++学习书籍推荐《清华大学计算机系列教材:数据结构(C++语言版)(第3版)》下载
百度云及其他网盘下载地址:点我 编辑推荐 <清华大学计算机系列教材:数据结构(C++语言版)(第3版)>习题解析涵盖验证型.拓展型.反思型.实践型和研究型习题,总计290余道大题.525道 ...
- 数据结构C语言版 有向图的十字链表存储表示和实现
/*1wangxiaobo@163.com 数据结构C语言版 有向图的十字链表存储表示和实现 P165 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h> ...
- 数据结构C语言版 表插入排序 静态表
数据结构C语言版 表插入排序.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情./* 数据结构C语言版 表插入排序 算法10.3 P267-P270 编译 ...
- 数据结构C语言版 弗洛伊德算法实现
/* 数据结构C语言版 弗洛伊德算法 P191 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h>#include <limits.h> # ...
- 《数据结构-C语言版》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明
<数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明 先附上文档归类目录: 课本源码合辑 链接☛☛☛ <数据结构>课本源码合辑 习题集全解析 链接☛☛☛ ...
- 【数据结构(C语言版)系列二】 栈
栈和队列是两种重要的线性结构.从数据结构角度看,栈和队列也是线性表,但它们是操作受限的线性表,因此,可称为限定性的数据结构.但从数据类型角度看,它们是和线性表大不相同的两类重要的抽象数据类型. 栈的定 ...
- 深入浅出数据结构C语言版(8)——后缀表达式、栈与四则运算计算器
在深入浅出数据结构(7)的末尾,我们提到了栈可以用于实现计算器,并且我们给出了存储表达式的数据结构(结构体及该结构体组成的数组),如下: //SIZE用于多个场合,如栈的大小.表达式数组的大小 #de ...
- 深入浅出数据结构C语言版(7)——特殊的表:队列与栈
从深入浅出数据结构(4)到(6),我们分别讨论了什么是表.什么是链表.为什么用链表以及如何用数组模拟链表(游标数组),而现在,我们要进入到对线性表(特意加了"线性"二字是因为存在多 ...
- 数据结构(C语言版)顺序栈相关算法的代码实现
这两天完成了栈的顺序存储结构的相关算法,包括初始化.压栈.出栈.取栈顶元素.判断栈是否为空.返回栈长度.栈的遍历.清栈.销毁栈.这次的实现过程有两点收获,总结如下: 一.清楚遍历栈的概念 栈的遍历指的 ...
随机推荐
- 初识Scratch 3.0
之前在帮朋友搜集少儿编程教育资料的时候,发现了麻省理工开发的积木式编程语言的Scratch,最近有空玩了下,感觉很惊艳,我能想象用它做一些有趣的事情,Scratch把编程元素变成像乐高积木一样,可以通 ...
- Android:得到WebView当前页的html源码
WebView没有提供直接的API,需要用JavaScript变通处理一下.本文试图总结一个最简单.优雅的代码. 有两步: 1.先创建一个JavaScript接口类: class MyJavaScri ...
- 微信小程序问题---数据传输长度为 1275870 已经超过最大长度 1048576
开发微信小程序时,遇到数据传输长度为 1095538 已经超过最大长度 1048576的问题. 这是setData时操作数据过大导致,一般出现在请求返回数据过大,我们又将这个数据一次性用setData ...
- java.lang.RuntimeException: Class "org.apache.maven.cli.MavenCli$CliRequest" not found
IDEA版本:14.1 maven版本:apache-maven-3.3.9-bin IDEA的maven项目,在pom文件执行Maven--Reimport,引入jar包依赖,报错java.lang ...
- tensorflow安装和初使用
本文的目的是为了复习并帮助刚开始起步使用机器学习的人员 1.安装准备 为了方便就在window上安装,我的是window10 的笔记本,首先准备python 因为tensorflow在仅仅支持wind ...
- python标准库之operator(运算符模块)
operator模块提供了一系列与Python自带操作一样有效的函数.例如:operator.add(x, y)和表达式x+y是等效的.那些特殊类的方法都有自己的函数名:为了方便起见,一些函数名是没有 ...
- 【docker 入门 - 01】- Docker 在 Centos7 上安装与测试
一.学习文档 官网网站: https://www.docker.com 中文网站:http://www.docker-cn.com 官方安装文档:https://docs.docker.com/ins ...
- poj_3045 贪心
Farmer John's N (1 <= N <= 50,000) cows (numbered 1..N) are planning to run away and join the ...
- mpvue前期准备
一.配置环境: 1.下载node.js,去官网上下载相应的版本.http://nodejs.cn 2.安装就是下一步下一步,检查是否安装成功,打开cmd.输入 node -v 会出现版本号. 3.推 ...
- 电话号自动识别之bug解决汇总
今天测试一个defect: “联系我们”页显示的电话号码,在不同浏览器显示效果不统一,有些浏览器自动识别电话号码并强制添加了样式. 网络搜索发现,其它website 也有类似问题,例如:http:// ...