C/C++实现栈的一些基本操作

C++代码实现栈基本操作 C++代码实现栈基本操作,可以实现的,点进不亏 阅读详情

顺序栈及其基本操作

#include <iostream>
#include <Windows.h>
#include <stdlib.h>
using namespace std;

#define STACK_INIT_SIZE 100
#define ElemType int 
/*
栈的三种有用操作
1.获取栈顶元素
2.入栈
3.出栈
*/
//Elemtype代表某一不确定类型

typedef struct
{
	int *bottom;
	int *top;
	int stackSize;
}sqStack;

/* 关于栈的一些基本操作 */
void initStack(sqStack &s);         //创造空栈
ElemType GetTop(sqStack &s);        //获取栈顶元素
bool Isempty(sqStack &s);           //是否空栈
void cleanStack(sqStack &s);        //清空栈
void destroyStack(sqStack &s);         //销毁栈
void push_stack(sqStack &s, int e);    //入栈操作
ElemType pop_stack(sqStack &s, ElemType *e);  //出栈操作
ElemType Stack_length(sqStack &s);  //栈的长度
void StackTraverse(sqStack &s);     //栈的遍历

int main()
{
	sqStack S;   
	initStack(S);  //构造一个空栈
	
	ElemType i, n;
	cout << "...输入栈的长度: ";
	cin >> n;
	/* 栈顶指针指向栈顶元素 还是 栈顶元素的上一个位置。就在下面由自己决定*/
	for (i = 1; i <= n; i++){
		printf("...输入栈的第%d个元素: ",i);
		++S.top;
		cin >> *(S.top - 1);  //这就是栈顶元素,注意是在栈顶指针的下一个内存
	}
	
	/*   判断   */
	if (Isempty(S)) {
		cout << "...不是空栈" << endl << endl;
	}
	else {
		cout << "...这确实是个空栈" << endl << endl;
	}
	
	 /*   长度   */
	int m;
	cout << "...栈的长度是: " << Stack_length(S) << endl << endl;
	
	/*   遍历   */
	cout << "...遍历栈 " << endl;
	StackTraverse(S);
	cout << endl;
     
    /*   获取栈顶元素  */
	cout << "...获取栈顶元素: " << GetTop(S) << endl << endl; 

    /*   插入  */
	int insert;
	cout << endl << "...插入元素: ";
	cin >> insert;
	push_stack(S, insert);
    cout << "...插入后...遍历栈 " << endl;
	StackTraverse(S);
	Sleep(1000);
    
    /*   删除  */
	ElemType delet;
	cout << endl << "...删除栈顶元素: " << endl;
	pop_stack(S, &delet);
	cout << "...被删除的元素是: " << delet << endl << endl;
	cout << "...删除后遍历栈 " << endl;
	StackTraverse(S);
	Sleep(1000);
    
    /*  销毁栈  */
	cout << endl << "...销毁栈的内存空间: " << endl;
	destroyStack(S);

    Sleep(1000);
	system("pause");
	return 0;
}

/**************一些函数的实现***************/
ElemType Stack_length(sqStack &s) {
	return (s.top - s.bottom);
}

void StackTraverse(sqStack &s){
	if (s.bottom == NULL){
		exit(-1);
	}
	if (s.top == s.bottom){
		cout << "...这是个空栈" << endl;
	}
	ElemType *p = s.top;
	while (p > s.bottom){   //还没到达栈底	
		--p;               //访问栈顶元素(即栈顶指针所指的下一个内存)
		cout << *p << endl;
	}
}

/*
与入栈操作相反地,出栈操作不需要进行内存的判别,
只需要先将栈顶指针下移,接着用int类型的变量e返回栈顶元素的值即可.
*/

ElemType pop_stack(sqStack &s, ElemType *e){
	if (s.top == s.bottom){
		return ERROR;
	}
	else{
		--s.top;   //通过e返回栈顶元素
		*e = *s.top; //实际上此元素并没真正删除,仍在s.top中,但是如果插入元素,就会被更新
		return *e;
	}
}

void push_stack(sqStack &s, int e){
	int incresize;
	if (s.top - s.bottom > STACK_INIT_SIZE){       //判断栈是否溢出
    cout << "...你想扩充的内存大小是: ";
	cin >> incresize;
	s.bottom = (int*)realloc(s.bottom, (s.stackSize + incresize) * sizeof(ElemType));  //在原先内存基础上再扩充increase
	s.top = s.bottom + s.stackSize;
	s.stackSize += incresize;
	}
	*(s.top++) = e;      //栈顶指针上移一位,让数据e入栈,注意顺序不能颠倒,否则栈顶指针就不熟指向栈顶元素前一位了
}

