首页 > 其他分享 >数据结构——栈

数据结构——栈

时间:2024-07-21 12:29:00浏览次数:9  
标签:return SqStack ElemType top 元素 栈顶 数据结构

一、栈的定义

我们都知道线性表是具有相同数据类型的n( n为表长且n>=0)个数据元素的有限序列。

而栈,是只允许在一端进行插入或删除操作的线性表。

就如汉罗塔相似,你只能从头顶放入或拿走方块。

   重要术语 :栈顶、栈底、空栈

我们从图就很容易理解这三个术语:

空栈:指线性表内没有存放元素

栈顶:允许插入或删除的一端

栈底:不允许插入或删除的一端

我们的进栈顺序是:a1->a2->a3->a4->a5

而出栈顺序则是:a5->a4->a3->a2->a1

特点:后进先出 

Last In  First Out    (LIFO)

二、栈的顺序存储实现

1、初始化栈

#define MaxSize 10//定义栈中元素的最大个数
typedef int ElemType;
typedef struct {
	ElemType data[MaxSize];//静态数组存放栈中元素
	int top;//栈顶指针(数组元素位置)
}SqStack;

void InitStack(SqStack& S)
{
	S.top = -1;//初始化栈顶指针
}

2、判断栈是否为空

bool StackEmpty(SqStack S)
{
	if (S.top == -1)//栈空
		return true;
	else 
		return false;//不空
}

3、元素进栈

//新元素入栈
bool Push(SqStack& S, ElemType x)
{
	if (S.top == MaxSize - 1)//栈满,报错
		return  false;	
	S.data[++S.top] = x;//指针先加一,新元素入栈
	return true;
}

4、元素出栈

//出栈操作
bool Pop(SqStack S, ElemType& x)
{
	if (S.top == -1)//栈空,报错
		return false;
	x = S.data[S.top--];//指针元素先出栈,再减一
	return true;
}

5、读栈顶元素

//读栈顶元素
bool GetTop(SqStack S, ElemType& x)
{
	if (S.top == -1)//栈空,报错
		return false;
	x = S.data[S.top];//x记录栈顶元素
	return true;
}

标签:return,SqStack,ElemType,top,元素,栈顶,数据结构
From: https://blog.csdn.net/2301_79654372/article/details/140335659

相关文章

  • 数据结构:线性表-例题
    顺序存储结构和链式存储结构都可以进行顺序存取。[T/F]顺序存储结构可以进行顺序存取和随机存取;链式存储结构只可以进行顺序存取。散列存储结构能反应数据之间的逻辑关系。[T/F]散列存储通过散列函数映射到物理空间,不能反应数据之间的逻辑关系。链式存储设计时,结点......
  • 【软考】数据结构与算法基础 - 数组和链表
    一、数组和链表的区别(很简单,但是很常考,记得要回答全面)什么是数组:C++语言中,可以用数组,处理一组数据类型相同的数据,不可以动态定义数组的大小(使用前,必须指定大小。)在实际应用中,用户使用数组之前,无法确定数组的大小只能够将数组定义成足够大小,多余出来空间可能不被使用,......
  • 【数据结构】栈和队列
    数据结构是计算机存储、组织数据的方式。栈和队列是两种常用的线性数据结构,它们在程序设计中扮演着重要角色。一、栈(Stack)栈是一种遵循后进先出(LastInFirstOut,LIFO)原则的数据结构。其主要特点如下:1.基本操作:栈的操作主要有两种——压栈(push)和出栈(pop)。压栈:在栈顶插......
  • 用于匹配两个数据列表中的项目的高效数据结构 - python
    我有两个列表,其中一个列表填充ID,另一个列表填充进程名称。多个进程名称可以共享一个ID。我希望能够创建一个可以使用特定ID的数据结构,然后返回与该ID关联的进程列表。我还希望能够使用特定的进程名称并返回与其连接的ID列表。我知道我可以为此创建一个字典,但是I......
  • Java之集合底层-数据结构
    Java集合之数据结构1概述数据结构是计算机科学中研究数据组织、存储和操作的一门学科。它涉及了如何组织和存储数据以及如何设计和实现不同的数据操作算法和技术。常见的据结构有线性数据结构(含数组、链表、栈和队列等),非线性数据结构(树、图等)。注意:不同的数据结构适用于......
  • 如何建立一颗二叉树?(数据结构:树 + hash表 / 广搜BFS)
    一个二叉树,树中每个节点的权值互不相同。现在给出它的后序遍历和中序遍历,请你输出它的层序遍历。输入格式第一行包含整数 N,表示二叉树的节点数。第二行包含 N 个整数,表示二叉树的后序遍历。第三行包含 N 个整数,表示二叉树的中序遍历。输出格式输出一行 N 个整数,......
  • Known框架实战演练——进销存数据结构
    系统主要包含商品信息、商业伙伴(客户、供应商)信息、业务单表头信息、业务单表体信息、对账单表头信息、对账单表体信息。1.商品信息(JxGoods)该表用于存储公司商品信息。名称代码类型长度必填商品信息JxGoods商品编码CodeText50Y商品名称NameText2......
  • 【数据结构】二叉树———Lesson2
    Hi~!这里是奋斗的小羊,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎~~......
  • 几种基本数据结构
    目录前言线性结构链式结构单链表双链表​编辑树形结构前言在我们编写程序时,经常会出现需要存储数据的情况,而数据的存储是有讲究的,数据不是在我们的内存中胡乱存储,为了保证数据在进行修改和查找时更加方便,我们就要学习数据结构(也就是数据的存储结构)线性结构线性结......
  • 数据结构(二叉树-1)
    文章目录一、树1.1树的概念与结构1.2树的相关术语1.3树的表示二、二叉树2.1二叉树的概念与结构2.2特殊的二叉树满二叉树完全二叉树2.3二叉树的存储结构三、实现顺序结构二叉树3.1堆的概念与结构3.2堆......