Linux学习笔记(算法与数据结构)之 堆栈代码(基于数组实现)

数组内存分配之堆、栈 首先看一下数组: 数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。 数组既可以存储基本数据类型,也可以存储引用数据类型。 数组的定义格式: 格式1:数据类型[]  数组名;int[] a:定义一个int类型的数组a变量。 格式2:数据类型  数组名[];int  a[]:定义一个int类型的a数组变量。 推荐使用第一种格式,第一种格式的可读性更强。 阅读详情

1、代码在VS2010下编译通过,注释写的较为清楚。

2、基于数组实现,还有另一种更加合理的方式即链表实现,代码在我的下一篇博文中。

3、因为VS2010配置出了一点问题,因此没有写不同的.h和.c文件

      需要时可以分文件,stdlib.h中包含了malloc函数,只需要在堆栈的函数定义代码中包含

// Cpp_Study.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
/*
 ***********************************
 @ name:Stack or STACK
 @ struct: To restore the info of the stack,including
           int *arr:The header pointer of the stack
           int cap:The capacity(or size) of the stack
           int top:The position pointer of the top of the stack
 ***********************************
*/

typedef struct Stack
{
	int *arr;
	int cap;
	int top;
}	STACK;


/*
 ***********************************
 @ name:Stack_Init
 @ func:alloc the memory for the stack and init the varialbes of stack
 @ args:stack: The pointer of the stack that is to store the info of the stack
		size:The size of the stack that is to initialize
 @return value: null
 ***********************************
*/
void Stack_Init(STACK* stack,int size)
{
	if (size <= 0)
	{
		printf("Size of Stack must be greater than 0\nInit failed!\n");
		return ;
	}
	stack->cap = size;
	stack->top = 0;
	stack->arr = (int*)malloc(sizeof(stack->arr[0]) * size);
	return ;
}
/*
 ***********************************
 @ name:Stack_Deinit
 @ func:To free the memory of the stack alloced by Func Stack_Init;
 @ args:stack: The pointer of the stack that is to deinit
 @return value: null
 ***********************************
*/

void Stack_Deinit(STACK* stack)
{
	free(stack->arr);
	stack->arr = NULL;
	stack->cap = 0;
	stack->top = 0;
	return ;
}

/*
 ***********************************
 @ name:Stack_Is_Full
 @ func:To check whether the stack is full
 @ args:stack: The pointer of the stack that is to check
 @ return value: true: The stack is full
				 false: The stack is not full
 ***********************************
*/
int Stack_Is_Full(STACK* stack)
{
	if (stack->cap == stack->top)
		return 1;
	return 0;
}

/*
 ***********************************
 @ name:Stack_Is_Empty
 @ func:To check whether the stack is empty
 @ args:stack: The pointer of the stack that is to check
 @ return value: true: The stack is empty
				 false: The stack is not empty
 ***********************************
*/
int Stack_Is_Empty(STACK* stack)
{
	if (stack->top == 0) 
		return 1;
	return 0;
}
/*
 ***********************************
 @ name:Stack_Push
 @ func:To Push a number into the buffer of the stack 
 @ args:stack: The pointer of the stack that is to push
		Data: The number to push
 @ return value: null
 ***********************************
*/
void Stack_Push(STACK* stack,int Data)
{
	if (stack->top == stack->cap)
	{
		printf("The stack has been full. Cannot push any more numbers\n");
		return ;
	}
	stack->arr[stack->top] = Data;
	stack->top ++;
	return ;
}

/*
 ***********************************
 @ name:Stack_Push
 @ func:To pop x number out of the stack, where x = popNum
 @ args:stack: The pointer of the stack that is to pop
 @ return value: null
 ***********************************
*/
void Stack_Pop(STACK* stack,int popNum)
{
	if (popNum > stack->top)
	{
		printf("There are only %d number(s) in the stack.Cannot pop %d number(s)",stack->top,popNum);
		return ;
	}
	stack->top -= popNum;
	return ;
}


int main()
{
        //Test code of the stack
	printf("Please input the operation Num\n1.Push 2.Pop");
	STACK stack;
	Stack_Init(&stack,100);
	int a = 0,b = 0;
	
	while(1)
	{
		scanf("%d%d",&a,&b);
		if (a == 1)
			Stack_Push(&stack,b);
		else if (a == 2)
			Stack_Pop(&stack,1);
		printf("\nThe num of the stack is:");
		for (int i = 0;i<stack.top;i++)
			printf("%d ",stack.arr[i]);
		printf("\n");
	}
	
}


 

 

