栈数据结构实现代码

【C++】【数据结构】链栈的基本操作(初始化、入栈、出栈、取栈顶元素、遍历输出栈)的算法实现附全代码 C++实现链栈的算法+步骤(附全代码): 使用c++完成数据结构链栈的基本操作,包括(初始化、入栈、出栈、取栈顶元素、遍历输出栈等),可直接编译运行。 链栈是指采用链式存储结构实现的栈,通常用单链表来表示。它的特点是:用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续也可以是不连续)。 而顺序栈是用顺序存储结构实现的栈,利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素。 链栈的定义: #define MAXSIZE 100 typedef int SElemType; typedef 阅读详情

还没检查测试就把代码贴上来,好几处有错误!!!

顺便写了一个用栈完成10进制整数转换成8进制打印。

再写一个括号匹配检查的函数。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <assert.h>

#define STACK_INIT_SIZE       1024
#define STACK_ADD_SIZE        1024

struct stack {
    int size;
    void **slot;
    int top;
};

void InitStack(struct stack *sk);
void DestroyStack(struct stack *sk);
void ClearStack(struct stack *sk);
int StackEmpty(struct stack *sk);
int StackLength(struct stack *sk);
void GetTop(struct stack *sk, void **e);
void Push(struct stack *sk, void *e);
void *Pop(struct stack *sk);

void InitStack(struct stack *sk)
{
    sk->slot = (void **) malloc(STACK_INIT_SIZE * sizeof(void *));
    assert(sk->slot != NULL);
    sk->size = STACK_INIT_SIZE;
    sk->top = 0;    
}

void DestroyStack(struct stack *sk)
{
    free(sk->slot);
    sk->size = 0;
    sk->top = 0;
}

void ClearStack(struct stack *sk)
{
    sk->top = 0;
}

int StackEmpty(struct stack *sk)
{
    return !(sk->top);
}

int StackLength(struct stack *sk)
{
    return sk->top;
}

void GetTop(struct stack *sk, void **e)
{
    if (sk->top > 0) {
        *e = sk->slot[sk->top - 1];
    }
}

void Push(struct stack *sk, void *e)
{
    sk->slot[sk->top++] = e;
    if (sk->size == sk->top ) {
        sk->size += STACK_ADD_SIZE;
        sk->slot = realloc(sk->slot, sk->size *sizeof(void *));
        assert(sk->slot != NULL);
    }
}

void *Pop(struct stack *sk)
{
    if (sk->top > 0) {
        sk->top--;
        return sk->slot[sk->top];
    }
    else {
        printf("Warn Stack is empty\n");
        return NULL;
    }
}

void conversion()
{
    int n;
    struct stack s;
    InitStack(&s);
    scanf("%d", &n);
    
    while (n) {
        Push(&s, (void *) (n % 8));
        n = n / 8;
    }

    while (!StackEmpty(&s)) {
        n = (int) Pop(&s);
        printf("%d", n);
    }
    DestroyStack(&s);
}

int BracketMatch(struct stack *s, char *str)
{
    int status = 0;
    char c;

    while (*str != 0) {
        switch (*str) {
            case '(':
                Push(s, (void *) *str);
                break;
            case ')':
                if (!StackEmpty(s)) {
                    c = (char ) Pop(s);
                    if (c != '(') {
                        status = 1;
                    }
                }
                else {
                    status = 1;
                }
                break;
            case '{':
                Push(s, (void *) *str);
                break;    
            case '}':
                if (!StackEmpty(s)) {
                    c = (char) Pop(s);
                    if (c != '{') {
                        status = 1;
                    }
                }
                else {
                    status = 1;
                }
                break;
        }
        if (status == 1) {
            return 1;
        }
        str++;
    }
    return 0;
}



int main(int argc, char *argv[])
{
    struct stack s;
    char buf[1024];
    InitStack(&s);

//    conversion();
    printf("\n");
    while (fgets(buf, sizeof(buf), stdin)) {
        printf("%s", buf);
        if (BracketMatch(&s, buf) != 0) {
            printf("Bracket is't match\n");
            return 0;
        }
    }
    if (StackEmpty(&s)) {
        printf("Bracket is match\n");
    }
    else {
        printf("Bracket Is't match\n");
    }
    DestroyStack(&s);

    return 0;
}


数据结构——栈(代码) 这是数据结构栈的实现的代码,对于栈的基本功能都有实现 立即下载

相关推荐

数据结构栈代码

数据结构栈代码,代码结构清晰,很容易读懂,适合初学者学习,100%原装代码。

数据结构——“栈“ 详细图解和代码示例

栈栈的定义基本运算:顺序栈:顺序栈基本运算代码实现:创建空栈:`CreateStack(len)`清空栈:`ClearStack(S)`判断是否栈空:`EmptyStack(S)`判断是否栈满:`FullStack(S)`元素进栈:`PushStack(s,x)`元素出栈:`PopStack(S)`取栈顶元素:`GetTop(S)` 栈的定义 栈: 栈是限制在一端进行插入操作和删除操作的线性表(俗称堆栈),允许进行操作的一端称为“栈顶”,另一固定端称为“栈底”,当栈中没有元素时称为“空栈”。 特点:后进先

