栈数据结构实现代码

【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

泛微OA表单设计实战:如何快速实现自定义多选浏览框(附完整配置步骤)

本文详细介绍了在泛微OA中快速实现自定义多选浏览框的完整配置步骤。针对招聘提报、活动审批等需要从海量数据中规范选择多个条目的业务场景,文章从理解需求、构建数据源、设计查询页面到创建浏览框控件,提供了清晰的实战指南,帮助开发者高效解决复杂数据选择难题,提升表单操作体验。

yog99的博客 1049

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

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

m0_62795460的博客 5842

迪文屏【0】——从零搭建工程:图片显示、文本变量配置与串口数据交互实战

本文以迪文屏T5L系列为例,详细介绍了从零搭建HMI工程的完整流程。内容涵盖硬件软件准备、DGUS工程创建、背景图片显示、文本变量配置,并重点演示了如何通过串口指令实时修改屏幕数据变量,实现动态交互。旨在帮助开发者快速掌握迪文屏开发的核心步骤与数据交互方法。

alpha的博客 349

i茅台APP加密参数逆向分析:MT-Device-ID与mt-v生成算法

在移动应用安全领域,参数加密是防止API滥用的重要手段。通过对通信协议的逆向分析,可以揭示加密参数的生成原理,这对理解移动应用安全机制具有重要意义。以i茅台APP为例,其关键接口使用了MT-Device-ID和mt-v两个加密参数,前者基于设备硬件信息生成,后者则通过动态签名机制确保请求时效性。这类技术广泛应用于电商、金融等需要高安全性的场景。通过抓包工具和逆向工程手段,可以还原出从设备指纹生成到动态签名的完整技术链条,其中涉及MD5、SHA256等常见哈希算法的应用。掌握这些加密参数的生成逻辑,不仅有助于

weixin_28568819的博客 320

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

数据结构cpp 栈

日常学习分享 1290

Polyworks脚本开发学习笔记(十五)-用Python连接Polyworks的COM组件

Polyworks脚本开发学习笔记(十五)-利用Python连接Polyworks的COM组件

qq_43662503的博客 2502

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

栈。

tz1979513514的博客 291

QtQuick QML教程(2):qml语法介绍

​ qml一个普通的文本文件,后缀是.qml, 一个qml文件主要由两部分组成:(1) import语句 :这个就像C++中的头文件, 使用 import 导入qml需要的相关模块,可以查询Qt文档进行导入,注意每个版本的Qt模块声明可能都不同,相比于QWidget项目,QtQuick的变动是很大的;(2) QML对象树 :根对象是Window, 然后可以在Window中添加各种控件,例如按钮,文本,菜单等。

琅嬛福地 551

内网渗透(二)之基础知识-工作组介绍

在一个大型单位里,可能有成百上千台计算机互相连接组成局域网,它们都会列在"网络"(网上邻居)内。如果不对这些计算机进行分组,网络的混乱程度是可想而知的 为了解决这一问题,产生了工作组( Work Group)这个概念。将不同的计算机按功能(或部 门)分别列入不同的工作组,例如技术部的计算机都列入"技术部"工作组、行政部的计算机都 列入"行政部"工作组。要想访问某个部门的资源,只要在"网络"里双击该部门的工作组名 就可以看到该部门的所有计算机了。相比不分组的情况,这样的情况有序得多(尤其对大型局域网来说)。

把自己活成一道光,因为你不知道,谁会借着你的光,走出了黑暗。请保持心中的善良,因为你不知道,谁会借着你的善良,走出了绝望。请保持你心中的信仰,因为你不知道,谁会借着你的信仰,走出了迷茫。请相信自己的力量,因为你不知道,谁会因为相信你,开始相信了自己.... 1219

栈的基本操作(C语言)

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

absorb2601078490的博客 9123

python基于pingouin统计分析:rm_corr计算两个变量之间的重复测量相关性(Repeated measures correlation、plot_rm_corr函数可视化重复测量相关性图

python基于pingouin包进行统计分析:使用rm_corr函数计算两个变量之间的重复测量相关性(Repeated measures correlation)、plot_rm_corr函数可视化重复测量相关性图

statistics+insight+vista+power 679

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

数据结构伪代码的实现(栈) #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

RV1126 ROS2环境交叉编译及部署(基于官方Docker)

我的所有基于`RV1126`的机器人项目都是在`Ubuntu22.04`下进行开发的,在`Ubuntu18.04 Docker`容器中实现`RV1126`的`SDK`编译,详细可参考我之前的博客[《Ubuntu20.04/22.04下Docker方案实现多平台SDK编译》第2章](https://blog.youkuaiyun.com/w1820020635/article/details/147342689),`RV1126`的`ROS1`部署没什么难度,可以参考我之前的博客,这里记录了`ROS2`交叉编译及问题解决

w1820020635的博客 1143

IDEA的使用指南

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

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

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

jhj9201633的博客 1225

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

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

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

君陌的博客 649

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

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

??个人博客: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、付费专栏及课程。

余额充值