数据结构与算法-栈

参考学习:B站-逊哥带你学编程

栈的定义与实现

在这里插入图片描述

补充:

栈是限制插入和删除操作只能在一个位置进行的表,该位置是表的末端,叫作栈顶(top)。

对栈的基本操作有进栈(push)和出栈(Pop),前者相当于插入后者则是删除最后插入的元素。

栈的顺序结构实现

在这里插入图片描述

#define MAXSIZE 100
typedef int ElemType;typedef struct
{ElemType data[MAXSIZE];int top;
}Stack;

栈的顺序结构-初始化

void initStack(Stack *S)
{S->top = -1;
}

栈的顺序结构-判断栈是否为空

int isEmpty(Stack *S)
{if(S->top == -1){printf("Stack is empty\n");return 1;}return 0;
}

栈的顺序结构-进栈/压栈

int push(Stack *S, ElemType e)
{if(S->top >= MAXSIZE-1){printf("Stack is full\n");return 0;}S->top++;S->data[S->top] = e;return 1;
}

栈的顺序结构-出栈

ElemType pop(Stack *S, ElemType *e)
{if(S->top == -1){printf("Stack is empty\n");return 0;}*e = S->data[S->top];S->top--;return 1;
}

栈的顺序结构-获取栈顶元素

int getTop(Stack *S, ElemType *e)
{if(S->top == -1){printf("Stack is empty\n");return 0;}*e = S->data[S->top];return 1;
}

栈的顺序结构-动态内存分配

typedef struct
{ElemType *data;int top;
}Stack;Stack *initStack()
{Stack *S = (Stack *)malloc(sizeof(Stack));S->data = (ElemType *)malloc(sizeof(ElemType)*MAXSIZE);S->top = -1;return S;
}

栈的链式结构实现

typedef int ElemType;typedef struct
{ElemType data;struct stack *next;
}Stack;

图示:

在这里插入图片描述

栈的链式结构实现-初始化

Stack *initStack()
{Stack *S = (Stack *)malloc(sizeof(Stack));S->data = 0;S->next = NULL;return S;
}

栈的链式结构实现-判断栈是否为空

int isEmpty(Stack *S)
{if(S->next == NULL){printf("Stack is empty\n");return 1;}return 0;
}

栈的链式结构实现-进栈/压栈

int push(Stack *S, ElemType e)
{Stack *p = (Stack *)malloc(sizeof(Stack));p->data = e;p->next = S->next;S->next = p;return 1;
}

栈的链式结构实现-出栈

int pop(Stack *S, ElemType *e)
{if(S->next == NULL){printf("Stack is empty\n");return 0;}Stack *p = S->next;*e = p->data;S->next = p->next;free(p);return 1;
}

栈的链式结构实现-获取栈顶元素