weixin_44278698的博客 5379

【阿里云大模型高级工程师ACP习题集】2.5 优化RAG应用提升问答准确度(⭐️⭐️⭐️ 重点章节!!!)

【摘要】这是我精心整理出对应的习题集,里面足足有 30 道题目,从基础概念到深度拓展,全方位覆盖章节重点、难点。不管你是想检验自己的学习成果,还是想针对薄弱环节进行强化训练,它都能完美适配!

davidkorhenn的博客 1107

数据结构之栈(顺序栈和链栈)(c语言附完整代码)

① 栈是一种特殊的线性表,它只允许在固定的一端进行插入和删除元素的操作。② 进行数据插入的删除和操作的一端,称为栈顶,另一端则称为栈底。③ 栈中的元素遵守后进先出的原则,即 LIFO原则(Last In First Out)栈也称为后进先出表。④栈的插入操作通常称为进栈或者入栈,栈的删除操作通常称为出栈或退栈。示意图:栈的顺序存储结构称为顺序栈声明顺序栈int top;//栈指针 } SqStack;栈的链式存储结构称为链栈声明链栈。

m0_62795460的博客 5842

国土变更调查中六类拓扑错误的成因分析与高效修复实践

本文深入分析了国土变更调查中六类拓扑错误的成因,包括边界不一致和不规则图形等常见问题,并提出了高效的自动化修复实践。通过智能咬合算法、引力-斥力平衡模型等核心技术,显著提升了修复效率,节省人工质检时间70%。文章还分享了实战中的避坑指南和黄金法则,为相关从业人员提供了宝贵经验。

weixin_29202213的博客 359

