数据结构 栈 入栈 输出 出栈

article/2025/8/16 9:07:49

数据结构 栈 入栈 输出 出栈

#include<bits/stdc++.h>
/*
#include<iostream>
#include<>
*/
using namespace std;
//pA->p(Next)=pB->p(top)含义是pA指向pB
typedef struct Node//有节点的数据类型 
{int data;//数据域struct Node * pNext; }NODE,*PNODE; typedef struct Stack//栈 
{PNODE pTop;// 栈顶 PNODE pBottom;//栈底 
} STACK,*PSTACK;//声明 可用不用写形参,但要写数据类型 
void init(PSTACK);//这是指针即地址 
void push(PSTACK,int);//不用返回值,不存在满,一定会成功 
void traverse(PSTACK);//不用返回值,遍历把栈s发就行
bool empty( PSTACK pS); 
bool  pop(PSTACK,int*); //出栈,只要一个栈的地址就行 ,数值是*pVal要用指针传递,指针变量在栈中操作 
//返回类型是什么,要是函数里面有输出,不用int,函数会有成功失败用bool int main()
{int val;STACK S; // 先造一个空栈 init(&S);//必须写s的地址,不然不能改变 push(&S,1);//入栈 push(&S,2);push(&S,3);traverse(&S);if( pop(&S,&val))//一定注意这是地址& {cout<<"出栈成功,值是:"<<val; }else{	cout<<"出栈失败"<<endl; }return 0;
} void init(PSTACK ps)//这是指针即地址 
{//为什么结构体可以指向结构体内部成员:ps形参的数类型是PSACK栈指针 //造出一个点,把地址给pTop指针 即pS栈的pTop指向新的点 ps->pTop = (PNODE)malloc(sizeof(NODE));if( NULL==ps->pTop){cout<<"动态内存分配失败"<<endl;exit(-1); //直接终止 }else{//顶底指向了同一个头节点,这个头节点指针域是空 ps->pBottom=ps->pTop;//顺序不能反,底指向顶,即底也指向新的点 ps->pBottom->pNext =NULL;//ps所指向的pBtoom成员指向的指针域是空的 } ps->pBottom;}void push(PSTACK pS,int val)
{//先注意1pS是栈2pNew是新点的指针地址3指针域是->pNext//pA->p(Next)=pB->p(top)含义是pA指向pB //入栈,先造一个点PNODE pNew=(PNODE)malloc(sizeof(NODE)); pNew->data=val;//值存入新点 pNew->pNext=pS->pTop;//新点的指针域 指向未插入节点前 pS栈的顶,这里只能是toppS->pTop=pNew; //pS栈的top指针指向新的点 return;
}void traverse(PSTACK pS)
{//先定义一个指针p PNODE p= pS->pTop;while ( p!=pS->pBottom 	){cout<<p->data<<endl;p=p->pNext;//p后移 }return;
}//判断是否是空,要返回是否bool,要形参栈 
bool empty( PSTACK pS)
{if( pS->pTop==pS->pBottom )return true;elsereturn false; 
}//出栈即删除  把ps所指的栈出栈一次,并把出栈的元素存入pVal形参所指的变量中,出栈成功 
bool  pop(PSTACK pS,int *pVal)
{if( empty(pS ) ) //要传地址,但ps本身就是指针即地址 return false;//不能出栈返回false,试试能不能输出 不能出栈 else//出栈即删除元素,先用新指针r把这个点保存起来,在top指向top下一个, free(r) {PNODE r=pS->pTop;  //造一个新指针r放现在的top *pVal=r->data;//*pVal是pval指向的变量,把r的值放入 pS->pTop=pS->pTop->pNext;//top指向top下一个free(r);//释放r r=NULL;//pBottom不用变,一直在底 return true;}}

结果

在这里插入图片描述

如果对你有帮助,请 点赞 支持一下


http://chatgpt.dhexx.cn/article/ICFMrxd8.shtml

相关文章

数据结构-栈

栈的定义 栈是一种特殊的线性表&#xff0c;仅允许在表的一端进行插入和删除运算。这一端被称为栈顶&#xff08;top&#xff09;&#xff0c;相对地&#xff0c;把另一端称为栈底&#xff08;bottom&#xff09;。向一个栈插入新元素又称作进栈、入栈或压栈&#xff08;push&…

数据结构-栈及栈的应用

目录 栈的概述 部分算法分析 顺序栈的表示和实现 global.h Stack.h StackTest.cpp 运行结果 栈的应用 数的任意进制转换 括号匹配检验 栈的概述 栈是一种重要的线性结构&#xff0c;属于一种操作受限的线性表栈(stack) 是限定仅在表尾进行插入或删除操作的线性表表尾端…

java数据结构-栈

栈 1、栈的定义 栈&#xff08;Stack&#xff09;&#xff1a;是只允许在一端进行插入或删除的线性表。首先栈是一种线性表&#xff0c;但限定这种线性表只能在某一端进行插入和删除操作。 栈顶&#xff08;Top&#xff09;&#xff1a;线性表允许进行插入删除的那一端。 栈底…

数据结构栈(顺序栈、链栈、插入push、删除pop)、队(循环队,链队、入队push,出队pop)知识点梳理

数据结构栈知识点梳理 一 栈的定义 栈&#xff08;stack&#xff09;是限定仅在表尾进行插入和删除操作的线性表 不含任何元素的栈称为空栈 允许插入和删除的一端成为栈顶&#xff08;top&#xff09;&#xff0c;另一端称为栈底&#xff08;bottom&#xff09; 具有LIFO&a…

数据结构栈和队列

整本书的知识点&#xff0c;点击右方链接&#xff1a;整本书笔记知识点 文章目录 三、栈和队列3.1、栈和队列的定义和特点3.1.1、栈的定义和特点3.1.2、队列的定义和特点 3.2、案例引入3.3、栈的表示和操作的实现3.3.1、栈的类型定义3.3.2、顺序栈的表示和实现3.3.3、链栈的表示…

C++数据结构——栈

C数据结构——栈 最近计划再复习一遍数据结构&#xff0c;看到一篇博客&#xff1a;https://www.cnblogs.com/QG-whz/p/5170418.html#_label0。 1、栈(Stack)是一种线性存储结构&#xff0c;它具有如下特点&#xff1a; &#xff08;1&#xff09;栈中的数据元素遵守“先进后…

数据结构 栈-链栈及基本操作

目录 一.栈的定义二.栈的特点三.栈的理解四.链栈引入五.链栈定义六.链栈的结构体设计七.链栈的基本操作7.1链栈的初始化7.2链栈判空7.3链栈入栈7.4链栈出栈7.4取栈顶元素 八.总结 一.栈的定义 栈是限定仅在表尾进行插入和删除操作的数据结构&#xff08;受到限制的线性表&…

数据结构之——栈

文章目录 数据结构之——栈一&#xff1a;栈的定义&#xff1a;二&#xff1a;栈的抽象数据类型&#xff1a;三&#xff1a;栈的顺序存储结构及其实现&#xff1a;1: 预说明&#xff1a;2&#xff1a;栈的顺序存储结构——结构定义&#xff1a;3:栈的顺序存储结构——进栈操作4…

数据结构与算法(3)栈

栈 1、栈的一个实际需求 请输入一个表达式&#xff1a;7x2x2-51-53-3 2、栈的介绍 栈的英文为stack 栈是一个**先入后出(FILO-First In Last Out) **的有序列表 栈(stack) 是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。 允许插入和删除的一端…

【数据结构】栈

栈的概念及结构 在学习栈前&#xff0c;我们先看一下栈的正式解释&#xff1a; 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端 称为栈顶&#xff0c;另一端称为栈底。 栈中的数据元素遵守后进先出 L…

什么是栈?

本文将介绍一个重要的数据结构—栈&#xff0c;和之前讲到的链表、数组一样也是一种数据呈线性排列的数据结构&#xff0c;不过在这种结构中&#xff0c;我们只能访问最新添加的数据。栈就像是一摞书&#xff0c;拿到新书时我们会把它放在书堆的最上面&#xff0c;取书时也只能…

【图解数据结构】栈全面总结

目录 一、前言 二、基本概念 三、栈的表示和实现 1.顺序栈 2.链栈 四、栈的常见算法实现 1.初始化 2.判空 3.判满 4.顺序栈取栈顶元素 5.顺序栈入栈 6.顺序栈出栈 五、双栈 1.双端顺序栈进栈操作 2.双端顺序栈出栈操作 六、栈的应用举例 1.回文游戏 2.多进制…

数据结构——栈

栈和队列 栈和队列介绍特点栈、队列与一般线性表的区别栈——stack栈的基本运算栈的存储结构顺序栈链栈 栈的应用 栈和队列 介绍 栈和队列是在软件设计中常用的两种数据结构&#xff0c;它们的逻辑结构和线性表相同 特点 栈和队列在运算上受到了限制&#xff1a;栈是按照“…

遥感影像百分比线性拉伸

AI Earth地球科学云平台开发者模式提供了丰富的遥感数据和函数计算能力&#xff0c;下面介绍结合AIE Notebook&#xff0c;实现遥感数据的百分比线性灰度拉伸。 本期开发者实践案例——遥感影像百分比线性拉伸 灰度拉伸 (GrayScale Stretch) 是遥感影像处理过程中的重要步骤&…

遥感影像分类方法

最初的遥感影像分类是通过目视解译(濮静娟, 1984)来完成的&#xff0c;对研究人员的主观意识有较强的依赖性&#xff0c;而且效率较低&#xff0c;适用于数据量较小的情况&#xff0c;通常作为其他方法对比的对象。目前的遥感图像分类主要以计算机分类为主&#xff0c;因此按照…

遥感影像配准

文章目录 前言步骤1.ENVI&#xff1a;打开Image Registration Workflow2.Image Registration Workflow(1)选择GF2为Base Image File&#xff0c;某季节Sentinel2为Warp&#xff0c;然后Next(2)修改该参数为100(3)人为选择5个左右控制点&#xff0c;然后Next(4)删除离谱点(5)在E…

遥感图像分类技术

什么是遥感图像分类技术&#xff1f; 图像分类是将土地覆盖类别分配给像素的过程。例如&#xff0c;这9个全球土地覆盖数据集将图像分为森林、城市、农业和其他类别。 https://gisgeography.com/free-global-land-cover-land-use-data/ 一般来说&#xff0c;这是遥感中的三种主…

遥感图像分类

遥感图像分类 一、背景简介 遥感图像分类就是利用计算机通过对遥感图像中各类地物的光谱信息和空间信息进行分析&#xff0c;选择特征&#xff0c;将图像中各个像元按照某种规则或算法划分不同的类别&#xff0c;然后获得遥感图像中与实际地物的对应信息&#xff0c;从而实现…

WorldView卫星遥感影像数据/米级分辨率遥感影像

数据样例&#xff1a;百度云下载链接&#xff1a;https://pan.baidu.com/s/17ofPwpDM3OCHnE-LuhvUp 提取码&#xff1a;i0m4 目前世界上最常用的高分辨率卫星影像莫过于WORLDVIEW系列了&#xff0c;在卫星遥感圈内可谓大名鼎鼎&#xff0c;不仅具有超高的分辨率还具有其他高分…

遥感数据下载平台汇总

1中国资源卫星应用中心http://www.cresda.com.cn中巴卫星、HJ星、ZY系列 、GF系列2中科院对地观测与数字地球科学中心http://ids.ceode.ac.cn/Index.aspxERS卫星&#xff0c;Enviset_1卫星&#xff0c;法国的spot4卫星&#xff0c;中巴资源卫星&#xff0c;landset-5-73地球系统…