前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >数据结构 ----- 栈(代码)

数据结构 ----- 栈(代码)

作者头像
meihuasheng
发布于 2021-03-18 03:08:17
发布于 2021-03-18 03:08:17
33100
代码可运行
举报
文章被收录于专栏:phpcodersphpcoders
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define ERROR 0
#define OK 1 
#define STACKSIZE 10;              //存储空间分配增量
#define STACK_INIT_SIZE 100;    //存储空间初始分配量

typedef int ElemType;
typedef int Status;

typedef struct
{
	ElemType* base;    //栈底
	ElemType* top;     //栈顶
	int stacksize;          //当前已分配的空间
}SqStack;

//初始化一个栈
Status initStack(SqStack &S)
{
	S.base = (ElemType *)malloc(100 * sizeof(ElemType));
	if (!S.base)
	{
		exit(0);
	}
	S.top = S.base;
	S.stacksize = 100;
	return OK;

}

//入栈操作
Status Push(SqStack& S, ElemType e)
{
	if (S.top - S.base >= S.stacksize)   //如果栈满就追加空间
	{                           //新增内存空间
		S.base = (ElemType*)realloc(S.base, (S.stacksize + 10) * sizeof(ElemType));
		if (!S.base) exit(0);
		S.top = S.base + S.stacksize;
		S.stacksize += 10;
	}
	*S.top++ = e;
	return OK;
}

//出栈操作
Status Pop(SqStack& S, ElemType &e)
{
	if (S.top == S.base) return ERROR;
	e = *--S.top;
	return OK;
}

//展示栈所有元素
Status Show(SqStack &S)
{
	int e;
	while (S.top != S.base)
	{
		Pop(S, e);
		printf("元素有%d\n", e);
	}
	return OK;
}




