栈的相关函数

函数相关内容 将a,b,c的值进行初始化(如果不进行初始化,则a,b,c的值都是随机值(0CCCCCCCCh)也就是会打印出烫烫烫烫烫..)。(2) 第二,三,四个push是将ebx,exi,edi压到ebp和esp中间,同时esp存放的地址指向更低的地址。(2)在ecx中开辟了39h(0E4h(228))的空间,且这个空间里都初始化为为0CCCCCCCh。中的ebp的值压,再将esp所指的地址指向更低的地址,从而能够放下ebp的值。(1)将esp的地址移到ebp中,从而使ebp存放esp的地址。 阅读详情

#ifndef _STACK_
#define _STACK_
#include <stdio.h>
#include <stdlib.h>
typedef int data_t;
typedef struct stack
{
    data_t *data;
    int maxlen;
    int top;
}Stack;
Stack* Stack_create(int lenth);
int Stack_empty(Stack *stack);
int Stack_full(Stack *stack);
void Stack_push(Stack *stack,data_t new_data);
data_t Stack_pop(Stack *stack);
data_t Stack_gettop(Stack *stack);
void Stack_delete_pos(Stack *stack,int pos);
void Stack_delete_data(Stack *stack,data_t data);
void Stack_change_data(Stack *stack,data_t data,data_t new_data);
void Stack_clear(Stack *stack);
void Stack_destroy(Stack **stack);
void Stack_show(Stack *stack);
#endif

/*头文件,函数声明,全局变量定义*/

Stack *Stack_create(int lenth)     //栈的创建,成功创建返回一个结构体指针
{
    Stack *stack = (Stack *)malloc(sizeof(Stack));
    stack->data = (data_t *)malloc(sizeof(data_t)*lenth);
    stack->top = -1;
    stack->maxlen = lenth;
    return stack;
}
int Stack_empty(Stack *stack)   //判断是否为空栈,空栈返回-1,非空返回0
{
    if(stack->top == -1)
    {
        printf("empty stack\n");
        return -1;
    }
    else
        return 0;
}
int Stack_full(Stack *stack)  //判断是否为满栈,满栈返回-1,不满返回0
{
    if(stack->top == (stack->maxlen)-1)
    {
        printf("full stack\n");
        return -1;
    }
    else
        return 0;
}
void Stack_push(Stack *stack,data_t new_data) //单元素入栈
{
    if(Stack_full(stack) == -1)
        return;
    else
    {
        stack->top++;
        stack->data[stack->top] = new_data;
    }
    return;
}
data_t Stack_pop(Stack *stack)     //单元素出栈
{
    if(Stack_empty(stack) == -1)
        return -1;
    stack->top--;
    return stack->data[(stack->top)+1];
}
data_t Stack_gettop(Stack *stack)    //取栈顶元素
{
    if(Stack_empty(stack) == -1)
        return -1;
    return stack->data[stack->top];
}
void Stack_delete_pos(Stack *stack,int pos)    //按位置删除栈中元素(下标)
{
    if(pos<0 || pos > stack->top)
    {
        printf("error post\n");
        return;
    }
    for(int i=pos+1;i <= stack->top;i++)
    {
        stack->data[i-1] = stack->data[i];
    }
    stack->top--;
    return;
}
void Stack_delete_data(Stack *stack,data_t data)    //删除栈中指定数据
{
    if(Stack_empty(stack) == -1)
        return;
    int i = 0;
    for(i=0;i <= stack->top;i++)
    {
        if(stack->data[i]==data)
        {
            Stack_delete_pos(stack,i);      //相当于找到该元素位置再按位置删除
            return;
        }                                                   
    }
    if(i > stack->top)
    {
        printf("no this data\n");
    }
    return;
}
void Stack_change_data(Stack *stack,data_t data,data_t new_data)//更改栈中指定数据
{
    if(Stack_empty(stack) == -1)
        return;
    int i = 0;
    for(i=0;i <= stack->top;i++)
    {
        if(stack->data[i]==data)
        {
            stack->data[i]=new_data;
            return;
        }
    }
    if(i > stack->top)
    {
        printf("no this data\n");
    }
    return;
}
void Stack_clear(Stack *stack)    //清空一个栈
{
    stack->top = -1;
    return;
}
void Stack_destroy(Stack **stack)   //销毁一个栈,释放内存
{
    free((*stack)->data);
    (*stack)->data = NULL;
    free(*stack);
    *stack = NULL;    
    return;
}
void Stack_show(Stack *stack)   //依次打印栈中各元素
{
    for(int i=0;i <= stack->top;i++)
    {
        printf("%d ",stack->data[i]);
    }
    puts("");
    return;
}

