数据结构——栈

时间:2024-01-10 01:06:41 标签:  数据结构  

1.栈的基本概念

1)栈的定义

栈(Stack)是只允许在一端进行插入或删除操作的线性表。栈是一种线性表,但限定这种线性表只能在某一端进行插入和删除操作.

栈顶(Top)。线性表允许进行插入删除的那一端。

栈底 (Bottom)。固定的,不允许进行插入和删除的另一端。 

空栈。不含任何元素的空表。 

栈的操作特性可以概括为后进先出

注意: n 个不同元素进栈 ,出栈元素不同排列的个数为

 2.栈的基本操作

Initstack(&s):初始化一个空栈 S。
stackEmpty(S):判断一个栈是否为空,若 s为空则返回 true,否则返回 false。
Push(&S,x):进栈,若栈 S 未满,则将x加入使之成为新栈顶。
Pop(&S,&x):出栈,若栈S 非空,则弹出栈顶元素,并用x返回
GetTop(S,&x):读栈顶元素,若栈 S 非空,则用x 返回栈顶元素。
Destroystack(&s):销毁栈,并释放栈S占用的存储空间(“&”表示引用调用)。
在解答算法题时,若题干未做出限制,则可直接使用这些基本的操作函数。

 2.栈的顺序存储结构

 1)顺序栈的实现

采用顺序存储的栈称为顺序栈,它利用一组地址连续的存储单元存放自栈底到栈顶的数据元素,同时附设一个指针 (top)指示当前栈顶元素的位置。

 #define MaxSize 50

typedef struct(

        Elemtype data[MaxSize];

        int top;

}SqStack;

栈顶指针: S.top,初始时设置 s.top = - 1; 栈顶元素:S.data[s.top]。
进栈操作: 栈不满时,栈顶指针先加 1,再送值到栈顶元素。
出栈操作: 栈非空时,先取栈顶元素值,再将栈顶指针减 1。
栈空条件: S.top==-1; 栈满条件:S.top==MaxSize-1; 栈长:S.top + 1。

由于顺序栈的入栈操作受数组上界的约束,当对栈的最大使用空间估计不足时,有可能发生栈上溢。

2)下面是顺序栈上常用的基本运算的实现。 

 (1) 初始化

 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.top++;

        S.data[S.top]=x;

        return  ture;

}

 (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];

        return true;

}

 3)共享栈

利用栈底位置相对不变的特性,可让两个顺序栈共享一个一维数组空间,将两个栈的栈底分别设置在共享空间的两端,两个栈顶向共享空间的中间延伸。

两个栈的栈顶指针都指向栈顶元素,top0=-1 时0号栈为空,top1=Maxsize 时1 号栈为空:仅当两个栈顶指针相邻(top1-top0=1) 时,判断为满。当0号栈进栈时 top0 先加再赋值,1号栈进栈时 top1 先减1再赋值;出栈时则刚好相反。
共享栈是为了更有效地利用存储空间,两个栈的空间相互调节,只有在整个存储空间被占满时才发生上溢。其存取数据的时间复杂度均为 O(1),所以对存取效率没有什么影响。

3.栈的链式存储结构

采用链式存储的栈称为链栈,链栈的优点是便于多个栈共享存储空间和提高其效率,且不存在栈满上溢的情况。通常采用单链表实现,并规定所有操作都是在单链表的表头进行的。

typedef struct Linknodel{

        ElemType data;

        struct  Linknode *next;

}*ListSack;

 

来源:https://blоg.сsdn.nеt/m0_62344154/аrtiсlе/dеtаils/135054176

智能推荐

1.栈的基本概念 1)栈的定义 栈(Stack)是只允许在一

标签:数据结构  

Stack类型定义栈是限定仅在表尾进行插入和删除操作的线性表,又称为后进先出(last in first out)的线性表(LIFO结构),表尾称为栈顶,表头称为栈底,不含元素则称为空栈;抽象数据类型:InitStack(&S) //构造空栈SDestoryStack(&S) //销毁栈SClearStack(&S) //将S清为空栈StackEmpty(S)