int main()
{
	SqStack S;
	int e;
	initStack(S);
	Push(S, 1);
	Push(S, 2);
	Push(S, 3);
	Push(S, 4);
	Push(S, 5);
	Push(S, 6);
	Pop(S, e);
	printf("%d\n", e);
	Pop(S, e);
	printf("%d\n", e);
	Show(S);
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/10/13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
数据结构 栈&队列
2-4 依次在初始为空的队列中插入元素a,b,c,d以后,紧接着做了两次删除操作,此时的队头元素是( ) 删除,移动头指针; 增加,移动尾指针; 删除a,b ,队头c 2-3 在一个链队列中,front和rear分别为头指针和尾指针,则插入一个结点s的操作为( ) 这道题目,我坚持自己的答案,就是这个答案! 2-1 若用大小为6的数组来实现循环队列,且当前front和rear的值分别为0和4。当从队列中删除两个元素,再加入两个元素后,front和rear的值分别为多少?  删除,front+
Kindear
2018/01/15
3.4K0
数据结构 栈&队列
数据结构——栈的详解[通俗易懂]
栈(stack)是限定仅在表尾进行插入或者删除的线性表。对于栈来说,表尾端称为栈顶(top),表头端称为栈低(bottom)。不含元素的空表称为空栈。因为栈限定在表尾进行插入或者删除,所以栈又被称为后进先出的线性表(简称LIFO:Last in, First out.结构)。
全栈程序员站长
2022/07/22
1.5K0
数据结构——栈的详解[通俗易懂]
数据结构:表达式求值
表达式求值是程序设计语言编译的一个最基本问题,其中任何一个表达式都是由操作数、运算符(±*/)、界限符(#,(,),[,] )组成。运算符和界限符统称算符。算符的优先级关系为(数学角度上):
全栈程序员站长
2022/07/02
2430
数据结构:表达式求值
PTA 7-2 符号配对(20 分)
7-2 符号配对(20 分) 请编写程序检查C语言源程序中下列符号是否配对:/*与*/、(与)、[与]、{与}。 输入格式: 输入为一个C语言源程序。当读到某一行中只有一个句点.和一个回车的时候,标志
Kindear
2017/12/29
6K0
【数据结构(C语言版)系列二】 栈
栈和队列是两种重要的线性结构。从数据结构角度看,栈和队列也是线性表,但它们是操作受限的线性表,因此,可称为限定性的数据结构。但从数据类型角度看,它们是和线性表大不相同的两类重要的抽象数据类型。
闪电gogogo
2018/10/10
1.4K0
【数据结构(C语言版)系列二】  栈
利用栈写一算法解决特定序列识别判断问题
question:试写一算法,识别依次读入的一个以@为结束字符序列是否为形如“序列1&序列2”模式的字符序列。其中序列1和序列2均不含字符&,且序列2是序列1的逆序列。例如,‘a+b&b+a’是属于该模式的字符序列,而'1&3&3&1'则不满足该字符序列。
戈贝尔光和热
2018/12/27
7960
栈(顺序栈)
栈是限制插入和删除只能在一个位置上进行的线性表。其中,允许插入和删除的一端位于表的末端,叫做栈顶(top),不允许插入和删除的另一端叫做栈底(bottom)。对栈的基本操作有 PUSH(压栈)和 POP (出栈),前者相当于表的插入操作(向栈顶插入一个元素),后者则是删除操作(删除一个栈顶元素)。栈是一种后进先出(LIFO)的数据结构,最先被删除的是最近压栈的元素。栈就像是一个箱子,往里面放入一个小盒子就相当于压栈操作,往里面取出一个小盒子就是出栈操作,取盒子的时候,最后放进去的盒子会最先被取出来,最先放进去的盒子会最后被取出来,这即是后入先出。下面是一个栈的示意图:
后端码匠
2020/12/09
9530
栈(顺序栈)
【数据结构】宜宾大学-计院-实验六
备注:1,2 任选一题 1.用栈的操作实现10进制数和d进制数的转换,并输出结果
六点半就起.
2024/11/19
650
【数据结构】宜宾大学-计院-实验六
找BUG
---- layout: default title: 找BUG category: [技术, C/C++] comments: true --- 找一找BUG 一段代码,实现一个pop,push,和getmin都是O(1)的方法. 最初源代码 伙伴代码如下,代码的地址可以通过这个访问: Ubuntu Pastebin https://paste.ubuntu.com/p/cX2Cq56PYt/ #include <stdio.h> #include <stdlib.h> #include <s
@坤的
2018/06/04
1.8K0
数据结构实验报告—栈和队列
任务:建立队列和栈来实现元素逆置 1.建立队列 2.建立栈 3.主函数调用队列和栈实现元素逆置
命运之光
2024/03/20
1920
数据结构实验报告—栈和队列
顺序栈的实现和两栈共享空间
顺序栈的实现和两栈共享空间 一.顺序栈的实现        栈(stack)是限定仅在表尾进行插入或删除操作的线性表。我们把允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),
猿人谷
2018/01/17
1.9K0
顺序栈的实现和两栈共享空间
C语言中缀表达式转后缀表达式
众所周知,计算机中不能直接用中缀表达式计算,形如(1+2)*(4-5)之类的,但是我们可以计算机可以很容易的通过后缀表达式来计算我们所输入的算式。所以我们就需要把中缀表达式转换为后缀表达式。下面是个人写的一点代码,大家可以参考。
earthchen
2020/09/24
1.7K0
栈的存储结构的实现(C/C++实现)
存档 1 #include "iostream.h" 2 #include <stdlib.h> 3 #define max 20 4 typedef char elemtype; 5 #i
Angel_Kitty
2018/04/09
5310
栈的存储结构的实现(C/C++实现)
C++栈的基本操作及原理和STL函数
第二种 status(这个表示函数状态 ,类型根据定义 ,如:typedef int Status 或 typedef char Stau)
莫浅子
2022/11/18
4290
C++栈的基本操作及原理和STL函数
栈的基本实现(更新中)
参考着严蔚敏的《数据结构(C语言版)》,用自己拿渣的可怜的C语言做了一下午的实现。。。也没能写出来几个。。。就很菜(气哭)。。。
李志伟
2019/12/17
5530
C语言逆波兰表达式计算(后缀表达式计算器)
刚开始学习c语言时,我们都学过输入一个数在输入一个操作数在输入要进行的计算方式,在输入另一个操作数,然后通过内置的+ - / 以及内置头文件 *math.h等操作进行计算 但是我们可不可以直接输入我们熟悉的算式才得出结果呢,答案是肯定的,我博客上一篇介绍了C语言把中缀表达式转换为后缀表达式有兴趣的读者可以去看看,有了上篇的知识,在加上本篇的内容就可以很容易做出一个中缀表达式计算器了有兴趣的读者可以看完本文去尝试一下,对自己的能力也是一种提升
earthchen
2020/09/24
2.1K0
链表实现栈的动态顺序存储实现—C语言
头文件 ElemType.h /*** *ElemType.h - ElemType的定义 * ****/ #ifndef ELEMTYPE_H #define ELEMTYPE_H typedef int ElemType; int compare(ElemType x, ElemType y); void visit(ElemType e); #endif /* ELEMTYPE_H */  DynaSeqStack.h /*** *DynaSeqStack.h - 动态顺序栈的定义 * **
WindCoder
2018/09/20
1.1K0
实验二 栈和队列的应用
实验目的 本次实验的目的在于使学生深入了解栈和队列的特征,掌握在实际问题背景下的灵活运用。 实验要求 正确设计和实现本程序,记录输出结果。 实验内容 1.队列的各种基本操作实现。 2.十进制数向N进制数据的转换。(栈的应用)
谙忆
2021/01/20
4190
c++ 链栈
#define MaxSize 100 #define OK 1 #define ERROR 0 /** 栈 * s=(a1,a2,a3,a4,a5) * a1 栈底 * a5 栈顶 * 入栈(压栈)push * 出栈(弹栈)pop * 案例1 - 进制转换,倒取余 * 案例2 - 括号匹配检测 * 案例3 - 表达式求值(算符优先算法:操作数、运算符、界限符) * ADT Stack { * 数据对象:D={ai|ai 属于 ElemSet ,i=1,2,3,4} * //tod
lascyb
2022/01/13
4880
数据结构——顺序栈
栈 定义:只能在表的一端(栈顶)进行插入和删除运算的线性表 逻辑结构:一对一关系 存储结构 - 顺序栈 - 链栈 运算规则:只能在栈顶运算,且访问结点时依照后进先出(LIFO)或先进后出(FILO)的原则 实现方式 - 入栈 - 出栈 - 读栈顶元素值 - 建栈 - 判断栈空 - 判断栈慢 - 清空栈 - 销毁栈 栈的表示和操作的实现 [在这里插入图片描述][在这里插入图片描述] [在这里插入图片描述] 顺序栈的C++代码实现 #include<iostream>
ruochen
2021/06/28
4430
数据结构——顺序栈
相关推荐
数据结构 栈&队列
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验