[C语言实现]数据结构——手撕顺序栈之我出生就会写一个栈

news/2023/12/5 2:53:04


🥰作者: FlashRider

🌏专栏: 数据结构


目录

栈的前置知识

1.什么是栈?

2.生活中哪些地方有栈的影子?

顺序表实现栈

1.为什么通常采用顺序表实现栈?

2.栈的实现



栈的前置知识

1.什么是栈?

栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

总的来说,栈就是一个线性表,只不过只能从栈顶入栈,也只能从栈顶出栈,因此栈有一个非常重要的特性——后进先出(First In Last Out)。

2.生活中哪些地方有栈的影子?

让我们来看看下面这段代码:

void f()
{printf("666\n");
}
int main()
{printf("777\n");f();return 0;
}

程序的入口是main函数, 然后执行了printf函数,printf函数结束,然后执行f()函数,在f()函数中执行了第二个printf函数,然后第二个printf函数结束,随后f()函数结束,最后才是main函数结束。

我们可以发现,作为程序入口的main反而是最后结束的,而越后执行的函数越先结束,这就是栈的后进先出特性。所以函数就是利用栈来实现调用的。

 然后printf   f()    main再依次出栈,程序结束。


顺序表实现栈

1.为什么通常采用顺序表实现栈?

我们可以发现,对栈进行插入和删除操作时,永远是在栈顶进行操作,我们把栈顺时针旋转90°,
就变成了只在表尾插入删除的线性表,因为不会大量挪动元素,所以我们选择顺序表实现。

2.栈的实现

头文件 Stack.h

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <assert.h>
typedef int STDataType;
typedef struct Stack
{STDataType* a;//存放数据的空间首地址int capacity;//当前栈最大容量int top;//模拟栈顶指针
}ST;
//初始化栈
void StackInit(ST* ps);
//销毁栈 
void StackDestroy(ST* ps);
//插入
void StackPush(ST* ps, STDataType x);
//弹出 
void StackPop(ST* ps);
//获取栈顶元素
STDataType GetTop(ST* ps);
//获取栈当前元素个数
int StackSize(ST* ps);
//判断栈是否为空
bool StackEmpty(ST* ps);

源文件 Stack.c 

//初始化栈
void StackInit(ST* ps)
{assert(ps);ps->a = NULL;ps->capacity = ps->top = 0; 
}
//销毁栈 
void StackDestroy(ST* ps)
{assert(ps);free(ps->a);ps->a = NULL;ps->capacity = ps->top = 0;
}
//插入
void StackPush(ST* ps, STDataType x)
{assert(ps);//判满 if(ps->capacity == ps->top){int newcapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;STDataType* tmp = (STDataType*)realloc(ps->a, sizeof(STDataType) * newcapacity);if(tmp == NULL){printf("malloc fail\n");exit(-1);}ps->a = tmp;ps->capacity = newcapacity;}//插入元素 ps->a[ps->top++] = x;
}
//弹出 
void StackPop(ST* ps)
{assert(ps);assert(!StackEmpty(ps));ps->top--;
}
//获取栈顶元素
STDataType GetTop(ST* ps)
{assert(ps);assert(!StackEmpty(ps));return ps->a[ps->top - 1];
}
//获取栈当前元素个数
int StackSize(ST* ps)
{assert(ps);return ps->top;
}
//判断栈是否为空
bool StackEmpty(ST* ps)
{assert(ps);return ps->top == 0;
}

测试一下写出来的栈是否可用

源文件 test.c

int main()
{Stack st;StackInit(&st);StackPush(&st, 1);	StackPush(&st, 2);StackPush(&st, 3);StackPush(&st, 4);StackPush(&st, 5);while(!StackEmpty(&st)){printf("%d ", GetTop(&st));StackPop(&st);}return 0;
}

结果:


 


http://www.ppmy.cn/news/297923.html

相关文章

Airtest自动化测试工具实战演练

