C语言栈的线性存储结构操作实现

栈的图文解析 和 对应3种语言的实现(C/C++/Java) 栈的介绍 栈(stack),是一种线性存储结构,它有以下几个特点: (01) 栈中数据是按照"后进先出(LIFO, Last In First Out)"方式进出栈的。 (02) 向栈中添加/删除数据时,只能从栈顶进行操作。 栈通常包括的三种操作:push、peek、pop。 push-- 向栈中添加元素。 peek-- 返回栈顶元素。 pop-- 返回并删除栈顶元素的操作。 ... 阅读详情
/**
    开发环境codeblock
    xxwu
*/
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

#define STACK_INIT_SIZE 100
#define STACK_INCREASEMENT 10
typedef int ElemType;

typedef struct Stack {
    ElemType *base;
    ElemType *top;
    int stack_size;
} SqStack;

//打印栈中元素
void printStack(SqStack s);

//初始化栈
bool InitStack(SqStack *s);

//栈判空
bool isEmpty(SqStack s);

//获取栈中元素个数
int getLength(SqStack s);

//插入栈
bool putStack(SqStack *s, ElemType e);

//出栈
ElemType outStack(SqStack *s);

//获取栈顶元素
ElemType getTopElem(SqStack s);

//清空栈
bool clearStack(SqStack *s);

//初始化栈
bool InitStack(SqStack *s) {
    s->base = (ElemType *) malloc(STACK_INIT_SIZE * sizeof(ElemType));
    if(s->base == NULL) {
        return false;
    }
    s->top = s->base;
    s->stack_size = STACK_INIT_SIZE;
    return true;
}

//栈判空
bool isEmpty(SqStack s) {
    return s.base == s.top? true : false;
}

//获取栈中元素个数
int getLength(SqStack s) {
    return s.top - s.base;
}

//打印栈中元素
void printStack(SqStack s) {
    while(s.top != s.base) {
            s.top--;
        printf("elems in the stack :%d\n", *s.top);
    }
}

//插入栈
bool putStack(SqStack *s, ElemType e) {
    //栈已满重新分配存储空间
    if(s->top - s->base >= s->stack_size) {
        s->base = (ElemType *) realloc(s->base,(s->stack_size + STACK_INCREASEMENT)*sizeof(SqStack));
        if(s->base == NULL)
            return false;
        s->top = s->base + s->stack_size;
        s->stack_size += STACK_INCREASEMENT;
    }
    //入栈
    *(s->top) = e;
    s->top++;
    return true;
}

//出栈
ElemType outStack(SqStack *s) {
    if(isEmpty(*s)) return NULL;
    s->top--;
    ElemType e = *(s->top);
    return e;
}

//获取栈顶元素
ElemType getTopElem(SqStack s) {
    if(isEmpty(s)) return NULL;
    return *(s.top-1);
}

//清空栈
bool clearStack(SqStack *s) {
    s->top = s->base;
    return true;
}

int main()
{
    SqStack S;
    InitStack(&S);
    putStack(&S,1);
    putStack(&S,2);
    putStack(&S,3);
    putStack(&S,4);
    putStack(&S,5);
    putStack(&S,6);
    printf("the out stack elem is : %d \n",outStack(&S));
    printf("length of S:%d \n",getLength(S));
    printStack(S);

    clearStack(&S);
    printf("the length of stack after cleared : %d", getLength(S));
    return 1;
}

运行结果:

数据结构源码之线性栈 数据结构源码C语言描述续,本篇描述了顺序栈的结构,读者可以直接下载并运行应用 立即下载

相关推荐

小程序HTTPS证书配置踩坑记:为什么Android访问失败而iOS正常?

本文深入剖析了小程序开发中常见的跨平台网络问题:Android访问HTTPS接口失败而iOS正常。核心原因在于服务器(如Nginx)HTTPS证书链配置不完整,Android系统对此校验严格,而iOS相对宽松。文章提供了从问题诊断、使用在线工具检测到修复Nginx证书链配置的完整解决方案,并总结了HTTPS部署的最佳实践,帮助开发者从根本上避免此类“玄学”故障。

weixin_29207149的博客 393

数据结构-栈(C语言代码)

栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。 #include <stdio.h> #include <stdlib.h> typedef struct Node { int data; struct.

weixin_50246370的博客 5996

Win11移动热点连接故障排查:从IP配置失败到网络共享的全面解决指南

本文提供了Win11移动热点连接故障的全面排查指南,重点解决手机连接时卡在“获取IP地址”或提示“IP配置失败”的问题。文章从基础检查(如确认网络连接、选择正确共享源)入手,深入讲解了核心的网络适配器共享设置、关键系统服务检查、防火墙配置以及终极解决方案——网络重置。通过系统性的步骤,帮助用户彻底修复Win11移动热点无法共享网络的问题。

alice7model的博客 784

