• 栈的概念及结构
    • 栈的概念
    • 栈顶和栈底
      • 栈顶
      • 栈底
  • 栈的接口实现
    • 函数的声明
    • 初始化函数
    • 销毁函数
    • 插入数据
    • 删除数据
    • 判断是否为空
    • 判断数据个数
    • 读栈顶元素

栈的概念及结构

栈的概念

栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守先进后出的原则
由于其特殊的原则,所以只能在尾部进行插入和删除的操作

  • 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶
  • 出栈:栈的删除操作叫做出栈,出数据也在栈顶

栈顶和栈底

1.栈是个线性表,用链表和数组都可以实现,相比而言,数组的优势更大,因为尾插尾删相较于链表更有优势(链表尾插需要找到前一个节点)
2.栈的形状像一个杯子,栈底就是杯子的底部,杯子的顶部是栈顶,水相当于数据,随着水的增加,栈顶也在不断增加

栈顶

栈顶随着数据插入或删除而随之移动,它的下面包含着所有元素

栈底

与栈顶相对,栈底不会随着数据的增加而移动

栈的接口实现

函数的声明

#pragma once
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include <stdbool.h>typedef int STDataType;typedef struct Stack
{STDataType* a;int top;int capacity;
}ST;void StackInit(ST* ps);
void StackDestroy(ST* ps);
void StackPush(ST* ps, STDataType x);
void StackPop(ST* ps);
bool StackEmpty(ST* ps);
int StackSize(ST* ps);
STDataType StackTop(ST* ps);

初始化函数

void StackInit(ST* ps)
{assert(ps);ps->a = NULL;ps->top = 0;ps->capacity = 0;
}

销毁函数

void StackDestroy(ST* ps)
{assert(ps);free(ps->a);ps->a = NULL;ps->capacity = 0;ps->top = 0;
}

插入数据

void StackPush(ST* ps, STDataType x)//插入数据
{assert(ps);if (ps->top == ps->capacity){int newCapaciy = ps->capacity == 0 ? 4 : ps->capacity * 2;STDataType* tmp = (STDataType*)realloc(ps->a, newCapaciy * sizeof(STDataType));if (tmp == NULL){perror("tmp");exit(-1);}ps->a = tmp;ps->capacity = newCapaciy;}ps->a[ps->top] = x;ps->top++;
}

删除数据

void StackPop(ST* ps)//删除数据
{assert(ps);assert(!StackEmpty(ps));ps->top--;
}

判断是否为空

bool StackEmpty(ST* ps)
{assert(ps);return ps->top == 0;
}

判断数据个数

int StackSize(ST* ps)
{assert(ps);return ps->top;
}

读栈顶元素

STDataType StackTop(ST* ps)
{assert(ps);assert(!StackEmpty(ps));return ps->a[ps->top - 1];
}

详细代码:点我