多路输出电源的交叉调整率:从理论到无源优化实践 本文深入探讨了多路输出电源中的交叉调整率问题,分析了其物理根源及无源优化方法。通过漏感与耦合的理论分析,结合加权反馈、电感耦合等五种无源优化技术,帮助工程师有效解决交叉调整率挑战。文章还以TDK-Lambda CUT75系列为例,展示了优化技术的实际应用与效果。 阅读详情

相关推荐

UOS系统手动添加1920x1080分辨率:xrandr命令详解与持久化配置

本文详细介绍了在UOS系统中使用xrandr命令手动添加1920x1080分辨率的方法。针对系统设置中缺失该选项的常见问题,文章提供了从识别显示设备、使用cvt生成模式、添加并切换分辨率,到通过修改.profile文件实现持久化配置的完整步骤。同时涵盖了虚拟机环境、设备名识别及排错等进阶内容,帮助用户彻底解决UOS分辨率配置难题。

weixin_29300931的博客 496

linux环境下,基于机器学习算法 KNN 的 MPI 并行分类器

目录1.题目2.使用说明3.总体设计4.使用到的MPI库函数5.详细设计6.结果分析7.源码 1.题目 基于KNN算法的分类器 假如你有一个朋友一直使用在线约会网站寻找合适自己的约会对象。尽管约会网站会推荐不同的人选,但她没有从中找到喜欢的人。经过一番总结,她发现曾交往过三种类型的人: 1、不喜欢的人 2、喜欢的人 3、很喜欢的人 尽管发现了上述规律,你的朋友依然无法将约会网站推荐的匹配对象归入恰当的分类。朋友希望我们的分类软件可以更好的帮助她将匹配对象划分到确切的分类中。根据她的要求,收集了多条数据,数据

qq_43794633的博客 1081

如何让Arduino IDE支持你手里的STM32 nucleo开发板

Arduino IDE开发环境在默认情况下不支持STM32 NUCLEO开发板,只有通过添加附加开发板管理包才能使用。目前为止,只有一部分板子支持使用Arduino IDE开发环境进行开发,分别是 Nucleo F207ZG, Nucleo F429ZI, Nucleo F030R8, Nucleo F091RC, Nucleo F103RB, Nucleo F303RE, Nucl...

mzw72188552的专栏 8971

堆栈 - 采用数组实现 - C语言

#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; #define MAX_STACK_SIZE 10 #define STACK_TRUE 0 #define STACK_FALSE 1 #define STACK_ERROR -1 struct stack { char *data[...

To Be A Linux Graphics Coder 531

EtherCAT APWR报文实战:从站地址配置(0x0010)的初始化流程与报文解析

本文详细解析了EtherCAT APWR报文在从站地址配置(0x0010寄存器)中的初始化流程与实战应用。通过类比物业分配门牌号,生动解释了APWR报文如何高效批量配置从站地址,并深入探讨了0x0010寄存器的特殊作用、初始化步骤及常见问题排查方法。文章结合IgH主站的三从站配置案例,提供了报文解析技巧和调试建议,帮助工程师快速掌握EtherCAT网络配置的核心技术。

weixin_28744423的博客 410

AgentScope实战指南:从源码解析到Qwen模型的多Agent协作开发

本文提供了AgentScope多智能体开发框架的实战指南,详细解析了其核心架构与工作原理,并展示了如何利用Qwen模型构建从单智能体对话到多智能体协作的完整应用。通过两个具体代码实例,指导开发者快速上手环境配置、模型接入与智能体编排,实现高效的多Agent系统开发。

ff678的博客 640

数据结构与算法 — 进一步认识数组

数组 提到数组,相信大家的都不陌生,毕竟每个编程语言都会有它的影子。 数组是最基础的数据结构,尽管数组看起来非常的基础简单,但这个基础的数据结构要掌握其精髓,也不是那么简单事。 开门见山 数组(Array)是一种线性表数据结构,它用一组连续的内存空间,来存储一组具有相同类型的数据。 这个定义有几个关键词,也是数组的精髓所在。下面就从这几个关键词进一步理解数组。 第一个是线性表。顾名...

badongpi3910的博客 591

告别Modern Standby噩梦:Win11睡眠断网冻结的根源剖析与S3睡眠回归实战

本文深入剖析了Windows 11中Modern Standby(现代待机)模式导致睡眠后断网、系统冻结等问题的根源,指出其与硬件驱动、后台活动的兼容性矛盾。文章提供了通过修改注册表键值强制系统回归稳定S3睡眠状态的详细实战步骤,帮助用户彻底解决睡眠故障,实现可靠的远程访问与挂机任务。

weixin_29210727的博客 603

Linux学习之路(一)

