【数据结构】“栈”的模拟实现

简介: 文章目录⭐️一、什么是栈💬二、栈的分类📅三、用动态数组实现栈1.栈的结构体定义2.初始化3.栈的销毁

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤

📃个人主页 :阿然成长日记 👈点击可跳转

📆 个人专栏: 🔹数据结构与算法🔹C语言进阶

🚩 不能则学,不知则问,耻于问人,决无长进

🍭 🍯 🍎 🍏 🍊 🍋 🍒 🍇 🍉 🍓 🍑 🍈 🍌 🍐 🍍

文章目录

⭐️一、什么是栈

:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。


🔸压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。

🔸出栈:栈的删除操作叫做出栈。出数据也在栈顶

dbfefddfbadc496cbabfac3b8306db76.png

💬二、栈的分类

1️⃣ Ⅰ 顺序存储结构

实用性不高。

2️⃣ Ⅱ 链式存储结构

📅三、用动态数组实现栈

使用动态内存管理函数,实现数组动态化。有关动态内存函数的详细讲解可点击查看

👉 内存函数详解

1.栈的结构体定义

注意:这里我们将栈顶初始化是-1。你也可以是0;

代码:

typedef int STDataType;
typedef struct Stack
{
  STDataType* a;
  int top;
  int capacity;
}ST;

2.初始化

代码:

//初始化
void STInit(ST* p)
{
  p->a = NULL;
  p->capacity = 0;
  p->top = 0;
}

3.栈的销毁

代码:

//栈的销毁
void STDesdroy(ST* p)
{
  assert(p);
  free(p->a);
  p->a = NULL;
  p->capacity = p->top = 0;
}

4.压栈

代码:

//压栈
void STPush(ST* p, STDataType x)
{
  assert(p);
  //开辟空间
  if (p->capacity = p->top)
  {
    int newcapacity = p->capacity == 0 ? 4 : p->capacity * 2;//开辟空间个数 
    STDataType* tmp = (STDataType*)realloc(p->a, sizeof(STDataType) * newcapacity);//开辟
    if (tmp == NULL)
    {
      perror("realloc fail\n");
    }
    p->a = tmp;//将开辟好的空间指回原指针
    p->capacity = newcapacity;
  }
  p->a[p->top] = x;
  p->top++;
}

5.出栈

代码:

//出栈
void STPop(ST* p)
{
  assert(p);
  assert(p->top >= 0);
  p->top--;
}

6.获取栈顶元素

//获取栈顶元素
STDataType STTop(ST* p)
{
  assert(p);
  assert(p->top > 0);
  return p->a[p->top];
}

7.获取栈内元素

//大小
int STSize(ST* p)
{
  assert(p);
  return p->top;
}

8断栈是否为空

代码:

//是否为空
bool STisEmpty(ST* p)
{
  return p->top == 0;
}
相关文章
|
6天前
|
存储 JavaScript 前端开发
什么是堆?什么是栈?他们之间从区别和联系
什么是堆?什么是栈?他们之间从区别和联系
22 0
|
24天前
|
消息中间件 存储 搜索推荐
深入理解栈和队列(二):队列
深入理解栈和队列(二):队列
37 0
|
2天前
|
存储
栈与队列练习题
栈与队列练习题
|
2天前
|
存储 索引
操作数栈的字节码指令执行分析
操作数栈的字节码指令执行分析
|
2天前
|
算法 C++
D1. Range Sorting (Easy Version)(单调栈+思维)
D1. Range Sorting (Easy Version)(单调栈+思维)
|
2天前
|
人工智能
线段树最大连续子段板子😂单调栈
线段树最大连续子段板子😂单调栈
|
2天前
数据结构第四课 -----线性表之栈
数据结构第四课 -----线性表之栈
|
3天前
|
存储
栈数据结构详解
栈(stack)是一种线性数据结构,栈中的元素只能先入后出(First In Last Out,简称FILO)。最早进入的元素存放的位置叫作栈底(bottom),最后进入的元素存放的位置叫作栈顶 (top)。本文是对堆结构的通透介绍
|
3天前
|
存储 Java
数据结构奇妙旅程之栈和队列
数据结构奇妙旅程之栈和队列
|
4天前
|
算法
栈刷题记(二-用栈操作构建数组)
栈刷题记(二-用栈操作构建数组)