【顺序栈的出栈,链栈的表示和实现,递归定义】

文章目录

    • 顺序栈的出栈
  • 链栈的表示和实现
    • 链表的初始化
    • 判断链栈是否为空
    • 链栈的入栈
    • 链栈的出栈
  • 递归定义
    • 函数的调用过程

顺序栈的出栈

(1)判断是否栈空,若空则出错(下溢)。
(2)获取栈顶元素e。
(3)栈顶指针减1。

//顺序栈的出栈
int Pop(SqStack& S, SElemType& e) {//若栈不为空,则删除栈顶元素,用e返回其值,并返回ok;if (S.top == S.base) {return 0;}--S.top;e = *S.top;return 1;
}

链栈的表示和实现

链表的实现
链栈是运算受限的单链表,只能在链表头部进行操作。

//链栈的表示
typedef struct StackNode {int data;struct StackNode* next;
}StackNode,*LinkStack;
LinkStack S;

在这里插入图片描述

  • 链表的头指针就是栈顶。
  • 不需要头结点。
  • 基本不存在满栈的情况。
  • 空栈相当于头指针指向空。
  • 插入和删除仅在栈顶处执行。

链表的初始化

void InitStack(LinkStack& S) {S = NULL;
}

判断链栈是否为空

//链栈是否为空
bool StackEmpty(LinkStack S) {if (S == NULL) {return true;}else {return false;}
}

链栈的入栈