标签:数据结构  

1.单调栈      单调栈是一种数据结构,其中存放的数据应该是有

标签:数据结构  数据结构  

1.栈结构是一种受限的线性结构。

标签:数据结构  结构  

一丶栈 1.栈的定义        非常简单,

标签:数据结构  c语言  

1 栈 1.1 栈的概念及结构 栈:一种特殊的

标签:数据结构  数据结构  c语言  

1.栈1.1栈的抽象父类#pragma oncetemplate<class T>class Stack{

标签:数据结构  队列  

好家伙,写题,题目代码在最后&nbsp;来吧,&nbsp;&nbsp;1.栈&nbsp;

标签:数据结构  括号  

对于逻辑结构来说,我们也是从最简单的开始。堆栈、队列,这两个词对于大部分人都不会陌生,但是,堆和栈其实是两个东西。在面试的时候千万不要被面试官绕晕了。堆是一种树结构,或者说是完全二叉树的结构。而今天,我们主要讲的就是这个栈的应用。什么是栈?栈一般就是一种顺序的数据结构。它最大的特点就是后进先出(LIFO),或者反过来说先进后出(FILO)也是可以的。这两句话到底是什么意思呢?最典型的例子就是大家看电视剧时,特别是枪战片时绝对会看到的一样东西:弹匣。

标签:数据结构  逻辑  操作  php  

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱

标签:java  数据结构  java  

摘要:本文为大家详解数据结构中栈的定义和操作。本文分享自华为云社区《数据结构:详细讲解栈的定义、栈的操作》,作者: 高彬滔 。1.栈的定义栈(stack):是只允许在一端进行插入或者删除操作的线性表(即后进先出,大概可以理解为吃饱了吐出来)空栈:不含元素的空标配栈顶:表尾端

标签:数据结构  详解  定义  操作  

栈是一种基本的数据结构,广泛应用于计算机科学和编程中,用于管理数据的存储和访问。栈遵循后进先出(Last In, First Out,LIFO)原则,即最后放入栈的元素首先被取出。这种数据结构模拟了物理世界中的栈,如一堆书或一摞盘子。栈的概念栈是一个线性数据结构,具有以下关键特点:后进先出(LIFO)原则: 最后进入栈的元素将首先出栈。两个主要操作: 栈支持两个基本操作,即压栈(Push)和弹栈(Pop)。栈顶: 位于栈顶的元素是最新加入栈的元素,是唯一一个可以访

标签:数据结构  后进  容器  LIFO  

数据结构的三要素包括&#xff1a;逻辑结构、存储结构、数据的运算。逻辑结构描述的是数据之间的逻辑关

标签:# Java数据结构与算法  数据结构  链表  

猜你喜欢

数据结构概述:  程序 = 数据结构 + 算法  算法:一些计算方法,解决问题的流程/步骤(顺序、分支、循环......),通俗的说,算法相当于逻辑,小部分已经被人们发掘出来了(这里的小部分指的是书本上讲的一些经典的解决一类问题的方法),解决问题的一种模式。  数据结构:将数据按照某一种特定的结构(方法)去保存(数据的存储方法)。几个基本概念

标签:数据结构  

好家伙,属于是半自学了&nbsp;1.关于数据结构这波又有新的理解了:

标签:数据结构  