一开始知道Airtest大概是在年初的时候&#xff0c;当时&#xff0c;看了一下官方的文档&#xff0c;大概是类似Sikuli的一个工具&#xff0c;主要用来做游戏自动化的&#xff0c;通过截图的方式用来解决游戏自动化测试的难题。最近&#xff0c;移动端测试的同事尝试用它的poco库…

学院课程功能使用说明书

引子 越来越多的讲师入驻csdn&#xff0c;也有很多学员通过学院平台进行课程学习&#xff0c;我们收到越来越多用户的反馈&#xff0c;现在通过本帖子来对课程功能做一个介绍&#xff0c;简称课程功能使用说明书1.0版&#xff0c;有任何问题均可在帖子下留言。 讲师 如何成为…

A3C的算法原理和算法流程

在强化学习(十四) Actor-Critic中&#xff0c;我们讨论了Actor-Critic的算法流程&#xff0c;但是由于普通的Actor-Critic算法难以收敛&#xff0c;需要一些其他的优化。而Asynchronous Advantage Actor-critic(以下简称A3C)就是其中比较好的优化算法。本文我们讨论A3C的算法原…

强化学习算法学习汇总笔记 (二) — Actor Critic、DDPG、A3C、

文章目录 一. Actor Critic二. Deep Deterministic Policy Gradient (DDPG)三. Asynchronous Advantage Actor-Critic (A3C) 一. Actor Critic 1.基本概念 Actor Critic 为类似于Policy Gradient 和 Q-Learning 等以值为基础的算法的组合。 a. 其中Actor 类似于Policy Gradie…

强化学习之AC、A2C和A3C

阅读本文可参考我以前的文章《强化学习实践教学》https://tianjuewudi.gitee.io/2021/07/16/qiang-hua-xue-xi-shi-jian-jiao-xue/#toc-heading-29&#xff0c;其中的连续动作空间上求解RL章节是本文的基础&#xff0c;其中的DDPG和Actor-Critic除了Target网络外其余都一致。 …

深度强化学习系列(14): A3C算法原理及Tensorflow实现

在DQN、DDPG算法中均用到了一个非常重要的思想经验回放&#xff0c;而使用经验回放的一个重要原因就是打乱数据之间的相关性&#xff0c;使得强化学习的序列满足独立同分布。 本文首先从Google于ICML2016顶会上发的论文《Asynchronous Methods for Deep Reinforcement Learnin…

Android 热修复方案--阿里百川HotFix

概述 我们都知道一旦我们的应用被发布到各大平台上面之后修复bug是一件很麻烦的事情,如果要重新发布审核周期之长&#xff0c;用户肯定不接受&#xff0c;虽然也可以在应用中自检更新&#xff0c;但是一个小小的bug动辄就更新应用实在是大材小用&#xff0c;但是不更新用户怎么…

强化学习的A3C算法应用(训练Atari游戏)

A3C算法的全称是Asynchronous Advantage Actor-Critic&#xff0c;异步优势执行者/评论者算法。这个算法和优势执行者/评论者算法的区别在于&#xff0c;在执行过程中不是每一步都更新参数&#xff0c;而是在回合结束后用整个轨迹进行更新。因此可以让多个Worker来进行轨迹的搜…

【强化学习】A3C原理

先解释一下什么叫异步、什么叫并发&#xff1a; **异步&#xff1a;**和同步相对&#xff0c;同步是顺序执行&#xff0c;而异步是彼此独立&#xff0c;在等待某个事件的过程中继续做自己的事&#xff0c;不要等待这一事件完成后再工作。线程是实现异步的一个方式&#xff0c;异…

java实现手机尾号评分

30年的改革开放&#xff0c;给中国带来了翻天覆地的变化。2011全年中国手机产量约为11.72亿部。手机已经成为百姓的基本日用品&#xff01; 给手机选个好听又好记的号码可能是许多人的心愿。但号源有限&#xff0c;只能辅以有偿选号的方法了。 这个程序的目的就是&#xff1a…