//链栈上的入栈
void Push(LinkStack S, int e) {LinkStack p;p = new StackNode;//生成新结点p->data = e;//将新结点的数据域置为ep->next = S;//将S结点赋值给p结点的next域S = p;//修改栈顶指针}

在这里插入图片描述

链栈的出栈

//链栈的出栈
int Pop(LinkStack S,int e) {LinkStack p;if (S == NULL) {return 0;}e = S->data;p = S;S = S->next;delete p;return 1;
}

在这里插入图片描述

递归定义

若一个对象部分地包含他自己,或用他自己给自己的定义,就称这个对象是递归的。
若一个过程直接或间接地调用自己,则这个调用过程
是递归的过程。
分治法求解递归问题算法的一般形式:

void p(参数表){if(递归结束条件)可直接求解步骤;-------基本项else p(较小参数);---归纳项
}

例:求阶乘

long Fact(long n){
if(n==0{return 1}  ;
else return n*Fact(n-1);

函数的调用过程

调用前,系统完成:
(1)将实参,返回地址等传递给被调用函数
(2)为被调函数的局部变量分配存储区域
(3)将主调函数转移到被调函数
调用后,系统完成:
(1)保存被调函数的计算结果
(2)释放被调函数的数据区
(3)依照被调函数保存的返回地址转移到主调函数。
当多个函数嵌套调用时:
遵循后调用先返回。需要用栈来实现。
在这里插入图片描述

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

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

相关文章

【AD9361 数字接口CMOS LVDSSPI】B 并行数据之CMOS 续

续【AD9361 数字接口CMOS &LVDS&SPI】B 并行数据之CMOS 数据总线空闲和周转周期 (CMOS) P0_D[11:0]和P1_D[11:0]总线信号通常由BBP或AD9361有源驱动。在任何空闲期间,两个组件都会忽略数据总线值。但是&…

MODBUS-RTU从站通信(SMART PLC作为MODBUS-RTU从站)

SMART PLC作为MODBUS-RTU主站通信请参考下面文章链接: 【精选】PLC MODBUS通信优化、提高通信效率避免权限冲突(程序+算法描述)-CSDN博客文章浏览阅读2.5k次,点赞5次,收藏10次。MODBUS通讯非常简单、应用也非常广泛,有些老生常谈的问题,这里不再赘述,感兴趣的可以参看…

uci机器学习数据库简介

UCI(University of California, Irvine)机器学习数据库是经过精心整理的、用于研究和开发机器学习算法的数据集合。UCI机器学习数据库是一个公开的、广泛使用的数据集合,它由加州大学欧文分校的计算机科学系维护。该数据库中包含了许多数据集…

Python中的变量与注释

一、变量与注释决定第一印象 1、变量和注释是代码里最接近自然语言的部分,其可读性至关重要。 2、即便是同一个算法,变量和注释的不同,也会给人截然不同的印象。 二、基础知识 1、Python变量赋值语法非常灵活! (1&…

基于 ARM+FPGA+AD平台的多类型同步信号采集仪开发及试验验证(一)上位机设计

采集仪上位机设计 本章开发了一款基于 C# 的上位机软件,用于对多类型同步信号采集仪的各项功能 进行操作。从采集仪的数据传输需求出发,上位机利用以太网 UDP 协议实现与采集仪 的数据交互,包括向采集仪发送控制信息与配置信息、接收采…

Vite+Vue3项目全局引入scss文件

前言 Sass 是世界上最成熟、最稳定、最强大的专业级CSS扩展语言!在日常项目开发过程中使用非常广泛,今天主要讲一下 ViteVue3 项目中该如何全局引入 scss 文件,引入混合 mixin 文件的不同配置。捎带说一下 Vue2 中的引入方式做一下简单的对比…

【linux】安装rpmrebuild

rpmrebuild是一种从已经安装的包中构建RPM文件的工具。它可以用于轻松构建修改后的包,并适用于任何使用RPM的Linux发行版。 访问地址 rpm rebuild download | SourceForge.net 选择版本 版本地址:版本地址 下载安装包 安装 rpm -ivh rpmrebuild-2.15…

2023大湾区杯粤港澳金融数学建模竞赛思路+模型+代码

目录 一.思路模型见文末名片,比赛开始第一时间更新 二.大湾区杯常用算法之主成分分析法(PCA) 三.MATLAB代码 四.国赛建模思路获取见此 一.思路模型见文末名片,比赛开始第一时间更新 二.大湾区杯常用算法之主成分分析法(PCA) 主成分分析法(PCA)是一种…

人工智能轨道交通行业周刊-第64期(2023.10.16-10.29)

本期关键词:北斗应用、供电智能运维、5G-R、铁路职称、星火大模型 1 整理涉及公众号名单 1.1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交通RailMetro轨道世界铁路那…

集合总结(Java)

Collection 常用方法 package com.test01;import java.util.ArrayList; import java.util.Collection; /*添加元素---boolean add(E e);移除元素---boolean remove(Object c);判断元素是否存在---boolean contains(Object c);*/ public class S {public static void main(Str…

关于多个elementui的cascader级联组件页面滚动渲染样式导致卡顿问题

如题,多个cascader级联组件,下拉选项含大量数据,滚动时会有实时样式重新渲染,导致CUP内存溢满而卡顿 小优化技巧:可加loading一次性加载完多个cascader级联组件后再允许页面滚动。 方法一:使用elementui中…

【2023.10.25练习】数据库-函数2

任务描述 本关任务:编写函数fun_2,实现指定学生的GPA计算。输入参数为学号,函数返回值为该生的GPA。 编程要求 在代码文件“step3/query1.sql”中实现函数fun_2; 在代码文件“step3/query2.sql”中实现在select命令中调用函数f…

LeetCode 917 仅仅反转字母 简单

题目 - 点击直达 1. XXXXX1. 917 仅仅反转字母 简单1. 原题链接2. 题目要求3. 基础框架 2. 解题思路1. 思路分析2. 时间复杂度3. 代码实现 1. XXXXX 1. 917 仅仅反转字母 简单 给你一个字符串 s ,根据下述规则反转字符串: 所有非英文字母保留在原有位置…

【计算机网络】认识协议

目录 一、应用层二、协议三、序列化和反序列化 一、应用层 之前的socket编程,都是在通过系统调用层面,如今我们来向上打通计算机网络。认识应用层的协议和序列化与反序列化 我们程序员写的一个个解决我们实际问题, 满足我们日常需求的网络程序, 都是在应…

如何快速解决d3dcompiler_43.dll缺失问题?五种方法快速解决

在计算机使用过程中,我们常常会遇到一些错误提示,其中之一就是“D3DCompiler_43.dll缺失”。这个错误通常会导致游戏、应用程序或系统无法正常运行。为了解决这个问题,我们需要采取一些修复方案来恢复缺失的文件。本文将介绍五个修复D3DCompi…

百度超级链XuperChain使用JavaSDK接入

环境 : ubuntu20 xuperchain 5.3 go 1.17 springboot : 2.5.14 前言 请提前启动好xchain的节点,我选择简单启一个xchain节点作为测试,并且使用默认端口37101 SpringBoot项目初始化 我们先进行SpringBoot项目的配置进行讲解,这里…

mongodb数据迁移的方法

这个方法只能将数据从一个mongo数据库转移到另一个mongo数据库 这个命令可以备份mongo数据(mongo数据库中的数据备份转换为文件) mongodump --host HOST --port PORT --username USERNAME --password PASSWORD --db DB -c COLLECTION --out OUT这个命令…

Flutter的The file name ‘xxxx.dart‘ isn‘t a snake_case identifier警告

文章目录 警告原因分析解决方法dart的一些命名规则变量和函数命名:类和类型命名:常量和枚举:文件命名:包命名:注释:命名一致性:避免缩写:可搜索的命名: 一些好习惯 警告 …

C++不能在子类中构造函数的初始化成员列表中直接初始化基类成员变量

在C中,派生类的构造函数可以调用基类的构造函数来初始化基类的成员变量。但是无法在派生类的构造函数的初始化列表中直接初始化基类的成员变量。 如果那样做,会报错:xx不是类xx的非静态成员或基类 例子 class StatusBase{ public:~StatusBas…

[已解决]安装的明明是pytorch-gpu,但是condalist却显示cpu版本,而且torch.cuda.is_available 也是flase

问题; 安装了gpu版本的pytorch,但是显示的torch.cuda.is_available()却是flase。 conda list查看 版本显示只有cpuonly 在网上找了半天,也没有解决办法。 仔细看了一下,发现,有个单独的包叫cpuonly,不知道…