void destroyStack(sqStack &s){
	s.top = NULL;
	s.stackSize = 0;
    free(s.bottom);
	s.bottom = NULL;

	cout << "...销毁完毕" << endl;
}

void cleanStack(sqStack &s){
	s.top = s.bottom;
}

bool Isempty(sqStack &s){
	return (s.bottom != s.top);
}

ElemType GetTop(sqStack &s){
	if (s.top != s.bottom)
	{
		return *(s.top - 1);   //栈顶指针指向的下一个位置
	}
}

void initStack(sqStack &s){
	s.bottom = (ElemType*)malloc(STACK_INIT_SIZE * sizeof(ElemType));
    if (!s.bottom){
		cout << "...分配内存失败" << endl;
		exit(0);
	}
	else{
		cout << "...create successfully!" << endl << endl;
	        s.top = s.bottom;   //创造空栈
		s.stackSize = STACK_INIT_SIZE;
	}
}
	

**

实现效果如下

**


数据结构链栈基本操作(C/C++实现) 数据结构链栈基本操作(C/C++实现) 注意:本代码为了测试运行默认含有操作所需数据,如有需要可自己增删改相关数据 涉及基本运算流程 1.初始化栈 2.判断栈是否非空 3.元素依次进栈 4.判断栈是否非空 5.输出出栈序列 6.判断栈s是否非空 7.释放栈 GitHub地址(包含.cpp文件和可执行程序exe) 我的数据结构GitHub地址 源代码(经VS2015、devC++编译器运行通过) #... 阅读详情

相关推荐

数据结构顺序栈基本操作(C/C++实现)

数据结构顺序栈基本操作(C/C++实现) 注意:本代码为了测试运行默认含有操作所需数据,如有需要可自己增删改相关数据 涉及基本运算流程 1.初始化栈 2.判断栈是否非空 3.元素依次进栈 4.判断栈是否非空 5.输出出栈序列 6.判断栈s是否非空 7.释放栈 GitHub地址(包含.cpp文件和可执行程序exe) 我的数据结构GitHub地址 源代码(经VS2015、devC++编译器运行通过) ...

JunsIr的技术栈 1万+

栈的概念及其基本操作--详细(C++)

栈的概念即基本操作,详细解读

smart_jackli的博客 1万+

Unity嵌套ScrollView滑动冲突解决方案:ExecuteEvents.Execute事件透传

在Unity UGUI中,竖向与横向ScrollView嵌套时出现滑动失效,本质是EventSystem事件分发机制的拦截限制。其原理在于PointerDown被外层捕获后,后续PointerMove默认不向下透传;ExecuteEvents.Execute提供了一条绕过常规冒泡流程的官方事件旁路,支持低延迟、方向自适应的精准透传。该技术具备高兼容性与零侵入特性,广泛应用于电商商品页、内容流卡片组、多级导航等需‘列表中嵌套轮播/标签’的真实场景,是解决UGUI嵌套滚动问题的核心工程实践方案。

weixin_33164198的博客 629

C语言/C++实现栈操作

栈的基本操作包括压栈(入栈-push)和弹栈(出栈-pop),分别用于将元素添加到栈顶和从栈顶删除元素。(Last-In-First-Out,LIFO)的原则。栈的操作只在栈的一端进行,该端被称为。弹栈操作用于删除栈顶的元素,并返回该元素的值,首先需要判断栈是否为空,如果栈非空,返回。压栈操作用于将元素添加到栈顶,首先需要判断栈是否已满,如果栈未满,将元素添加到。我们可以使用C语言中的数组来实现栈。这就是用C语言实现栈的基本操作的详细教程。在使用栈之前,我们需要先将其进行初始化,可以通过将。

qq_43884946的博客 1653

Oracle监听配置

Oracle监听配置## 标题 选择“监听程序配置”,然后下一步。 选择重新配置,然后下一步/。 不用管,按下一步。 下一步。 选择“否”,下一步。 选择"本地net服务名配置",然后下一步。 选择“重新配置”,然后下一步。 服务名 是"Oracle",然后下一步。 主机为你的IP地址,在doc系统下通过"ipconfig"获取IP地址。然后输入,然后下一步。 选择“是,进行测试...