基于RK3288 平台 Simple card声卡添加及调试

基于RK3288 平台 Simple card声卡添加及调试Simple card即简单通用的machine driver&#xff0c; 如果simple-card框架足够满足需求&#xff0c;建议优先使用simple card框架&#xff0c;简单&#xff0c;方便&#xff0c;且易用.一、 添加声卡 1. 添加codec driver&#xff0c…

M1卡操作

原文传送门&#xff1a;https://www.cnblogs.com/ivantang/p/3904025.html M1卡介绍 本文整理自网络。 M1卡是指菲利浦下属子公司恩智浦出品的芯片缩写&#xff0c;全称为NXP Mifare1系列&#xff0c;常用的有S50及S70两种型号&#xff0c;目前都有国产芯片与其兼容&#xff0…

SIM卡在手机中的主要作用

SIM卡在手机中的主要作用 SIM卡作为智能卡的一种&#xff0c;其作用依旧被限定在数据存储和加解密处理方面。 在移动通讯初期没有SIM卡的概念&#xff0c;当时采用的是机号一体的方式&#xff08;后来对于CDMA技术而言出现了机卡分离和机卡一体的说法&#xff0c;早期还没有SIM…

Python3网络爬虫(十三):王者荣耀那些事!(Fiddler之手机APP爬取)

转载请注明作者和出处&#xff1a;http://blog.csdn.net/c406495762 运行平台&#xff1a; Windows Python版本&#xff1a; Python3.x IDE&#xff1a; Sublime text3 前言实战背景准备工作 什么是Fiddler手机APP抓包设置 Fiddler设置安全证书下载安全证书安装局域网设置Fi…

hmcl手机版_hmcl启动器手机版下载-hmcl启动器安卓版下载mod附教程_易玩网

hmcl启动器是一款专门为我的世界打造的可以加入运行操作的辅助工具。有了hmcl启动器&#xff0c;用户在运行我的世界这款游戏的时候可以体验更加的稳定&#xff0c;有需要的小伙伴们可以下载hmcl启动器前来体验一番哦&#xff0c;非常优秀的启动器。 hmcl启动器使用教程 游戏的…

A3C代码详解

莫烦大神的A3C连续控制代码详解""" Asynchronous Advantage Actor Critic (A3C) with continuous action space, Reinforcement Learning. The Pendulum example. View more on my tutorial page: https://morvanzhou.github.io/tutorials/ Using: tensorflow 1…

服务器主板检测卡显示06,主板检测卡代码大全对照表

摘要:今天系统之家小编为大家提供主板检测卡代码大全对照表,电脑主板出现故障或者问题,大家一般对照主板检测卡代码判断出现的问题,但是不少人对主板检测卡代码大全表示不知道..... 今天系统之家小编为大家提供主板检测卡代码大全对照表,电脑主板出现故障或者问题,大家一般对…

图像修复(拖影、失焦、雨雾、模糊)deblurGAN 论文解读

图像修复&#xff08;拖影、失焦、雨雾、模糊&#xff09;deblurGAN 论文解读 look for papers for deblurGAN contributer : leoluopy 欢迎提issue.欢迎watch &#xff0c;star.微信号&#xff1a;leoluopy关注AI前沿技术及商业落地&#xff0c;欢迎交流 更多图像AI笔记分享…

深度增强学习(DRL)漫谈 - 从AC(Actor-Critic)到A3C(Asynchronous Advantage Actor-Critic)

前言 之前在文章《深度增强学习&#xff08;DRL&#xff09;漫谈 - 从DQN到AlphaGo》扯了一些关于DRL的内容&#xff0c;但因为是以DQN为主线&#xff0c;其中大部分谈的是value-based方法。我们知道传统增强学习&#xff08;Reinforcement learning, RL&#xff09;中除了val…
最新文章