首页 > 其他分享 >线性表之堆栈

线性表之堆栈

时间:2023-01-25 21:22:53浏览次数:36  
标签:struct 元素 SNode Next 堆栈 Stack 线性表

什么是堆栈

  • 像叠盘子一样,先放下的在下面,先拿出来的却是最上面的,也就是,先进去的最后才出来
  • 先进后出的就是堆栈

堆栈的操作

  • 生成空堆栈,其最大长度为MaxSize
  • 判断堆栈S是否已满
  • 将元素item压入堆栈
  • 判断堆栈S是否为空
  • 删除并返回栈顶元素

堆栈的链式存储实现

链表结构体初始化

typedef struct SNode *Stack;
struct SNode
{
ElementType Data;
struct SNode *Next;
}

堆栈初始化

Stack createStack()
{
//构建一个堆栈的头结点,返回指针
Stack S;
S = (Stack)malloc(sizeof(struct SNode));
S->Next = NULL;
return S;
}

判断堆栈S是否为空

int IsEmpty(Stack S)
{
//判断堆栈s是否为空,若为空函数返回整数1,否则返回整数0
return (S->Next == NULL);
}

将元素item压入堆栈

void Push(ElementType item, Stack S)
{
//将元素item压入堆栈S
struct SNode* TmpCell;
//感觉 (struct SNode*) ,这里是不是可以换成 (Stack) ?找个机会试试
TmpCell = (struct SNode *)malloc(sizeof(struct SNode));
TmpCell->Element = item;
TmpCell->Next = S->Next;
//使得 TmpCell 为头结点,并且 S 仍旧指向头结点
//这样做的好处是
//在出栈的时候,直接调用 S 就行了。S 必然是最后保存的元素
S->Next = TmpCell;
}

删除并返回栈顶元素

ElementType Pop(Stack S)
{
//删除并返回堆栈S的栈顶元素
struct SNode* FirstCell;
//定义同栈顶元素类型的一个变量,用于存储栈顶元素
ElementType TopElem;
//判断是否为空栈
if (ISEmpty(S)) 
{
	printf("堆栈为空");
	return NULL;
}
else
{
	//释放空间前的预备操作,将 次结点 作为 头结点
	FirstCell = S->Next;
	S->Next = FirstCell->Next;
	//存储栈顶元素,不然释放空间后就找不到元素了
	TopElem = FirstCell->Element;
	free(FirstCell);
	//返回栈顶元素(其实也就是出栈啦,顺带删除掉而已)
	return TopElem;
}
}

标签:struct,元素,SNode,Next,堆栈,Stack,线性表
From: https://www.cnblogs.com/aduiduidui/p/17020914.html

相关文章

  • 线性表之队列
    目录什么是队列大众化专业性队列的操作集队列的链式存储实现链表结构体初始化删除并返回队头数据元素其他操作什么是队列大众化最常见的队列就是排队假设超市送鸡蛋......
  • 初步理解:jvm运行机制,java程序运行机制,堆栈详解,jvm调优的目的。
    谷咕咕最近在准备面试,本来想多看看堆和栈的关系,看看发现又设计到gc(GarbageCollection)垃圾回收机制,发现盲区太多了,就去粗略的学习了一下jvm(java虚拟机),发现之前只会写程序,底......
  • 堆栈和数组之间的区别
    以预定义的格式存储和排列数据,以便能够以有效的方式检索和修改数据是您想要完成的众多事情之一,而数据结构是使之成为可能的构建块。数据结构本质上是数据的逻辑表示形式,用于......
  • 编程:C语言内存的堆栈模型
    内存:C语言内存的堆栈模型    一、C语言内存的堆栈模型 1、栈:栈底是高地址,栈顶是低地址。栈空间的地址生长方向:从高地址到低地址。 2、堆:堆底是低地......
  • 数组描述线性表(C++实现)
    线性表也称有序表,其每一个实例都是元素的一个有序集合抽象类linearList一个抽象类包含没有实现代码的成员函数,这样的成员函数称为纯虚函数,用数字0作为初始值来说明templ......
  • dotnet堆栈溢出通用排查方法
    常见方法1.查找对应代码中有无递归调用,如果有,检查其条件是否正确。2.排查内存溢出,检查应用程序中使用的资源,确保其资源使用量不超过操作系统的最大内存限制。3.检查......
  • 第二章 线性表(上)
    一、线性表的定义及具体操作1.定义线性表(LinearList)是具有相同数据类型的n(n≥0)个数据元素的有限序列,其中n为表长,当n=0时线性表是一个空表。若用L命名线性表,则其一般表......
  • 线性表算法相关练习
    //将两个递增的有序链表合并为一个递增的有序链表。//要求结果链表仍使用原来两个链表的存储空间,不另外占用其他的存储空间。表中不允许有重复的数据。#include<iostream>#......
  • 逆向—堆栈
    假设我们需要一块内存,有如下的要求:1、主要用于临时存储一些数据,如果数量很少就放到寄存器中2、能够记录存了多少数据3、能够非常快速的找到某个数据我们可以这样来设计......
  • 线性表的顺序表示
    顺序表的定义线性表的顺序存储又称顺序表.它是用一组地址连续的存储单元依次存储线性表中的数据元素,从而使逻辑上相邻的两个元素在物理位置上也相邻。publicclassInitL......