int getTop(Stack *S, ElemType *e)
{if(S->next == NULL){printf("Stack is empty\n");return 0;}*e = S->next->data;return 1;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/17815.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式硬件篇---OpenMV的硬件流和软件流

文章目录 前言一、硬件流控制(Hardware Flow Control)1. 基本原理RTSCTS 2. OpenMV中的实现• 硬件要求• 代码配置• 工作流程 二、软件流控制(Software Flow Control)1. 基本原理XONXOFF 2. OpenMV中的实现• 代码配置• 工作流…

MySQL Workbench菜单汉化为中文

默认情况下,安装完成的MySQL Workbench的菜单为英文,今天介绍一个简单易操作的方法,将MySQL Workbench菜单汉化为中文。 一、查找MySQL Workbench菜单标记文件main_menu.xml 1. 默认情况下,MySQL Workbench的安装路径为&#xff…

C++从入门到实战(四)C++引用与inline,nullptr

C从入门到实战(四)C引用与inline,nullptr 前言一、C 引用(一)什么是引用(二)引用的特点(三)引用作为函数参数(四)引用作为函数返回值(…

【C/C++算法】从浅到深学习--- 二分查找(图文兼备 + 源码详解)

绪论:冲击蓝桥杯一起加油!! 每日激励:“不设限和自我肯定的心态:I can do all things。 — Stephen Curry” 绪论​: 本章是算法篇章的第三章二分算法,本章主要是通过题目的形式来进行学习&…

mysql之联合索引

文章目录 一:联合索引二:创建联合索引三:删除索引四:总结: 一:联合索引 联合索引又称组合索引或者复合索引,是建立在俩列或者多列以上的索引。 二:创建联合索引 语法&#xff1a…

51单片机09 DS1302时钟

测试一 测试代码&#xff1a;别忘了之前调整点阵的跳线 #include <STC89C5xRC.H> #include "LCD1602.h"void main() {LCD_Init();LCD_ShowString(1,1,"RTC");while(1){} } ------------------------------------ 测试二 DS1302.C #include &l…

【前端OCR】如何用paddlejs开发一个属于前端本地的OCR文本识别功能

之前出过一篇关于用tesseract纯前端实现文本识别功能的文档&#xff0c;经测试之后&#xff0c;用是能用&#xff0c;但识别准确率并不高&#xff0c;而且耗时也相对比较久。 于是又找了一个paddlejs做开发测试&#xff0c;但是整体上来说&#xff0c;其实两个差不多。而且初始…

Spring IoC的实现机制是什么?

大家好&#xff0c;我是锋哥。今天分享关于【Spring IoC的实现机制是什么&#xff1f;】面试题。希望对大家有帮助&#xff1b; Spring IoC的实现机制是什么&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring IoC&#xff08;Inversion of Control…

Web3 开发者周刊 36 | 构建自主未来:Agent、可扩展性与赏金

欢迎来到 Web3 开发者周刊 36&#xff0c;这里汇聚了赋能您的 Web3 构建之旅的各种资源。本周我们将剖析基于Agent的系统&#xff0c;讨论来自 Vitalik 关于以太坊 L1 和 L2 的最新思考&#xff0c;并提供最新高价值Bounty消息。 开始Build吧&#xff01; ✅ One Trillion Age…

网络安全-防御 第一次作业(由于防火墙只成功启动了一次未补截图)

防火墙安全策略课堂实验报告 一、拓扑 本实验拓扑包含预启动设备、DMZ区域&#xff08;含OA Server和Web Server&#xff09;、防火墙&#xff08;FW1&#xff09;、Trust区域&#xff08;含办公区PC和生产区PC&#xff09;等。具体IP地址及连接关系如给定拓扑图所示&#xf…

Vue.js 与低代码开发:如何实现快速应用构建

在当今数字化时代&#xff0c;企业对应用开发的效率要求越来越高。传统开发模式往往耗时费力&#xff0c;难以满足快速变化的市场需求。而 Vue.js 与低代码开发的结合&#xff0c;为快速构建应用提供了新的解决方案&#xff0c;让企业能够更敏捷地响应市场变化&#xff0c;抢占…

第39周:猫狗识别 2(Tensorflow实战第九周)

目录 前言 一、前期工作 1.1 设置GPU 1.2 导入数据 输出 二、数据预处理 2.1 加载数据 2.2 再次检查数据 2.3 配置数据集 2.4 可视化数据 三、构建VGG-16网络 3.1 VGG-16网络介绍 3.2 搭建VGG-16模型 四、编译 五、训练模型 5.1 上次程序的主要Bug 5.2 修改版…

朝天椒USB服务器解决前置机U盾虚拟机远程连接

本文探讨朝天椒USB服务器用Usb Over Network技术&#xff0c;解决前置机虚拟化部署后U盾的远程连接问题。 在金融、电信等关键行业&#xff0c;后台核心处理系统承担着至关重要的业务数据交互职责。为保障系统安全&#xff0c;这些单位要求企业通过前置机与他们的内网进行数据…

《刚刚问世》系列初窥篇-Java+Playwright自动化测试-23- 操作鼠标拖拽 - 番外篇(详细教程)

拉票 亲爱的小伙伴们或者童鞋们&#xff0c;喜欢宏哥文章的&#xff0c;请动动你们发财小手&#xff0c;给我投投票票 。 祝2025小伙伴们工作顺利&#xff0c;家庭和睦&#xff0c;心想事成&#xff0c;财源滚滚&#xff01; 我的票还有7票&#xff0c;互票的朋友私信给我。 投…

教程 | 从零部署到业务融合:DeepSeek R1 私有化部署实战指南

文章目录 1. 什么是 DeepSeek R1&#xff1f;a. 主要介绍a. 版本区别 2. 部署资源要求a. 硬件资源要求 3. 本地安装DeepSeek-R1a. 为什么选择本地部署&#xff1f;b. 部署工具对比c. 演示环境配置d. Ollama安装流程 4. 可视化工具a. 工具对比b. Open-WebUI部署 5. AI API应用a.…

学习总结2.14

深搜将题目分配&#xff0c;如果是两个题目&#xff0c;就可以出现左左&#xff0c;左右&#xff0c;右左&#xff0c;右右四种时间分配&#xff0c;再在其中找最小值&#xff0c;即是两脑共同处理的最小值 #include <stdio.h> int s[4]; int sum0; int brain[25][25]; …

Qt Creator 5.0.2 (Community)用久了突然变得很卡

目录 1.现象 2.解决方案 1.现象 很久没有用Qt Creator开发项目了&#xff0c;刚刚结束的项目又是用VS2019开发的&#xff1b;这两天刚好有时间去学习一下Qt&#xff0c;刚好要用Qt Creator&#xff0c;结果一打开就没反应&#xff0c;主界面显示出来要好几分钟&#xff0c;最…

DeepSeek的深度解析:由来、研发过程、公司背景、优势、劣势与总结

DeepSeek的由来 DeepSeek&#xff0c;中文名“深度求索”&#xff0c;是一个在人工智能领域崭露头角的创新项目。其英文名“DeepSeek”由“深思”&#xff08;Deep&#xff09;与“探索”&#xff08;Seek&#xff09;组合而成&#xff0c;寓意着凭借深度学习技术不断探索未知…

初阶c语言(练习题,猜随机数)

前言&#xff1a; 学习c语言&#xff0c;学习来源b站鹏哥&#xff0c;37天吧应该是 内容&#xff1a; 这集内容挺多&#xff0c;源代码放到文章最后 题目是&#xff0c;使用函数编写一个随机数&#xff0c;然后自己猜&#xff0c;猜随机数 这里囊括了很多的知识点&#xf…

w206基于Spring Boot的农商对接系统的设计与实现

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…