iOS逆向之深入解析函数本质·函数调用相关指令 一、与寄存器 ① :是一种具有特殊的访问方式的存储空间(即先进后出 Last In First Out, LIFO): 高地址往低地址存数据(存:高–>低); 空间开辟:往低地址开辟(开辟:高–>低)。 ② SP 和 FP 寄存器 SP 寄存器:在任意时刻会保存顶的地址; FP 寄存器(也称为 x29 寄存器):属于通用寄存器,但是在某些时刻(例如函数嵌套调用时)可以利用它保存底的地址; arm64 开始,取消了 32 位的 LDM、STM、PUSH、POP 指令,取而 阅读详情

相关推荐

YOLOv11 损失函数进阶:SlideLoss 让小目标检测精度飙升

创建self.loss_fun = loss_fun # 基础损失函数(如BCEWithLogitsLoss)self.loss_coef = loss_coef # 损失系数# 计算滑动权重:根据预测与真实值的差异判断样本难度# 难度越高,权重越大该类在原有损失函数的基础上,通过diff计算样本预测与真实值的差异(差异越大,样本越难),进而生成动态权重,实现对难样本的重点学习。

m0_64661770的博客 178

数据结构和算法】了解认识,并实现相关函数

是限定在一个表里面的一段,对其进行插入删除操作的线性表,数据进出的顺序为先进后处,应用场景:网页浏览的时候的后退 编辑软件的撤销,实际上的功能就这样,学会顺序表以及链表的使用,对于来讲,只是懂得头擦头删,理解概念了,就好掌握并实现

小王学代码 1706

ADC实现模数转换Multisim电路仿真——硬件工程师笔记

8位模数转换器(ADC)是将模拟信号转换为8位数字信号的电子器件,具有256级量化能力。其工作原理分为采样、量化和编码三个阶段,关键参数包括分辨率、采样率、精度、线性度和信噪比。常见型号有ADC0804、ADC0808等,广泛应用于数据采集、音频处理、通信系统和消费电子产品中。典型应用时需要配置参考电压、模拟输入和数字输出引脚,并通过仿真实验验证转换效果(如-10V对应输出0,10V对应255)。硬件工程师需掌握其原理和参数选择,相关笔试面试资料可在CSDN博客获取。

XU157303764的博客 1469

及其有关函数

队列是基本的数据结构之一。是基本的数据结构之一。的特点:先进后出。队列特点:先进先出。

2302_80707071的博客 327

数据结构大合集03——相关函数运算算法

【代码】数据结构大合集03——相关函数运算算法。

2301_80263861的博客 419

及链常用函数

头文件:#ifndef _LINKSTACK_H_ #define _LINKSTACK_H_#define FAILURE 1000000 #define SUCCESS 1000001typedef int ElemType; struct node { ElemType data; struct node *next; }; typedef struct node Node;

KaiLoveM的博客 1532

数据结构 —— (超详细图解 & 接口函数实现)

数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。博主将会用代码结合大量图解,对数据结构进行深度剖析。

十里坡小白的博客 2879

数组的操作、队列操作及其相关函数

什么是数组的操作、队列操作?相关函数是哪些? 例如varmyPop=function(){}; 操作:就是在对数组末尾进行增加删除操作 队列操作:就是在对数组前端进行增加删除操作 相关函数操作 push push:在数组的末尾新增任意个数据 push:数组长度 ...

xujx1997的博客 166

函数调用时相关变化

m0_37974032的博客 297

和队列相关函数

的特点是先进后出,只允许在一段插入数据和删除数据,数据插入和数据删除的这一段叫做顶,另一端叫底。我们一般用数组的方式来实现,因为对于删除尾部的元素来说,在不为空的情况下,数组方式可以直接size--来删除,而链表的需要找到尾部的前一个,才能完成删除操作,因此选择数组的方式更为便捷。比如我们依次插入数据1,2,3,4。内的数据如下图所示。我们要删除数据,也只能一个一个从顶的4开始删起走, 删除一次成为了下图这样。依次类推,要添加要删除,都是在顶的位置完成。