导语: 早前为了方便日常开发,建立跟生产环境类型的环境的时候考虑使用docker作为模拟生产环境,结果没想到给自己的学习挖了一个大坑。其他关于docker容器技术的坑先不在这里赘述,有时间的话在其他文章记录下来,这里先从最基本的工作环境开始拉开这条漫长的学习之路。 docker虽然提供了很多好用并且效率很高的镜像给我们使用,基本都不需要自己动手配置容器环境但是由于过于注重镜像纯净跟效率的原因大...

weixin_34376986的博客 1292

基于JeecgBoot 3.9.0 开源项目的企业管理平台

基于JeecgBoot 3.9.0 开源项目的企业管理平台

宁波阿成的博客 370

EtherCAT主站SOEM -- 24 -- 基于STM32F767IGT6搭建自己的SOEM-EtherCAT主站

以上就是EtherCAT主站SOEM – 23 – 基于STM32F767IGT6搭建自己的SOEM-EtherCAT主站的内容。有不明白的地方欢迎留言;有建议欢迎留言,我后面编写文档好改进。创作不容,如果文档对您有帮助,记得给个赞。

常驻客栈的博客--嵌入式EtherCAT 3550

队列,栈,堆栈,数组,链表特点与区别

1. 队列可以看成是有2个口的集合一个口叫队头一个叫队尾,只能在对头进行删除操作,在队尾做插入。根据这样的操作。队列特点是先进先出 2.堆栈可以看成是有1个口的集合,这个口叫栈顶。插入和删除操作只能在栈顶操作。根据这样的操作。堆栈的特点是是后进先出. 3.链表是一种存储方式,它可以在非连续的内存空间里面存储一个集合的元素。   4.和它对应的是数组,数组要在连续的空间里存储集合的元素

可乐牛魔兽之旅 2113

SAP 与 Palantir 合作全景解析:这不是普通集成,而是把 ERP、数据语义层、云迁移与企业级 AI 串成一条价值链

SAP与Palantir的战略合作聚焦企业数字化转型核心痛点,通过深度技术整合构建"数据-决策-执行"闭环。合作包含四大主线:云迁移连续性保障、SAP业务数据云与Palantir平台对接、联合工程开发、高监管行业优先落地。技术实现上采用SAP认证插件,支持双向数据交互和实时业务动作触发。该合作突破了传统ERP系统局限,将业务语义与AI执行相结合,特别适合制造业供应链优化、财务争议处理等高价值场景,为企业在云迁移过程中实现业务连续性与智能化升级提供新范式。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 192

linux 应用异常堆栈捕获

概述本文档讲述两种应用死机堆栈的方法,堆栈跟踪可以帮助开发人员快速定位导致死机的代码位置,从而更快地解决问题。方便后续有工程师在其他应用代码出现死机时,可以参考此文档快速的进行代码移植。该函数用于获取当前线程的调用堆栈,获取的信息将会被存放在buffer中,它是一个指针列表。参数 size 用来指定buffer中可以保存多少个void* 元素。函数返回值是实际获取的指针个数,最大不超过size大小,为了取得全部的函数调用列表,应保证buffer和size足够大。

枫潇潇 1473

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

linux环境下C++代码打印函数堆栈调用情况

文章目录前言实现打印堆栈信息的函数显示堆栈调用信息编译时无法添加-rdynamic选项总结程序源码 前言 关于什么是函数调用堆栈在上篇文章《windows环境下C++代码打印函数堆栈调用情况》中已经介绍过了,简单的来说就是可以展现出函数之间的调用关系,上篇文章展示了如何在windows上打印出函数调用堆栈,其中用到了windows系统上的API,这些接口在linux上是无法使用的,因为工作的关系,...

AlbertS Home of Technology 6378

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

linux堆栈有什么作用,嵌入式世界里,堆栈的作用和意义