m0_46079215的博客 806

当KCF遇见卡尔曼滤波:视觉跟随算法的动态优化实战

本文探讨了KCF算法与卡尔曼滤波在视觉跟随算法中的动态优化实践,通过深度融合策略提升目标跟踪的鲁棒性和实时性。特别针对机器人应用场景,详细解析了在Jetson等嵌入式平台上的优化技巧,包括计算图优化、内存访问优化和多线程流水线设计,实现了30FPS@1080p的稳定跟踪性能。

sugar的博客 956

C++——栈的基本操作

在C++中,栈是一种常见的数据结构,遵循先进后出(LIFO)的原则。栈的使用非常广泛,例如在函数调用中用于保存局部变量、在表达式求值中用于保存操作数等。

lm_0828的博客 5687

cs188Inference in Bayes Nets(贝叶斯网络的推理)

cs188Inference in Bayes Nets贝叶斯网络的推理Question1(3 points):Bayes Net StructureQuestion2(1 points):Bayes Net ProbabilitiesQuestion 3(5 points):Join FactorsQuestion4(4 points):EliminateQuestion5(4 points):NormalizeQuestion 6(4 points):Variable EliminationQuesti

weixin_46582817的博客 1673

数据结构——栈(C++ 实现)

使用C++实现栈的功能

weixin_74753331的博客 4224