kkbca的博客 164

lua相关操作函数

extern "C" { #include "lua.h" #include "lualib.h" #include "lauxlib.h" } lua相关操作函数 学习目标: 了解lua相关操作 lua_pushnumber //#define LUA_NUMBER double lua_pushinteger//long long //dword lua_pop ...

792

函数相关知识的理解

1.在vs2013中,main函数也是被其他函数调用的(__tmainCRTStartup),该函数被mainCRTStarup调用,在调用main函数时,要先进行压指令(push),将ebp压到esp。如该代码中,main函数就是一次函数调用,在调用main函数时会在区开辟一块空间,该空间称为main函数函数帧。3.再执行sub指令,改变esp指向的地址,两个寄存器中间的空间,就是给main函数开辟的空间。11.经过计算后,将z的值放在eax当中,因为出了函数之后,函数会销毁。

weixin_65455741的博客 409

的实现以及相关函数

【代码】的实现以及相关函数

m0_46145044的博客 219

的基本操作

【代码】的基本操作

qq_64532606的博客 204

c++中stack的几个常用函数

是一种只能后入先出的容器,因此只有通过top来访问顶元素 1、top() 代码示例: #include <iostream> #include <string> #include<algorithm> #include<bits/stdc++.h> #include<stack> #include<set> #include <vector> #include <map> #include<queue&

weixin_45962741的博客 1万+

数据结构

是一种后进先出(LIFO, Last In First Out)的数据结构,意思是:最新进入的数据会最先被取出。可以把它想象成一摞书,你总是只能从最上面拿书,放书也只能放在最上面。我们要编写一个简单的程序,包含的初始化、入、出、查看顶元素以及销毁。通过这些操作,你将掌握的基本用法。// 定义的数据类型// 定义的结构// 用于存放中元素的数组// 的总容量int top;// 顶索引} ST;解释STDataType:我们用int类型来存储中的数据。arr。

m0_62048999的博客 1681

(新手向)关于函数以及小实例

stack模板类的定义在头文件中 stack模板类需要两个模板参数,一个是元素个数,一个是容器类型,但只有元素类型是必要的,在不指定容器类型时,默认的类型为deque 定义stack对象的示例代码如下: stacks1; //定义一个名为s1的int类型的 stacks2;//定义一个名为s2的string类型的 stack的基本操作有: 入,s.push(x) //s为名 出, s.pop();出只是删除顶元素,并不返回该元素 访问顶 s.top() 判断空 s.em

qq_45869682的博客 1561

【浅谈数据结构的基本函数与操作

文章目录1.的定义2.的实现方式2.1线性 vs 链表 的优缺点2. 顺序(线性)2.1子函数含义 以及 实现1. 线性的结构类型2. InitStack3. StackEmpty4. StackFull5. Push6. StackPop7. StackTop8. StackDestroy2、顺序的基本操作 是一种特殊的线性表,它们的逻辑结构和线性表相同,但是运算规则相比线性表有更多的限制,故又称它们为 运算受限 的线性表。 1.的定义 (Stack)是只能在一段(

GuLeng______的博客 3318

的各个功能函数的实现

的各个功能函数的实现

2302_76314368的博客 1853

【C语言】-- 数据结构 -- 的功能实现【具体函数

目录1. 1.1的概念及结构 1.2的实现2.的基本功能实现 2.1 结构体的创建 2.2 初始化 2.3 入 2.4 检查是否为空 2.5 出 2.6 顶数据 2.7 的大小 2.8 的销毁 2.1 结构体的创建 其次对于数组,有两种选择: 定长的静态版本,实际中一般不实用,所以我们主要实现下面的支持动态增长的。(会不定时的入或出,根本不知道实际个元素个数,所以定长的静态版本,大

weixin_64609308的博客 941

NewtonRaphsonFlow,数学建模MATLAB源码 百度文库,matlab源码下载

用牛顿拉夫逊算法计算典型三机九节点电力系统的潮流分布。 这是一个关于数学建模MATLAB源码 百度文库,matlab源码下载的项目源码,可以用来学习matlaba实战项目案例。

下一篇: 单向循环链表解决约瑟夫问题
qwl271052
博客等级 码龄4年 2粉丝 4原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值