描述栈这种结构在嵌入式里其实是非常常用的,比如函数调用与返回就是典型的栈应用,虽然很多时候栈都是CPU系统在自动管理,我们只需要在链接文件里分配栈大小以及栈存放位置,但稍微了解一下栈的原理会更加利于我们去理解嵌入式代码执行机制,以及帮助我们进一步去调试。1. 何为堆栈?堆HEAP与栈 STACK 是两个不同概念,其本质上都是一种数据结构。栈是一种按数据项排列的数据结构,只能在一端(栈顶 t...

weixin_39999190的博客 743

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

linux 复制栈数据结构,算法-数据结构-堆栈

算法-数据结构-堆栈发布时间:2005-09-09 17:46:22来源:红联作者:frog/****************************************************************Title : stack.cAuthor : 张龙Time : 200508**************************************************...

weixin_42101164的博客 151

堆栈与队列:数据结构核心解析

摘要:本文系统介绍了堆栈数据结构的基本概念、实现方式和应用场景。堆栈是一种遵循后进先出(LIFO)原则的线性表,支持入栈、出栈和获取栈顶元素等操作,可通过数组或链表实现。文章详细对比了堆栈与队列的差异,分析了不同实现方式的时间复杂度,并提供了多个典型应用实例(如函数调用栈、表达式求值等)。同时包含多个编程实现示例,包括顺序栈操作、进制转换、双栈共享数组等,展示了堆栈在算法中的实际应用。最后通过合法性检测题目,验证了堆栈操作的规范使用。

我是浙江财经大学软件工程专业的藏族本科学生,初次进入到这个互联网行业还请各位大佬多多指点我 806

linux 打印堆栈日志_在Linux中打印函数调用堆栈【原创】

本人学习笔记,代码参考如下网址参考http://www.cnblogs.com/dma1982/archive/2012/02/08/2342215.htmlzhangbh@prolin-srv: gcc -g -rdynamic -o my a.czhangbh@prolin-srv: ./mybacktrace() returned addresses./my(my_func+0x1f)[0...

weixin_30431043的博客 899

linux 打印堆栈日志_在Linux与Windows上获取当前堆栈信息的方法

在编写稳定可靠的软件服务时经常用到输出堆栈信息,以便用户/开发者获取准确的运行信息。常用在日志输出,错误报告,异常检测。在Linux有比较简便的函数获取堆栈信息:#include #include #include #include #include void handler(int sig) {void *array[5];size_t size;// get void*'s for all e...

weixin_35934226的博客 1154

linux解析任务堆栈方法,Linux系统堆栈讲解

Linux系统经过长时间的发展,很多用户都很了解Linux系统了,这里我发表一下Linux系统中共使用了四种堆栈个人理解,和大家讨论讨论。一 系统引导初始化临时使用的堆栈二 进入保护模式后提供内核程序始化使用的堆栈,该堆栈也是后来任务0使用的用户态堆栈三 每个任务通过系统调用,执行内核程序时使用的堆栈,称之为任务的内核态堆栈,每个任务都有自己独立的内核态堆栈四 任务在用户态...

weixin_39966602的博客 579

linux0.11版本堆栈

linux0.11内核介绍

weixin_46451012的博客 788

如何在linux中打印程序堆栈信息

如何在linux中打印程序堆栈信息 ​ 有时候在写完代码之后需要自己手动测试功能,在linux环境中往往需要gdb调试打断点查看堆栈。往往公司的服务器一般是多人同时使用的。往往性能不是太强。gdb调试的时候载入的时候Reading symbols from的时候往往会卡那么一会儿虽然时间不长,但是很烦。我在这里写了简单实用打印堆栈的工具类。算是减少一点工作量。 ​ 偶尔会遇到程序崩溃的情况,但是在一些线上部署环境的时候通常调试环境很复杂,通常由于特殊情况下core文件无法产生,或者无法拿到。这个类也.

CrazysPopcorn_qian的专栏 7528

linux内存管理(堆栈、数组)

linux内存管理(堆栈、数组)每一个进程都有代码段、数据段、BBS段、堆、栈。linux内存结构每一个进程都有以下区域: * 代码段:代码段是用来存放可执行文件的操作指令,也就是说是它是可执行程序在内存种的镜像。代码段需要防止在运行时被非法修改,所以只准许读取操作,而不允许写入(修改)操作——它是不可写的,拥有可执行权限。 * 数据段:数据段用来存放可执行文件中已初始化全局变量,换句话说就是存

Rainloving的专栏 4097

进程内核态堆栈与用户态堆栈浅析

kernel:linux-4.9 cpu: ARMV8 背景 在广袤的代码中堆栈无疑是一个高热度的技术用语,就linux而言你能常观察到的几个场景有: 用户态堆栈 函数func_foo中用堆栈来保存寄存器、局部变量等等:

^_^ 3552

Linux学习笔记(算法与数据结构)之 堆栈代码(基于链表实现)

1、基于链表实现的堆栈代码,内存动态分配;相对于数组的实现方式,内存使用方式更加灵活,同时,程序不用为堆栈开辟连续的内存空间,所以可能省去一些内存拷贝的时间。 2、在VS2010的C++编译器中编译通过。由于VS配置问题,不能使用bool类型,用int代替;也没有分.c和.h文件书写;如果要分开书写,最好给Create_Node和Stack_Node_Destory加上static关键字,该函数...

WilliamCode的博客 311
上一篇: 更新参数的一阶低通滤波算法 C++
下一篇: Linux学习笔记(算法与数据结构)之 堆栈代码(基于链表实现)
WilliamCode
博客等级 码龄11年 118粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值