数据结构与算法 | 栈及其实现
栈
- 栈的概念及结构
- 栈的概念
- 栈顶和栈底
- 栈顶
- 栈底
- 栈的接口实现
- 函数的声明
- 初始化函数
- 销毁函数
- 插入数据
- 删除数据
- 判断是否为空
- 判断数据个数
- 读栈顶元素
栈的概念及结构
栈的概念
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守先进后出的原则
由于其特殊的原则,所以只能在尾部进行插入和删除的操作
- 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶
- 出栈:栈的删除操作叫做出栈,出数据也在栈顶
栈顶和栈底
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];
}
详细代码:点我
数据结构与算法 | 栈及其实现相关推荐
- 数据结构与算法-栈与队列
数据结构与算法-栈与队列 栈 基本概念 简单表述就是仅在表尾进行插入和删除操作的线性表. 常见操作 入栈和出栈, 均在线性表的尾部进行. 基本原则就是, 先入后出. 队列 基本概念 和栈不同的是,队列 ...
- 数据结构与算法 -- 栈 ADT
这两天翻了下数据结构与算法分析.严蔚敏的数据结构.C和指针.C Primer Plus这些本书,受益很多.不过大多的示例不够完整,需要自己动手编写程序.又看了遍培训时的笔记,虽然很糙但是精华的部分还是 ...
- 数据结构与算法 / 栈(stack)
@time 2019-07-24 @author Ruo_Xiao @reference 极客时间 -> 数据结构与算法之美 ---------------------------------- ...
- JavaScript数据结构与算法——栈详解
1.栈基本知识 栈是一种特殊的列表,栈的元素只能通过列表的一端访问,这一端成为栈顶,栈具有先进后出的特点,要想访问栈底的元素,就必须将上边的元素先拿出来.对栈的操作主要是入栈和出栈,通过push()和 ...
- 数据结构与算法 栈的数组实现
Java数据结构和算法 上一篇 主目录 下一篇 package stack;import java.util.Scanner;public class ArrayStackDemo {public s ...
- 1. 数据结构与算法——栈
数据结构与算法 数据结构是计算机中存储.组织数据的方式 算法通俗理解就是解决问题的方法/步骤逻辑 定义:1.一个有限的指令集,每条指令的描述不依赖与语言2.接受一些输入(也可能不需要输入),产生输出3 ...
- char栈java,Java数据结构与算法-栈和队列(示例代码)
(摘录加总结)------ 栈和队列不属于基础的数据结构,它们都属于线性表. 一.栈 对于栈存储操作元素只能在栈结构的一端进行元素的插入和删除,是一种性质上的线性表结构.按照"先进后出&qu ...
- 数据结构与算法—栈详解
目录 什么是栈 设计与介绍 数组实现 结构设计 push插入 pop弹出并返回首位 其他操作 链表实现 结构设计 push插入 pop弹出 其他操作 实现代码 数组实现 链表实现 测试 总结 什么是栈 ...
- 数据结构与算法 | 栈
栈 栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作.进行数据插入和删除操作的一端为栈顶,另一端为栈底.栈中元素遵循先进后出的原则 假设我们依次将1, 2, 3, 4压入栈中 当我们再 ...
- 数据结构和算法——栈、队列、堆
文章目录 1.预备知识 1.1 栈 1.2 队列 1.3 堆 2.用队列实现栈 2.1 题目描述 2.2 解题思路 2.3 C++实现 3.用栈实现队列 3.1 题目描述 3.2 解题思路 3.3 C ...
最新文章
- 均衡发展计算机教室材料,义务教育均衡发展材料.pdf
- Laravel 5.0 的新特性
- JAVA——Scanner读取文件
- 多线程池、饱和策略详解
- vue在less中使用css3 calc 被解析 的问题
- Codeforces 924D Contact ATC (看题解)
- QT中信号与槽的常见使用
- c# 图片批量转双层PDF,OFD格式文件
- WebService(一):工作原理
- 该如何去认知Level 2 十档行情数据?
- icpc 2019 沈阳区域赛
- 《人人都能玩赚ChatGPT》:一份简明易懂的 ChatGPT 技术指南
- 怎样在电脑上查学生的准考证
- [PS视频][ps从入门到精通82课][mp4/327M]
- 记一次在android使用fdisk
- Python-修改密码功能
- ELS3120代替品MPCS-341 3A 光电耦合器 用于IGBT/MOSFET隔离栅极驱动芯片
- csgo删除机器人_《CS:GO》更新移除补位机器人并调整地图和修复bug
- ssm毕设项目大学生就业管理系统5t101(java+VUE+Mybatis+Maven+Mysql+sprnig)
- 判断一个点是否在给定的凸四边形内
热门文章
- 沈向洋终于也离开微软!曾是华人在美科技圈最高级高管
- vivado flash启动时间提速设置
- 用计算机弹琴琴谱,用电脑键盘钢琴之琴谱.doc
- 【无标题】北京车牌汽车只有人去世了才能办理继承手续吗?
- 终于找到了.wrf的播放器了
- 迅雷自动生成的vod_cache_data处理方法
- bugfree安装中mysql未安装_安装bugfree时,提示Mysql未安装,找了网上的方法更改代码,但是还没有得到解决,怎么办?...
- ETC电子不停车收费系统(附项目总文件下载)
- 拟合算法(模型+代码)
- Mac Pro 软件收藏