[数据结构]程杰《大话数据结构》书中的顺序栈源码(

【大话数据结构C语言】11 栈的顺序存储结构及其基本操作 系列文章参考资料为《大话数据结构》,源码为个人私有,未经允许不得转载 技术交流群或资料添加微信号:CoderAllen,回复关键字即可 顾名思义,根据前边顺序表的实现就会发现和栈的存储方式非常相似,不过是栈对数据的存取有一定的限制规则,而顺序表示没有的,这其实是最大的区别 从栈的特性可以知道,下标为0的一端作为栈底比较好,因为首元素都存在栈底,变化最小 栈的定义: typedef int SElemType; /* SElemType类型根据实际情况而定,这里假设为int */ /* 顺序栈结构 */. 阅读详情
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#include "time.h"
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0

#define MAXSIZE 20 /* 存储空间初始分配量 */
typedef int Status;
typedef int SElemType; /* SElemType 类型根据实际情况而定,这里假设为 int */

/* 顺序栈结构 */
typedef struct {
	SElemType data[MAXSIZE];/* 存放数据的数组 */
	int top;                /* 用整数来做栈顶指针 */
} SqStack;

/* 访问一个元素 */
Status visit(SElemType c) {
	printf("%d ", c);
	return OK;
}

/* 构造一个空栈 S */
Status InitStack(SqStack *S) {
	/* S.data=(SElemType *)malloc(MAXSIZE*sizeof(SElemType)); */
	S->top = -1;
	return OK;
}
/* 把 S 置为空栈 */
Status ClearStack(SqStack *S) {
	S->top = -1;
	return OK;
}
/* 若栈 S 为空栈,则返回 TRUE,否则返回 FALSE */
Status StackEmpty(SqStack S) {
	if (S.top == -1)
		return TRUE;
	else
		return FALSE;
}
/* 返回 S 的元素个数,即栈的长度 */
int StackLength(SqStack S) {
	return S.top + 1;
}
/* 若栈不空,则用 e 返回 S 的栈顶元素,并返回 OK;否则返回 ERROR */
Status GetTop(SqStack S, SElemType *e) {
	if (S.top == -1)
		return ERROR;
	else
		*e = S.data[S.top];
	return OK;
}
/* 插入元素 e 为新的栈顶元素 */
Status Push(SqStack *S, SElemType e) {
	if (S->top == MAXSIZE - 1) /* 栈满 */
	{
		return ERROR;
	}
	S->top++;
	/* 栈顶指针增加一 */
	S->data[S->top] = e; /* 将新插入元素赋值给栈顶空间 */
	return OK;
}
/* 若栈不空,则删除 S 的栈顶元素,用 e 返回其值,并返回 OK;否则返回 ERROR */
Status Pop(SqStack *S, SElemType *e) {
	if (S->top == -1)
		return ERROR;
	*e = S->data[S->top];
	S->top--;
	return OK;
	/* 将要删除的栈顶元素赋值给 e */
	/* 栈顶指针减一 */
}
/* 从栈底到栈顶依次对栈中每个元素显示 */
Status StackTraverse(SqStack S) {
	int i;
	i = 0;
	while (i <= S.top) {
		visit(S.data[i++]);
	}
	printf("\n");
	return OK;
}
int main() {
	int j;
	SqStack s;
	int e;
	if (InitStack(&s) == OK)
		for (j = 1; j <= 10; j++)
			Push(&s, j);
	printf("栈中元素依次为:");
	StackTraverse(s);
	Pop(&s, &e);
	printf("弹出的栈顶元素 e=%d\n", e);
	printf("栈空否:%d(1:空 0:否)\n", StackEmpty(s));
	GetTop(s, &e);
	printf("栈顶元素 e=%d 栈的长度为%d\n", e, StackLength(s));
	ClearStack(&s);
	printf("清空栈后,栈空否:%d(1:空 0:否)\n", StackEmpty(s));
	return 0;
}


# 执行 DISM 命令时出错 87 未在此上下文中识别出 restorehealth 选项。解决方法 阅读详情

相关推荐

不到200块!手把手教你用ZYNQ7010和AD9363攒一台自己的开源SDR硬件(附BOM清单)

本文详细介绍了如何用不到200元的预算,基于ZYNQ7010 FPGA和AD9363射频芯片打造一台功能完备的开源SDR硬件平台。从核心组件选型、PCB设计到焊接调试,提供全流程实战指南,特别适合预算有限的硬件爱好者和创客群体探索无线通信世界。

weixin_26854829的博客 479

大话数据结构

时间复杂度从小到大排序:0(1) < O(logn) < O(n) < O(nlogn) < O(n2 ) < O(n3 ) < 0(2n ) < O(nl) < O(nn )线性表特点要求:有且只有一个前驱点,一个后驱点。一一对应的关系。顺序存储:用一段连续的内存地址存储数据。如vector,优点是访问元素快O(1),插入删除慢O(N).链式存储:如list(其实是环型双向链表).优点是插入删除快O(1),访问元素慢O(N).........................................

baidu_16370559的博客 466

IEEE Access 上岸指南,附含泪整理的 cover letter 、沟通邮件、终版文档等资料包

终于上岸了! 我是一个小硕,本科期间发表过两篇水文,奈何学校有更高的毕业要求,只能硬着头皮尝试一下 SCI。 想投 IEEE Access 的朋友都应该知道 小木虫论坛 对这个期刊的讨论,褒贬不一,有的人说是大水刊,有的人说有难度。 比如: @wow_: 不可否认,灌水期刊。只要之前中过一篇,再投基本没有不录用的!我们实验室其他老师说过一区除外的收费期刊都应该禁止灌水。 @pssp: 审稿人还...

kurryluo的博客 1万+

循环队列表示与实现

Code//循环队列的表示与实现#include<stdio.h>#include<malloc.h>#include<stdlib.h>#defineOK1#defineERROR0#defineTRUE1#defineFALSE0#defineOVERFLOW-2#defineMAXSIZE100structSqQueue{...

weixin_30535843的博客 439

56-FMC连接器电路设计

FMC连接器电路设计

weixin_66510961的博客 4722

STM32F407 CanOpen主机实战:对象字典配置与多电机CIA402协议驱动详解

本文详细介绍了基于STM32F407的CanOpen主机开发实战,重点解析了对象字典的配置流程与多电机CIA402协议驱动方法。通过使用objdictedit工具配置SDO和PDO参数,并整合CanFestival协议栈,实现了对多个伺服电机的稳定同步控制。文章提供了从硬件连接到代码调试的完整指南,帮助开发者快速掌握工业现场的多轴运动控制技术。

plant的博客 529

01顺序栈_Stack

#include<stdio.h> #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSIZE 20 /* 存储空间初始分配量 */ typedef int Status; typedef int SElemType; /* SElemType类型根据实际情况而定,这里假设为int */ /* 顺序栈结构 */ typedef struct { SElemType data[MAXSIZE

AKK188888881的博客 334

华为使用MicroG安装并使用Google服务教程

鉴于众多华为手机用户因无法使用Google服务而感到不便,我经过多次摸索和测试,总结了一份简单易懂的教程,希望能够帮助到大家。无论是需要使用Google Play商店下载应用,还是需要使用Google服务进行工作和学习,本文将详细介绍如何在华为手机上安装并使用Google服务。二、前置条件软件要求:Aurora Store(替代Google Play商店)、MicroG Companion、MicroG Server(替代Google框架)

weixin_41926602的博客 3万+

数据结构之栈(顺序栈和链栈)(c语言附完整代码)

① 栈是一种特殊的线性表,它只允许在固定的一端进行插入和删除元素的操作。② 进行数据插入的删除和操作的一端,称为栈顶,另一端则称为栈底。③ 栈中的元素遵守后进先出的原则,即 LIFO原则(Last In First Out)栈也称为后进先出表。④栈的插入操作通常称为进栈或者入栈,栈的删除操作通常称为出栈或退栈。示意图:栈的顺序存储结构称为顺序栈声明顺序栈int top;//栈指针 } SqStack;栈的链式存储结构称为链栈声明链栈。

m0_62795460的博客 5841

uniapp [微信小程序] - 详解微信小程序端接入mqtt全流程及示例源码教程,uniApp微信小程序端如何接入MQTT插件并实现连接/断开+发布订阅+消息队列+离线重连等各种示例代码(开箱即用)

uniapp微信小程序接入MQTT,uniapp中使用mqtt,uniapp 微信小程序端接入mqtt示例代码教程,适用于微信小程序的MQTT插件,uniapp开发微信小程序连接mqtt,uniApp微信小程序接入MQTT协议,uniapp vue3微信小程序使用MQTT的小例子接入流程,使用uniapp开发小程序接入mqtt,如何在uniapp项目中使用mqtt,uniapp mqtt的使用示例,mqtt连接报错,如何在项目里集成mqtt,Mqtt协议,主动连接mqtt,订阅消息,实现发布,订阅和接收消息

🏆 前端领域优质创作者 2880

DRM遇到的实际问题及领悟(3)

DRM遇到的实际问题及领悟(3)

phmatthaus的专栏 635

顺序栈的实现代码_栈的顺序存储结构及实现 | 大话数据结构

栈的应用有许多,这一篇着重讲栈的顺序存储结构及实现。01栈的顺序存储结构既然栈是线性表的特例,那么栈的顺序存储其实也是线性表顺序存储的简化,我们简称为顺序栈。线性表是用数组来实现的,想想看,对于栈这种只能一头插入删除的线性表来说,用数组哪一端来作为栈顶和栈底比较好?对,没错,下标为0的一端作为栈底比较好,因为首元素都存在栈底,变化最小,所以让它作栈底。我们定义一个top变量来指示栈顶元素...

weixin_39864489的博客 388

材料带隙预测(图神经网络)(⭐⭐)—— 用晶体图网络预测钙钛矿材料的能带隙,加速光伏材料筛选。技术栈:CGCNN、MEGNet、Materials Project数据集

钙钛矿太阳能电池以其高效率、低成本的优势迅速崛起,但传统“试错法”材料筛选效率极低,严重制约了光伏技术的迭代速度。近年来,基于图神经网络的材料带隙预测方法,特别是晶体图神经网络(CGCNN)和材料图网络(MEGNet),为这一问题提供了革命性的解决方案。本文系统梳理了材料带隙预测从传统计算到深度学习的演进历程,深入剖析了CGCNN与MEGNet的架构设计、数学原理及创新机制,详细阐述了Materials Project数据集的构建、特征工程与处理策略。

2201_76125393的博客 47

程杰《大话数据结构》4-1 顺序栈(C语言源码+运行结果)

#include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h" #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSIZE 20 /* 存储空间初始分配量 */ ...

春卷同学的博客 395

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

2024年大数据最全大话数据结构--栈与队列,2024年最新一年后斩获腾讯T3

s->data=e;因为3先出栈,就意味着,3曾经进栈,既然3都进栈了,那也就意味着,1和2已经进栈了,此时,2一定是在1的上面,就是更接近栈顶,那么出栈只可能是321,不然不满足123依次进栈的要求,所以此时不会发生1比2先出栈的情况。做法如图,数组有两个端点,两个栈有两个栈底,让一个栈的栈底为数组的始端,即下标为0处,另一个栈为栈的末端,即下标为数组长度n-1处。栈对线性表的插入和删除的位置进行了限制,并没有对元素进出的时间进行限制,也就是说,在不是所有元素都进栈的情况下,事先进去的元素也可以出栈,

2401_84591870的博客 417

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

数据结构概述

专栏原创出处:github-源笔记文件 ,github-源码 ,欢迎 Star,转载请附上原文出处链接和本声明。 文章目录1.数据结构2.逻辑结构2.1 逻辑结构的分类2.2 常见的数据逻辑结构层次关系图3.存储结构4.逻辑结构和存储结构的区别参考 1.数据结构 相互之间存在一种或多种特定关系的数据元素的集合称为「数据结构」。按照视点的不同,数据结构可以分为「逻辑结构」和「存储结构」。 2....

2.wa 782

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

大话数据结构之三(栈和队列)

栈的定义 栈是仅限有表尾进行插入和删除操作的线性表 允许插入和删除操作的一端称为栈顶,别一端称为栈底。不包含任何数据元素的栈称为空栈。栈又称为先进后出(Last In First Out)的线性表,简称为LIFO结构。 栈的插入操作叫做进栈,也称压栈、入栈。 栈的删除操作叫做出栈,也称弹栈 栈的抽象数据类型 栈的顺序存储结构 栈的插入和删除操作和时间复杂度均是O(...

weixin_30740295的博客 121

栈的链式存储(含源码)

在学习栈的过程中,由于顺序栈的最大长度需要提前确定,失去了链表的灵活性,于是我开始思考能否将链表与栈有机结合,之后在《大话数据结构》一书中找到了答案,也就是栈的链式存储,下面对我在使用C语言实现链栈过程中的问题加以总结与反思。#include<stdio.h> #include<stdlib.h> #define OK 1 #define ERROR 0 #define TRUE 1 #defin

kelvinmao的博客 598

求栈中元素个数算法_玩转数据 聊聊十大经典算法

算法的由来:9世纪波斯数学家提出的:“al-Khowarizmi”就是下图这位(感觉重要数学元素提出者貌似都戴了顶白帽子),开个玩笑,阿拉伯人对于数学史的贡献还是值得人敬佩的。本文作者:Damonare正文排序算法说明(1)排序的定义:对一序列对象根据某个关键字进行排序;输入:n个数:a1,a2,a3,...,an 输出:n个数的排列:a1',a2',a3',...,an',使得a1'...

weixin_39787594的博客 1933

排序_Sort

#include #include #include #include #include #include #include #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAX_LENGTH_INSERT_SORT 7 /* 用于

happylife1527的专栏 472

大话数据结构 -- 图

图的各种定义 图是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。 在图形结构中,结点之间的关系可以是任意的,图中任意两个数据元素之间都可能相关。 图与其他数据结构的不同之处见下表: 数据结构 结点之间关系 数据元素名称 数据元素可否没有 线性表 一对一 元素 可以(...

Maggie的博客 7134

线性表的初始化

#include #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSIZE 20 /* 存储空间初始分配量 */ typedef int ElemType;/* ElemType类型根据实际情况而定,这里假设为int */ typedef int Status; /* Status是函数的类

你的天堂,我的地狱 4841

大话数据结构--顺序栈

// // main.cpp // 顺序栈 // // Created by Maggie on 18/8/21. // Copyright © 2018年 Maggie. All rights reserved. // #include &lt;iostream&gt; using namespace std; #define MAXSIZE 100 typedef int SE...

Maggie的博客 294
上一篇: [数据结构]程杰《大话数据结构》静态链表代码(
下一篇: [数据结构]程杰《大话数据结构》链栈代码
ilikeprograming
博客等级 码龄14年 46粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值