栈的基本操作(C语言版)

C语言实现的栈操作(基于数据结构(C语言版)) C语言实现的栈操作(基于数据结构(C语言版)), 栈的基本操作包括初始化,销毁,设置为空栈,出栈和入栈 立即下载

概念

一种特殊的线性表,只能在固定的一端进行插入和删除操作,这个固定的一端称为栈顶,另外一端称为栈底,没有任何元素的栈称为空栈!!


栈的特性

先进后出或者说后进先出!!
另外,栈分为顺序栈以及链式栈。


栈的功能

将数据从一种序列改变为另外一种序列(改变数据序列)


栈的基本操作

动态顺序栈的结构体———>其中包括动态数组(_array),空间容量(_capacity)以及元素个数(_top)

typedef int DataType;
typedef struct StackD
{
    DataType* _array;
    int _capacity;
    int _top;
}StackD;

栈的初始化

// 栈的初始化 
void StackDInit(StackD* s, int capacity)
{
    assert(s);                         //参数检测

s->_array = (DataType*)malloc(sizeof(DataType)* capacity);           // 申请空间
if (NULL == s->_array)                                           //判空
{
    assert(0);
    return;
}

s->_capacity = capacity;                                    //重置容量
s->_top = 0;                                                //无元素,top为零
}

入栈和出栈操作

// 入栈 
void StackDPush(StackD* s, DataType data)
{
    assert(s);                                         //参数检测

if (s->_top < s->_capacity)                         //栈未满,直接入栈
{
    s->_array[s->_top] = data;
    s->_top++;                               
}
else                                                //栈已满,扩容后再入栈
{
    int capacity = 2 * s->_capacity;
    s->_array = (DataType*)realloc(s->_array, sizeof(DataType)*capacity);          //扩容
    s->_capacity = capacity;                                                   //重置容量
    s->_array[s->_top] = data;                                            //入栈
    s->_top++;
}
}

// 出栈
void StackDPop(StackD* s)
{
    assert(s);                                    //参数检测

if (StackDEmpty(s))
{
    printf("栈已空,无法出栈!!\n");
    return;
}
else                           //栈顶减一即出栈
    s->_top--;
}

获取栈顶元素、获取栈中元素个数以及判断栈是否为空

// 获取栈顶元素 
DataType StackDTop(StackD* s)
{
    assert(s);                            //参数检测

if (StackDEmpty(s))
{
    printf("栈已空,无栈顶元素!! \n");
    return 0;
}

return s->_array[s->_top - 1];
}

// 获取栈中元素个数 
int StackDSize(StackD* s)
{
    assert(s);

return s->_top;
}

// 检测栈是否为空 
int StackDEmpty(StackD* s)
{
    assert(s);

    if (0 == s->_top)
    return 1;
else
    return 0;
}

栈的应用

1、括号匹配问题!
2、逆波兰表达式(后缀表达式)问题!
3、迷宫问题!

想这三个问题的解决方式,记得关注一下哦!!或者点开我的主页,进行查看!!
三天之内解决以上问题!!!
这里写图片描述

手把手教你配置C6678的SPI启动:从NorFlash烧写到多核加载的完整流程 本文详细介绍了TMS320C6678多核DSP的SPI启动全流程,包括硬件准备、镜像文件生成与转换、NorFlash烧写与验证、多核启动同步机制以及常见问题排查。通过实战演示,帮助开发者高效配置SPI启动模式,解决启动失败、多核同步异常等问题,提升嵌入式系统开发效率。 阅读详情

相关推荐

【Godot】构建可维护的游戏工程 —— 项目代码组织结构

本文系统梳理了Godot引擎项目组织原则与架构模式,提出场景中心化、命名规范一致性和资源隔离三大核心原则。推荐按功能模块划分目录结构(如scenes/、entities/、systems/),采用snake_case命名避免跨平台问题,并通过.gdignore优化资源管理。文章详细解析了自包含场景设计、信号驱动解耦等架构技巧,以及团队协作中的版本控制策略,强调通过模块化设计平衡一致性与实用性。最终目标构建清晰可维护的项目结构,使资源定位和功能扩展更加高效。(148字)

qq_40205510的博客 1175

C 语言实现栈的基本操作