数组栈实现逆波兰表达式的计算(纯C语言)

C语言实现逆波兰表达式的计算

asd_zxc15的博客 1757

Research Proposal:自动驾驶 行人运动预测

Research Proposal about Pedestrian/Cyclist Motion Prediction for Self-Driving Vehicles   If I can be provided with the opportunity to conduct PhD research in pedestrian/cyclist motion prediction for...

Poetry Wanderer的博客 3086

【CASS精品教程】006:CASS7.1 道路设计参数文件打开无响应,提示roadpara解决办法,权威解决办法汇总

在用CASS7.1 软件进行断面法土方量计算,在生成断面图后,需要进行道路设计参数文件的设计,打开断面设计参数文件的时候,无响应,提示roadpara,如下所示: 道路设计参数文件 解决办法有三种 第一种方法:Win+R (1)64位系统:输入regsvr32 C:\Windows\SysWOW64\CellCtrl5.ocx,回车 (2)32位系统输入regsvr32 C:...

智慧空间实验室 1万+

顺序栈(栈的顺序储存结构)

顺序栈(栈的顺序储存结构)

q322359的博客 1320

SEGGER Embedded Studio初体验

先楫HPM5E00EVK开发环境搭建

hywing's blog 1108

数据结构-栈的实现和应用(day7)

一、顺序栈的原理 栈是限制在一端进行插入操作和删除操作的线性表(俗称堆栈) 允许进行操作的一端称为“栈顶” 另一固定端称为“栈底” 当栈中没有元素时称为“空栈”。特点 :后进先出(LIFO)。 1.栈的应用: 如何排课: 没有前驱的顶点可以通过一个栈去存储,借助于进栈出栈的操作,完成对图的特殊处理,检查它有没有回路。 先入后出 二、顺序栈的实现 它是顺序表的一种,具有顺序表同样的存储结构,由数组定义,配合用数组下标表示的栈顶指针top(相对指针)完成各种操作。 ...

楚子航 1438

YOLOv11目标检测模型性能评价指标详解,涉及混淆矩阵、F1-Score、IoU、mAP、参数量、计算量等,一文打尽所有评价指标

本文主要讲解的是计算机视觉网络模型的性能评价指标,这是每一篇论文中都需要展示的内容。熟悉每一个评价指标也能够帮助我们在训练和改进模型过程中,更好的观察模型的变化效果。

Limiiiing的博客 8410

《低功耗方法学》翻译——前言

前言

记录所学,分享知识,结识挚友 1207

数据结构——栈

一、实验目的 理解和掌握栈的类型定义方法。 掌握栈中的基本运算,包括创建、判空及判满、出栈/入栈等基本操作。 学习利用栈解决实际问题 二、实验要求 【项目1 – 验证性实验:建立顺序栈、链栈】 【要求】: 1、头文件sqstack.h中定义数据结构并声明用于完成基本运算的函数。对应基本运算的函数包括: 2、在sqstack.cpp中实现这些函数 3、在main函数中完成测试,包括如下内容: (1)初始化栈s (2)判断s栈是否为空 (3)依次进栈元素a,b,c,d,e (4)判断s栈是否为空 (5)输出

TTTSEP9TH2244的博客 1965

华为OD机试 新系统真题 【数字系统转换器】

华为OD机试 新系统真题【数字系统转换器】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【数字系统转换器】多语言题解。

qq_45776114的博客 538

《数据结构》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万+

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

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

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

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

c语言堆栈基本代码入栈出栈_C语言实现顺序栈以及栈的特点

什么是栈?同顺序表和链表一样,栈也是用来存储逻辑关系为 "一对一" 数据的线性存储结构,如下图所示。 从上图我们看到,栈存储结构与之前所学的线性存储结构有所差异,这缘于栈对数据 "存" 和 "取" 的过程有特殊的要求:栈只能从表的一端存取数据,另一端是封闭的,如上图所示;在栈中,无论是存数据还是取数据,都必须遵循"先进后出"的原则,即最先进栈的元素最后出栈。拿上图的栈来说,从图中数据的存储状态可...

weixin_29373959的博客 1217

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

栈,数据结构中的栈(C语言实现,新手必看)

对于逻辑关系为“一对一”的数据,除了用顺序表和链表存储外,还可以用栈结构存储。

数据结构和算法教程(C语言版) 1466

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

栈的定义及基本操作实现(顺序栈)

相信大家小时后一定玩过玩具枪吧,在我们装子弹时玩具枪的子弹只能从弹夹的一端进并且从同一端出来,这种特殊的结构在我们数据结构的世界称为——栈顺序栈是指利用顺序存储结构实现的栈,即利用一组 地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置。通常习惯的做法是:以top= 0表示空栈,鉴于C语言中数组的下标约定从0开始,则当以C语言作描述语言时,如此设定会带来很大不便,因此另设指针base指示栈底元素在顺序栈中的位置。当top和base的值相等时,表示空栈。