第三章__栈和队列3.1、栈和队列的定义和特点3.1.1、栈的定义和特点定义:栈是是一种特殊的线性表,是限定在表尾进行插入或删除操作的线性表。又称为后进先出的线性表,简称LIFO相关概念:表尾(即an端)称为栈顶Top;表头(即a1

标签:队列  数据结构  定义  蔚敏  

计算机入门小学生内容,重新记录一下数据结构分为逻辑结构和物理结构。逻辑结构:指数据元素之间逻辑关系的数据结构,这里的逻辑关系是指数据元素之间的前后间关系,与数据在计算机中的存储位置无关。物理结构:指数据的逻辑结构在计算机存储空间中的存放形式称为数据的物理结构,也叫做存储结构。数据的逻辑结构主要分为线性结构和非线性结构。线性结构:数据结构的元素之间存在一对一线性关系,所有结点都最多只有一个直接前趋结点和一个直接后继结点。常见的有数组、队列、链表、栈。非线性结构:各个结点之间具有多个对应关系,一个结点可能有多个直接前趋结点和多个直接后继结点。常见的有多维数组、广义

标签:数据结构数据结构  

三、栈3.1 栈3.1.1抽象数据类型栈的定义栈

标签:数据结构  基础知识  学习笔记  

断断续续地把这个系列写完了,就像上一个设计模式一样,算法这个系列也是前前后后写了将近有一年的时间。当然,都是在业余或者晚上的时间写完的,所以进度如此地慢。更主要的是,既然要写,总得要自己先弄懂吧,对于一个没上过高中的人来说,这还真的是有点困难。所以说,在这一系列的文章中,可能有许多纰漏甚至是错误,这个也欢迎大家随时指正。继续扩展提高关于数据结构与算法这门课程,在我的系列文章中,只是简单的入了个门。仅仅从教材来说,就还有许多内容并没有涉及,实在是本人水平有限,大家可以自己再继续深入地学习。串:字符串、串的匹配(BF、KMP)树:二叉排序树、

标签:数据结构  算法  php  

数据结构起源早期人们都把计算机理解为数值计算工具,就是感觉计算机当然是用来计算的,所以计算机解决问题,应该是先从具体问题中抽象出一个适当的数据模型,设计出一个解此数据模型的算法,然后再编写程序,得到一个实际的软件。可现实中,我们更多的不是解决数值计算的问题,而是需要一些更科学有效的手段(比如表、树和图等数据结构)的帮助,才能更好地处理问题。所以数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科。基本概念和术语数据数据是描述客观事物的符

标签:数据结构  绪论  算法  

BTC中的数据结构普通指针普通指针存储的是某个结构体在内存中的地址(假如P是指向一结构体的指针,那么P里面存放的就是该结构体在内存中的起始位置)Hash pointer(哈希指针)对于如下的节点,有两个指针指向这个节点(实际上是一个),其中P为该节点的地址,H

标签:数据结构  BTC  

本文主要描述reids数据结构和底层数据结构的实现,用于熟悉redis的底层数据结构实现原理,下图是reids的整个数据结构组成。这篇文章主要介绍value对象这部分数据结构&nbsp;SDS初识string结构对应底层SDS数据结构,SDS是redis最简单的数据结构,一般用于分布式锁和Json序列化对象存储。SDS命令

标签:数据结构  redis  

算法:数据结构中的算法,指的是数据结构所具备的功能解决特定问题的方法。学习的前辈们的一些优秀的经验总结算法的五大特征:(1)有穷性。一个算法必须总是在执行有穷步后结束,且每一步都必须在有穷时间内完成。(2) 确定性。对千每种情况下所应执行的操作,在算法中都有确切的规定,不会产生二义性, 使算法的执行者或阅读者都能明确其含义及如何执行。(3) 可行性。算法中的所有操作都可以通过已经实现的基本操作运算执行有限次来实现。(4) 输入。一个算法有零个或多个输入。当用函数描述算法时,输入往往是通过形参表示的, 在它们被调用时,从主调函数获得输入值。(5) 输出。一个算法有一个或多个输出,它们是算法进行信息加工后得到的

标签:数据结构  

引言从本次开始,对Redis设计与实现进行阅读及相关读书笔记的记录。Redis版本为3.0数据结构简单动态字符串SDSsds数据结构位于sds.h/sdshdr/* * 保存字符串对象的结构 */struct sdshdr { // buf 中已占用空间的长度 int len; // buf 中剩余可用空间的长度 int free; // 数据空间 char buf

标签:数据结构  redis