typedef struct Stack{ //定义栈的结构//栈的最大规格int* data;//定义栈中存储数据的形式int top;//定义栈顶int lower;//定义栈底//判断栈是否为满了//判断栈是否为空//创建栈//将元素压入栈内//得到栈的最顶层元素。

2401_84436253的博客 1691

使用PLINK做GWAS(2)

利用PLINK对单基因控制的性状进行定位,之前一篇文章粗滤的记录了一下使用PLINK的命令,本次博客主要记录一下如何根据SNP芯片的数据制作PLINK的格式,以及分析的步骤,最后数据的可视化。 首先,有的公司给的新片的数据就是一个excel表格,列表示的是样品,行表示的是基因型,基因型用ATCG构成,当然有的基因型是用数字0或者1表示的。下面我拿到的一个数据是15个样品构成的基因型,有13个样品是突变体,2个样品是野生型。 格式如下: 第二步:将此基因型存成csv文件,使用R进行读取,在R中制作pl

samhuairen的专栏 2921

栈的基本操作(C语言实现)

期末终于结束,接下来就会继续更新数据结构相关的内容了,本篇文章带来数据结构——栈,来实现它的基本功能。难度偏低,因为之前我们已经实现过顺序表了,栈不过是顺序表的一种特殊形式。接下来我们来看看我们栈的类型定义以及我们此次要实现的功能。...

Brant_zero的博客 1万+

ESP32连接PDM麦克风操作指南:新手入门必看

手把手教你如何将ESP32与PDM麦克风连接,采集音频数据并用于音频分类应用。内容涵盖硬件接线、代码配置及实际调试技巧,适合初学者快速上手esp32在声音识别场景中的使用。

weixin_42590539的博客 1329

RK3588交叉编译实战:从环境搭建到程序部署

本文详细介绍了在X86主机上为RK3588开发板搭建交叉编译环境的完整流程。从获取ARM工具链、配置sysroot,到实战编译Hello World和Qt应用程序,并提供了部署方法和常见问题解决方案。通过交叉编译,开发者可以在高性能PC上高效开发,并在ARM架构的RK3588上运行程序,大幅提升嵌入式开发效率。

weixin_29191669的博客 274

数据结构学习——C语言对栈的基本操作

栈(Stack)是一种常用的数据结构,遵循先进后出(LIFO)的原则,对表尾进行操作,常用于临时存储和撤销等操作,其基本操作包括栈的创建、入栈(也叫压栈Push)、出栈(又称弹栈)、栈的遍历、栈的清空(clear)、栈的销毁(destroy)等。

weixin_63586719的博客 7863

基于MacOS本地部署OpenClaw+Ollama技术要点

本文基于MacOS系统下本地部署OpenClaw+Ollama的实操经验,梳理部署全流程中的核心技术要点、环境配置规范、故障排查方法及落地优化方案,聚焦“本地AI模型联动OpenClaw技能调度”的核心需求,为同类本地部署场景提供可复用的技术参考,规避常见部署风险,确保系统稳定运行。

在科技赋能新时代,共同探索基础理论和宇宙未知。 5164

栈的基础细节(c语言)(全部代码,详细图解):入栈,出栈,获取栈中数据个数,栈顶数据等.....

栈的基础(详细的图解):(栈的创建,栈初始化,入栈,出栈,获取栈中数据个数,获取栈顶数据,注销栈....)

好作息,好心态,多锻炼,多学点,多钻研 3731

华为OD新系统机试真题 - 配置操作失败数量统计

华为OD机试新系统 4月8号【配置操作失败数量统计】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【配置操作失败数量统计】。

qq_45776114的博客 1161

Go语言全面解析:从入门到精通

Go语言是由Google开发的一种静态类型、编译型编程语言,具有简洁、高效、安全的特点。它特别适合高并发服务、云原生应用和网络编程等场景。Go采用Goroutine和Channel实现轻量级并发,性能接近C/C++。与其他语言相比,Go语法更简洁但类型更严格,编译速度快且跨平台支持好。虽然Go支持多种设计模式和编程范式,但其面向对象实现方式与传统语言不同。标准库丰富且拥有Gin、GORM等企业级框架。核心语法包括包管理、变量声明、函数定义、流程控制等,适合构建高性能后端服务和系统工具。

博哥哥的博客 4925

C语言栈基本操作

【代码】C语言顺序栈基本操作。

qq_27638851的博客 2301

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

《数据结构》C语言版 栈的基本操作实现

严蔚敏数据结构C语言实现栈的基本操作 源码如下: #include<stdio.h> #include<stdlib.h> #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 #define OVERFLOW -1 #define OK 1 #define ERROR 0 typedef int Status; typedef int SElemType; typedef struct { SElemType* bas

Cherish599的博客 1万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【数据结构】 链栈的基本操作 (C语言版)

【数据结构】 链栈的基本操作 (C语言版)

weixin_56814370的博客 6461

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

栈的基本操作(C语言版):入栈,出栈,输出栈

#include #define MAXN 10 int push(int *stack,int maxn,int *toppt,int x) //调用时不加&是因为push(&s,Maxn,&top,i)中s是数组元素,其名字代表数组首地址 { if(*toppt>=maxn) return 1;//栈满 stack[*toppt]=x;//第一步操作,保证元素在0位置处

Search,Research 1万+

C语言版:链栈的建立和基本操作

C语言版:数据结构链栈的建立和基本操作 文章目录前言一、链栈的建立二、链栈的基本操作1.进栈2.出栈3.判断是否为空栈4. 取栈顶元素三、代码实现 前言 文章介绍:主要是针对初学习数据结构的同学的一些参考,后续也会更新一些思路, 本文章主要介绍的 链栈如何建立?,链栈的压栈, 出栈以及栈空和取栈顶元素, 在内存允许的情况,链栈没有栈满的情况 提示:以下是本篇文章正文内容,下面案例可供参考 一、链栈的建立 链栈的建立其实链表有相似之处,只不过本次我用的链栈的建立方法与链表的前插法一样,可能会有更好的方式

m0_53318344的博客 1638

链栈的基本操作 C语言版

#include<stdio.h> #include <stdlib.h> typedef int ElemType; typedef struct Linknode { ElemType data; //数据域 struct Linknode *next; //指针域 } LiStack; //栈类型定义 //初始化链栈 void LiStack_HeadInsert(LiStack *L) { int x; LiStack *s; L = (LiStack*) ma

大数据开发 288

严蔚敏C语言版数据结构栈的九个基本操作

#include<stdio.h> #include<stdlib.h> #define ok 1 #define error 0 #define stack_init_size 100 //存储空间的初始分配量 #define stackincrement 10 //增加内存空间时的增量 typedef int status; t...

m0_46297137的博客 424

链式栈的基本操作——LinkStack(C语言版)

#include "stdafx.h" #include #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSIZE 20 /* 存储空间初始分配量 */ typedef int Status; typedef int SElemType; /* SElemType类型根据实际情况而定,这里假设为i

guoyong的专栏 2万+

数据结构之栈的基本操作(c语言版)

//栈的顺序存储 #include<stdio.h> #include<stdbool.h> #define MaxSize 50 #define ElemType char typedef struct{ ElemType data[MaxSize]; int top; }SqStack; //栈的初始化 void InitStack(SqStac...

qq_40842211的博客 545

数据结构 - C语言版 - 链栈 所有基本操作

C语言 - 链栈 所有基本操作 #include #include #include #define LEN 5 typedef struct Stack { int data; struct Stack * top; }Stack; Stack * Push_Stack(Stack * S) { Stack * p; int i; S = (Stack *) mal

W_Jp - 编程爱好者 1821

栈基本操作(顺序栈、共享栈、单链栈说明)C语言版

#include <stdio.h> #include <stdlib.h> #define MAXSIZE 50 typedef struct { int *data; int pop; }Sqstack; void Init(Sqstack *S) //初始化栈 { S->pop=-1; printf("-----...

qq_41635401的博客 359

数据结构 栈的基本操作(C语言版)

实现代码 #include <stdio.h> #include <stdlib.h> #include <math.h>//OVERFLOW //函数结果状态代码 #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 //Status是函数的类型,其值是函数结果状态代码,邚OK等 typed...

weixin_43482612的博客 530

栈的基本操作的相关代码(C语言版)

虽然我的代码是用C语言写的,但是你们建立文件的时候记得创建C++文件哦! 废话不多说,直接上代码: 首先我们先建立起我们自己的头文件,并且将函数的声明放入头文件(在此我的头文件名称是:”Seqstack.h”)中(建立头文件的相关操作可参考我上一期文章) #ifndef SEQSTACK_H_INCLUDED #define SEQSTACK_H_INCLUDED #include<stdio.h> #include<assert.h> #include<malloc

Binary_huang的简介 1611

栈和队列的定义和基本操作(c语言版)

栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。 栈就可以理解为:先入后出(LIFO) Stack.h #pra...

【Dyson】的博客 8389
上一篇: 函数重载和引用(C++)
下一篇: 栈应用之括号匹配问题(C语言版)
Code_zx
博客等级 码龄9年 83粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值