weixin_73602725的博客 1227

数据结构——栈和队列(C语言实现)

栈和队列是两种重要的线性结构,本次主要对其顺序栈,链栈,顺序队列,链队进行学习,并用C语言对其进行实现。

m0_56399733的博客 1785

栈是什么,栈的基本操作(入栈和出栈,新手必看)

对于逻辑关系为“一对一”的数据,除了用和存储外,还可以用栈结构存储。栈是一种“特殊”的线性存储结构,它的特殊之处体现在以下两个地方:1、元素进栈和出栈的操作只能从一端完成,另一端是封闭的,如下图所示:图 1 栈存储结构示意图通常,我们将元素进栈的过程简称为“入栈”、“进栈”或者“压栈”;将元素出栈的过程简称为“出栈”或者“弹栈”。2、栈中无论存数据还是取数据,都必须遵循“先进后出”的原则,即最先入栈的元素最先出栈。

zdoeo的博客 1万+

数据结构之栈的2种实现方式(顺序栈+链栈,附带C语言完整实现源码)

​和线性表类似,栈存储结构也有两种具体的实现方案,顺序栈是用顺序表存储数据,数据存取的过程严格遵循栈结构的规定;链栈是用链表存储数据,数据存储的过程严格遵循栈结构的规定。顺序栈和链栈的区别仍然是顺序表和链表之间的区别,即顺序栈是将所有数据集中存储,而链栈是将数据分散存放,元素之间的逻辑关系靠指针维系。

zdoeo的博客 1221

数据结构实验3:线性表、堆栈和队列的操作与实现(C语言)

1、线性表的链表实现:遍历、查找、插入、删除、翻转 2、栈的链式存储结构实现:入栈、出栈 3、队列的链式存储结构的实现:入队、出队 4、线性表、栈和队列的应用实现

weixin_68085580的博客 1724

【数据结构】栈的实现

栈是一种特殊的线性表,只允许在表尾进行插入和删除元素的操作。进行数据的插入和删除操作的一端称为栈顶,另一侧称为栈底。栈中的数据元素严格遵循后进先出LIFO(Last in First Out)的原则。压栈:栈的插入操作称为进栈/压栈/入栈,插入的数据在栈顶出栈:栈的删除操作称为出栈,删除的数据也在栈顶在顺序表里面我们就讲过,顺序表分为静态顺序表和动态顺序表。静态顺表不够灵活,容量或多或少,不能由我们控制。所以我们要用支持动态的栈。...

qq_59702185的博客 1773

java和c 关系图_栈的图解和实现(C/C++/Java)

本章会先对栈的原理进行介绍,然后分别通过C/C++/Java三种语言来演示栈的实现。栈的介绍栈(stack),是一种线性存储结构,它有以下几个特点:栈中数据是按照"后进先出(LIFO, Last In First Out)"方式进出栈的。向栈中添加/删除数据时,只能从栈顶进行操作。栈通常包括的三种操作:push、peek、pop。push用于向栈中添加元素,peek用于返回栈顶元素,pop用于返回...

weixin_34570241的博客 285

【数据结构】栈的基本概念以及C语言代码实现 | 顺序栈 | 链栈

看图理解(概念只是辅助理解_理解了才算学会)栈只能从一端存取,另一端是封闭的在栈中,无论是存还是取,都必须遵循"先进后出原则"==>栈是一种只能从表的一端存取数据,且遵循"先进后出"原则的线性存储结构。

MuShan_bit的博客 495

数据结构和算法系列3 栈

上一篇总结完了线性表之链表,这一篇文章我们要总结的是栈,我想从以下几个方面来进行总结。 1,什么是栈? 2,栈的存储结构? 3,栈的常见操作及代码实现? 1,什么是栈 首先栈是一种特殊的线性表。那它的特殊性表现在哪里呢?栈是限定在表的一端进行插入和删除运算的线性表,因此,栈也称为后进先出(LIFO)的线性表。 它有很多应用场景,比如食堂中的一叠盘子,我们只能从顶端一个一个地取。

秋风扶柳笛的专栏 610

链栈的表示与实现(第三章)

链栈的表示与实现 栈也是线性表,是操作受限的线性表。栈的操作是线性表操作的子集。因此,也可以将线性表的结构作为栈的结构。 下面,就是把带头结点的线性单链表结构作为链栈的结构,这样,线性单链表的一些基本操作就可以直接用于链栈的操作了。 例如,初始化链表和初始化链栈的操作是一样的。需要注意的是,由于栈的操作被限定仅在栈顶进行,显然,令表头为栈顶可简化栈的操作。 typede...

但行好事,莫问前程 505
上一篇: Codeblock写C语言代码报错 expected ';', ',' or ')' before '&' token
下一篇: C语言链表实现栈
国服第l帅
博客等级 码龄12年 26粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值