C语言头文件完全解析(连“#”我都给你讲明白)

C语言头文件完全解析 引言 本文将尽量详细的介绍c语言的头文件所包含的知识,如有错误,还望指正。 萌新们肯定疑惑为什么每次打代码都要写一个所谓的头文件(如:#include<stdio.h>),这里先简单让大家有个了解,你所用的 printf("%d",a)就是这个 stdio里的东西,如果没有这个头文件,编译器都不知道 printf是个什么东东。所以头文件就是一个准备好的大仓库,你可...

CRAZY_eyes的博客 7万+

【数据结构】栈(代码篇)

数据结构cpp 栈

日常学习分享 1290

Unsloth Desktop 本地大模型微调量化实战指南

大语言模型的本地化定制正在成为开发者与内容创作者的重要需求,而微调与量化则是其中最关键的两项技术。LoRA 与 QLoRA 通过仅训练少量低秩矩阵,大幅降低显存占用和训练成本,让消费级 GPU 也能完成模型适配;GGUF 格式则打通了训练与推理的边界,使微调后的模型可直接接入 Ollama、llama.cpp 等主流推理引擎。本文以 Unsloth Desktop 为切入对象,从其底层加速原理出发,梳理了环境准备、模型加载、对话测试、量化导出、微调验证及 API 批量调用的完整链路,并针对显存优化、端口冲突

weixin_29055137的博客 397

3.1数据结构之栈代码和知识总结(链栈,顺序栈)

栈。

tz1979513514的博客 291

量化策略分享之ST股弱转强,回测年化123%

本策略的核心是精选ST股票,国九条过滤,防止直接暴雷退市,只做ST股票的弱转强,弱转强的认定标准是前日涨停但昨日不涨停,昨日收盘价大于前一日最低价,昨日收盘价大于10日线,昨日成交量大于前一日的成交量但小于前一日成交量的10倍,股价大于1;这类股票强势,有资金介入,能获得超额收益。

qq_29301281的博客 1268

初识 QML

QML 是一种声明性语言,允许根据用户界面的可视组件以及它们如何相互交互和相互关联来描述用户界面。QML 是一种高度可读的语言,旨在使组件能够以动态方式互连,并且允许组件在用户界面中轻松重复使用和自定义。 使用 Qt Quick,开发人员可以轻松地在 QML 中构建流体动画用户界面,并且可以选择将这些用户界面连接到任何后端 C++ 库。

青春不老,奋斗不止! 1万+

栈的基本操作(C语言)

本文只有代码,介绍了有关栈的基本操作。 已经过调试没有很大问题。 如有错误,还请批评指正。

absorb2601078490的博客 9123

SE80 Repository Information System 在 SAP CRM WebClient UI 组件分析中的实战指南

在 SAP CRM WebClient UI 开发过程中,如何快速定位组件、视图、上下文节点以及各类运行时对象,一直是调试效率的关键。(后文简称RIS)正是隐藏在SE80里的瑞士军刀,帮助开发者按照组件集、数据元素、上下文节点属性等多维条件进行交叉检索。官方博客将它描述为本文结合多年项目经验,系统梳理RIS的功能脉络与实战技巧,同时引入真实案例,示范如何借助它在几分钟内完成以往动辄数小时的排查任务。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2万+

数据结构伪代码的实现(栈)

数据结构伪代码的实现(栈) #include <malloc.h> #include <stdio.h> #include <stdlib.h> #include <stdbool.h> typedef struct Node { int data; struct Node *pNext; }NODE,*pNODE;//定义栈的每一个元素类型和指针 typedef struct Stack { pNODE pTop;//栈顶

Sword_demon的博客 2579

Gbase 8a GDCA考试真题100%

本文整理一些Gbase 8a中非常易错得考试真题及答案,而且都是不好搜的。加粗的是正确答案。

打工之路,一路生花 4304

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

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

【数据结构】栈和队列的代码实现

栈和队列的相关知识以及代码的实现

jhj9201633的博客 1225

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

数据结构——链式栈长代码实现

此为本人在学习数据结构时将所学所想进行代码实现后所写成的代码,功能均能实现,仅供参考学习 #include <iostream> #include <assert.h> using namespace std; template <typename E>class link{ public: E element;//结点值 link *next;//节点指针...

君陌的博客 649

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

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

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【数据结构】栈的代码实现

??个人博客:www.hellocode.top?? 所有文章均在上方博客首发,其他平台同步更新 ??本文专栏:《数据结构与算法》 如有问题,欢迎指正,一起学习~~ 文章参考整理自小码哥的《恋上数据结构和算法》课程,图片转载自课程PPT,如有侵权,请联系删除~~ 文章目录 接口设计 代码实现 栈是一种特殊的_线性表_, 只能在_一端_进行插入或者删除操作 往栈中_添加_元素的操作,一般叫做_push_,入栈 从栈中_移除_元素的操作,一般叫做_pop_,出栈(只能移除栈顶的元素) 成.

m0_67401545的博客 98

数据结构——栈的C语言代码实现

系列文章目录 ` 数据结构——顺序表的C语言代码实现 数据结构——单向不带头非循环链表的C语言代码实现 数据结构——单向不带头循环链表的C语言代码实现 数据结构——单向带头非循环链表的C语言代码实现 数据结构——单向带头循环链表的C语言代码实现 数据结构——双向带头循环链表的C语言代码实现 文章目录系列文章目录前言一、基础知识1.栈的概念(stack)2.栈的种类二、代码实现1.stack.h(1) 引用函数库(2) 定义栈(3) 声明接口函数2.stack.c3.test.c总结 前言 该篇文章主要介绍

AZ10000000的博客 3292

数据结构进出栈代码实现

【代码】数据结构进出栈代码实现。

ljf6673的博客 217

数据结构之栈——概念原理及代码实现

数据结构之栈栈的简介顺序栈顺序栈类声明顺序栈各接口实现测试链栈链栈类声明链栈类实现测试总结 栈的简介 今天给大家介绍另一种常用的数据结构——栈。(注意,栈从不同的角度定义有不同的定义,从内存分配的角度定义是指变量由系统分配内存,今天讲的是一种数据结构)它是一种先进后出的结构即FILO(first in last out)。如下图所示,数据的插入(压栈)删除(出栈)都从栈顶操作。 栈通常具有以下接...

横扫天下的博客 563

数据结构栈的代码实现(C语言)

一 、栈的顺序代码实现 初始化一个空栈 bool InitStack(SqStack *s) { s->base = (ElemType *) malloc(STACK_INIT_SIZE * sizeof(ElemType)); if(s->base == NULL) { return false; } s->top = s-...

山山而川~ 4562

数据结构:栈的结构明解和代码实现

本文主要概述了栈的基本概念结构及其性质,包括其两种常见的实现方法,顺序栈和链栈。详解了两种方法中的各种具体函数的实现方法以帮助个位了解学习数据结构栈的核心知识。!!!

Zyzzzyz_的博客 955

数据结构----代码实现栈的过程

为自己做记录,昨天因为忙的缘故也没有发表(坚持,一天理解一个小知识点,小白打卡第二天) 今天分享数据结构中的 ======栈 (1)栈与系统栈   从计算机科学的角度来看,栈指的是一种数据结构,是一种先进后出的数据表。栈的最常见操作有两种:压栈(PUSH)、弹栈(POP); 用于标识栈的属性也有两个:栈顶(TOP)、栈底(BASE)。 栈在内存中的存放是高地址是栈底(Base),低地址是栈顶(T...

weixin_43062845的博客 862

数据结构:链栈 代码实现

链栈 //和单链表相似,只不过只能在链表一侧进行增减元素 头文件 #include<stdio.h> //链栈---只能在表头插入删除 #include<stdlib.h> 代码实现 typedef struct LinkNode{ int data; struct LinkNode *next; }*LiStack; //栈类型定义 void PrintSt...

Xiaoxiaokezhan的博客 953

数据结构与算法——用栈实现回文(完整代码)

*版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。* ***新人小白,请多指教!!!*** 回文数即是正读反读均是一样的值,例如“123321”就是回文数。 栈是一种受限的数据结构,具有先进后出,后进先出的特性,正因这种特性,用栈来做回文数完全符合要求,且思路清晰明了。 思路:用一个字符数组从键盘接收一个字符串,并把该字符数组中的元素...

qq_44324951的博客 5381
上一篇: linked list 倒转linked list
下一篇: 寻找两个节点的最近公共祖先
smallmelon
博客等级 码龄16年 22粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值