STM32F103C8T6+I2C+DMA读取陀螺仪模块JY901S(硬件I2C

说明:1.本实验代码适用移植一切stm32f1系列;2.本实验使用的是外设资源硬件I2C2;3.本实验运用的是DMA单次模式,如果需要DMA的循环模式,请移步我的另一篇文章;4.本文章不提供陀螺仪校准教学,并是在没有校准陀螺仪情况下读取数据;5.本文章是作者的学习记录及心得,如有不足,欢迎指正。 总结:亲测stm32f103c8t6最小系统板通过片上外设资源I2C配合DMA读去陀螺仪模块jy901s偏航角有效。

anquanyuanqqadsy的博客 6170

2025.05.30【转录组】|Ribo-seq数据流程详解(一 质量控制)

本文详细介绍了Ribo-seq数据的质控分析流程,重点讲解了使用fastp进行原始数据质控的关键步骤和参数设置。作者通过Snakemake自动化流程示例,展示了如何去除接头序列、过滤低质量reads、生成质控报告等操作。文章强调高质量的Ribo-seq数据对转录后调控和翻译动态研究的重要性,并提供了兼顾数据质量和下游分析需求的参数配置建议。该流程有助于研究人员规范高效地完成Ribo-seq数据质控,为后续分析提供可靠数据基础。

784

链栈的基本操作C/C++代码实现

链栈的结构: 由于栈的主要操作是在栈顶插入和删除, 显然以链表的头部作为栈顶是最方便的,且不需要附加一个头结点。 初始化: 栈顶指针S置空即可。 入栈: 链栈不需要判断栈是否满! 出栈: 栈顶指针S等于NULL表空栈,即链栈S==NULL时为空栈。 代码如下: #include<stdio.h> #include<stdlib.h> #define MAXSIZE 100 typedef int SElemType; //链栈的存储结构 typedef struct Sta

Ycy的博客 4747

AUTOSAR&UDS 理论要点及isolar实战-DEM模块

从这节开始,将讲解UDS诊断中非常重要的知识点:故障事件触发、故障信息上报、故障信息处理、故障信息存储和故障系统降级,后续会陆续更新。

cqaa11的博客 552

c/c++实现静态栈的基本操作

【代码】c/c++实现静态栈的基本操作。

xsljiayou的博客 126

YOLOv11模型压缩技术全面对比:剪枝、量化、蒸馏的原理与实战

YOLOv11模型压缩技术综述 模型压缩技术是解决计算资源受限环境下部署深度学习模型的关键。本文系统介绍了YOLOv11模型压缩的三种核心技术:剪枝、量化和蒸馏。剪枝技术通过移除冗余参数实现模型轻量化,包括结构化剪枝(通道/卷积核剪枝)和非结构化剪枝;量化技术通过降低数值精度(如FP32→INT8)减少存储和计算量;蒸馏技术则利用教师模型指导学生模型训练,在保持精度的同时减小模型规模。三种技术可单独或组合使用,在工业质检、智慧安防等边缘计算场景中发挥重要作用,使YOLOv11在保持80%精度的同时减少70%

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 577

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

栈的基本操作实现-c/c++

栈 stack 概念:限定仅在表尾进行插入和删除操作的线性表

Dave的架构师成长之路 2676

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

栈的基本操作(C/C++代码实现)

栈的操作包括初始化栈,入栈,出栈,判空,销毁栈,获取栈的长度,获取栈顶元素。在C语言中,首先引用头文件接下来是栈的结构体定义data指针指向第一个元素的位置,top指的是栈顶元素的下标,init_capacity指的是栈的容量。

qwe4706的博客 54

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

数据结构C/C++代码实现 栈链表基本操作

实现栈链表基本操作: #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; typedef int ElemType; typedef struct linknode {     ElemType data;     struct linknode *next; }LiStack; /****************初始化链栈*************...

你好,明天,,的博客 862

数据结构C/C++代码实现 顺序表栈基本操作

顺序表栈基本操作的实现  源代码: #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #include&lt;iostream&gt; using namespace std; #define MAXSIZE 100 //#define Status int #define OK 1 #define OVERFLOW -2 #define Fals...

你好,明天,,的博客 1045

C/C++语言实现栈和队列基本操作(C++为主混合部分C语言)

C/C++ 实现栈和队列基本操作

qq_39100747的博客 387

栈的基本操作(详细)

栈的各种基本操作(详细),不看会后悔

qq_43346784的博客 1万+

实现栈的基本操作 [链式存储] (创建 入栈 出栈 返回栈顶元素 获取长度 判空 判满 清空 销毁) C/C++ 数据结构

数据结构栈的实现及基本操作1.定义2.创建空栈3.入栈操作4.出栈操作5.获取栈顶元素6.判断栈是否为空7.判断是否满栈8.清空栈9.销毁栈10.获取栈的长度 1.定义 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 #define STACK_INIT_SIZE 100 //初始量 #define STACKINCREMENT 10 //增量 typ

Aslixzhou 1041

用C/C++实现栈和队列的封装

一、 熟悉栈的概念以及特性 (0)它是一种运算符受限的线性表,因为(2) (1)像水桶呈东西一样,先进后出,后进先出 (2)栈顶是可以操作的一端,栈底不可操作! push压入,top弹出 栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针 二、 数据结构中栈与程序中栈有什么不同? 1.数据结构的栈:管理数据的一种手段或者是方法!可以用来存放数据和地址; 2.内存中的栈:是确切存在的物理结...

身在边城 心在编程 1307

C/C++数据结构之用数组实现栈

本文介绍了在C/C++中使用数组实现栈的方法。栈的基本操作包括Push(入栈)、Pop(出栈)、Top(查看栈顶)、IsEmpty(判空)和Size(获取大小)。通过动态数组实现可以灵活管理内存,当栈满时自动扩容。实现中使用了四个成员变量:存储元素的动态数组指针、容量、栈顶索引和元素数量。关键操作包括Push时检查扩容、Pop时检查空栈,以及实现动态扩容的Resize函数。完整代码展示了栈的初始化和各项操作的实现细节,包括异常处理和内存管理。

hope_wisdom的技术博客 1060

数据结构—链栈的操作及实现(CC++)

数据结构—链栈的操作及实现(C/C++) 文章目录数据结构—链栈的操作及实现(C/C++)1.0初始化定义1.1栈链的结构体定义1.2栈链的初始化1.3判断栈链是否为空1.4栈链的入栈操作1.5栈链的出栈操作1.6求栈链的长度1.7栈链的输出(打印)1.8 C主函数代码1.9 C++主函数代码2.0 C完整代码2.1 C++完整代码2.2运行截图:2.3总结 1.0初始化定义 #include<iostream> #include<stdlib.h> #define MAXSIZE

qq_52166656的博客 1551

Lua的栈及基本栈操作

理解Lua栈 Lua通过一个“虚拟栈”与C/C++程序进行数据交互,所有的Lua C API都是通过操作这个栈来完成相应的数据通信。 Lua的这个“虚拟栈”解决了C/C++程序与Lua程序通信的两大问题: Lua使用垃圾回收,而C/C++需要手动管理内存。 Lua使用动态类型,而C/C++使用的是静态类型。 因 为这个栈在Lua

MyDriverC 5376
下一篇: C/C++实现双向链表及基本操作
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值