数据结构与算法 | 栈及其实现相关推荐

  1. 数据结构与算法-栈与队列

    数据结构与算法-栈与队列 栈 基本概念 简单表述就是仅在表尾进行插入和删除操作的线性表. 常见操作 入栈和出栈, 均在线性表的尾部进行. 基本原则就是, 先入后出. 队列 基本概念 和栈不同的是,队列 ...

  2. 数据结构与算法 -- 栈 ADT

    这两天翻了下数据结构与算法分析.严蔚敏的数据结构.C和指针.C Primer Plus这些本书,受益很多.不过大多的示例不够完整,需要自己动手编写程序.又看了遍培训时的笔记,虽然很糙但是精华的部分还是 ...

  3. 数据结构与算法 / 栈(stack)

    @time 2019-07-24 @author Ruo_Xiao @reference 极客时间 -> 数据结构与算法之美 ---------------------------------- ...

  4. JavaScript数据结构与算法——栈详解

    1.栈基本知识 栈是一种特殊的列表,栈的元素只能通过列表的一端访问,这一端成为栈顶,栈具有先进后出的特点,要想访问栈底的元素,就必须将上边的元素先拿出来.对栈的操作主要是入栈和出栈,通过push()和 ...

  5. 数据结构与算法 栈的数组实现

    Java数据结构和算法 上一篇 主目录 下一篇 package stack;import java.util.Scanner;public class ArrayStackDemo {public s ...

  6. 1. 数据结构与算法——栈

    数据结构与算法 数据结构是计算机中存储.组织数据的方式 算法通俗理解就是解决问题的方法/步骤逻辑 定义:1.一个有限的指令集,每条指令的描述不依赖与语言2.接受一些输入(也可能不需要输入),产生输出3 ...

  7. char栈java,Java数据结构与算法-栈和队列(示例代码)

    (摘录加总结)------ 栈和队列不属于基础的数据结构,它们都属于线性表. 一.栈 对于栈存储操作元素只能在栈结构的一端进行元素的插入和删除,是一种性质上的线性表结构.按照"先进后出&qu ...

  8. 数据结构与算法—栈详解

    目录 什么是栈 设计与介绍 数组实现 结构设计 push插入 pop弹出并返回首位 其他操作 链表实现 结构设计 push插入 pop弹出 其他操作 实现代码 数组实现 链表实现 测试 总结 什么是栈 ...

  9. 数据结构与算法 | 栈

    栈 栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作.进行数据插入和删除操作的一端为栈顶,另一端为栈底.栈中元素遵循先进后出的原则 假设我们依次将1, 2, 3, 4压入栈中 当我们再 ...

  10. 数据结构和算法——栈、队列、堆

    文章目录 1.预备知识 1.1 栈 1.2 队列 1.3 堆 2.用队列实现栈 2.1 题目描述 2.2 解题思路 2.3 C++实现 3.用栈实现队列 3.1 题目描述 3.2 解题思路 3.3 C ...

最新文章

  1. 均衡发展计算机教室材料,义务教育均衡发展材料.pdf
  2. Laravel 5.0 的新特性
  3. JAVA——Scanner读取文件
  4. 多线程池、饱和策略详解
  5. vue在less中使用css3 calc 被解析 的问题
  6. Codeforces 924D Contact ATC (看题解)
  7. QT中信号与槽的常见使用
  8. c# 图片批量转双层PDF,OFD格式文件
  9. WebService(一):工作原理
  10. 该如何去认知Level 2 十档行情数据?
  11. icpc 2019 沈阳区域赛
  12. 《人人都能玩赚ChatGPT》:一份简明易懂的 ChatGPT 技术指南
  13. 怎样在电脑上查学生的准考证
  14. [PS视频][ps从入门到精通82课][mp4/327M]
  15. 记一次在android使用fdisk
  16. Python-修改密码功能
  17. ELS3120代替品MPCS-341 3A 光电耦合器 用于IGBT/MOSFET隔离栅极驱动芯片
  18. csgo删除机器人_《CS:GO》更新移除补位机器人并调整地图和修复bug
  19. ssm毕设项目大学生就业管理系统5t101(java+VUE+Mybatis+Maven+Mysql+sprnig)
  20. 判断一个点是否在给定的凸四边形内

热门文章

  1. 沈向洋终于也离开微软!曾是华人在美科技圈最高级高管
  2. vivado flash启动时间提速设置
  3. 用计算机弹琴琴谱,用电脑键盘钢琴之琴谱.doc
  4. 【无标题】北京车牌汽车只有人去世了才能办理继承手续吗?
  5. 终于找到了.wrf的播放器了
  6. 迅雷自动生成的vod_cache_data处理方法
  7. bugfree安装中mysql未安装_安装bugfree时,提示Mysql未安装,找了网上的方法更改代码,但是还没有得到解决,怎么办?...
  8. ETC电子不停车收费系统(附项目总文件下载)
  9. 拟合算法(模型+代码)
  10. Mac Pro 软件收藏