首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C语言共享栈

栈的操作我相信大家都应该了解了弄懂了, 如果没弄懂希望可以去再去看看相关的资料,我博客中的C语言中缀表达式转后缀表达式中涉及到了一下栈的基本操作,有兴趣的朋友也可以看看。...所谓共享栈,就是两个栈共同使用一块内存空间,其中一个栈的栈底作为另一个栈的栈顶,反之亦然。...开始 思路分析 因为两个栈公用一个空间,假设一个栈为0#,规定其为空时top[0]==-1;另一个栈为1#规定其为空时,top[1]==MaxSize; 入栈时,先确定栈号是否合法,然后查看是对0#栈还是...1#栈进行操作,入栈操作和顺序栈的入栈操作并无太大不同。...如若入栈成功则返回0;入栈失败则返回-1; 出栈时,先确定栈号是否合法,然后查看是对0#栈还是1#栈进行操作,出栈操作和顺序栈的出栈操作并无太大不同。 选定之后进行出栈操作。

1.2K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    洛谷 || 栈(C语言)

    题目背景 栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表。 栈有两种最重要的操作,即 pop(从栈顶弹出一个元素)和 push(将一个元素进栈)。...栈的重要性不言自明,任何一门数据结构的课程都会介绍栈。宁宁同学在复习栈的基本概念时,想到了一个书上没有讲过的问题,而他自己无法给出答案,所以需要你的帮忙。...题目描述 宁宁考虑的是这样一个问题:一个操作数序列1,2,…,n(图示为 1 到 3 的情况),栈 A 的深度大于n。...现在可以进行两种操作, 将一个数,从操作数序列的头端移到栈的头端(对应数据结构栈的 push 操作) 将一个数,从栈的头端移到输出序列的尾端(对应数据结构栈的 pop 操作) 使用这两种操作,由一个操作数序列就可以得到一系列的输出序列

    1.3K30

    C语言栈的实现

    因为方便:试想一下我们要判断栈是否空就只需要判断top是否等于buttom,如果buttom指向栈底显然就会麻烦许多 下面我们先用C语言来实现一下: 首先我们需要对这个装东西的“盒子”定义,而这个盒子就是栈...,然后节点可以放在里面(不过实际上的代码是一个概念,只是形象的用了两个结构体表示) 回到上面的话题,栈定义完了,接下来就是栈的操作,栈操作主要有入栈(push)和出栈(pop),还有遍历输出,其次就是一些诸如清栈...出栈一般有两种:1.让指定数据出栈2.让top指向的数据出栈,注意,如果要让指定的数据出栈,而且如果那个数据在中间,那你就不得不把从top到那个数据的全部节点出栈,因为栈是后进先出,而且只允许一段入/出...*n=sk->top; sk->top=n->next; delete n; } 就像上面,另还要注意出栈需要考虑栈是否为空,我没有写 至此,一个C语言版本的栈及其主要操作就完成了,这也是我第一次写栈结构...,因为我用C++ stack sk; sk.push(5); //..

    3.9K40

    栈(用C语言实现)

    栈 1.1 概念与结构 栈:⼀种特殊的线性表,其只允许在固定的⼀端进行插入和删除元素操作。进行数据插入和删除操作的⼀端称为栈顶,另⼀端称为栈底。...栈中的数据元素遵守后进先出 LIFO(Last In First Out)的原则。 压栈:栈的插⼊操作叫做进栈/压栈/入栈,入数据在栈顶。 出栈:栈的删除操作叫做出栈。出数据也在栈顶。...; }ST;//定义栈的结构 // 初始化栈 void STInit(ST* ps); // 销毁栈 void STDestroy(ST* ps); // ⼊栈 void STPush(ST...STSize(ST* ps); //栈是否为空 bool STEmpty(ST* ps); 实现栈的文件:Stack.c #include"Stack.h" void STInit(ST...arr[ps->top - 1]; } int STSize(ST* ps) {     assert(ps);     return ps->top; } 测试文件:text.c

    10110

    C语言实现顺序栈

    文章目录 顺序栈的常规操作 定义顺序栈结构体 初始化顺序栈 顺序栈判满 顺序栈判空 计算顺序栈的长度 顺序栈入栈(Push) 顺序栈出栈(Pop) 顺序栈各操作测试 源代码 ?...入栈(Push),先把元素放入栈中,后让 栈顶指针top 后移 ++ s -> datas[s -> top] = data; s -> top++; 出栈(Pop),先让 栈顶指针(top) 前移...入栈(Push),,先把 栈顶指针top 后移 ++ ,后让元素放入栈中 s -> top++; s -> datas[s -> top] = data; 出栈(Pop),先取出栈顶元素,后让 栈顶指针...(s == NULL){ return FALSE; } return s -> top; } 顺序栈入栈(Push) /* * 入栈 压栈 * s 顺序栈 * data 入栈数据 *...源代码 源代码已上传到 GitHub Data-Structure-of-C,欢迎大家下载 C语言实现数据结构

    5.4K20

    全栈必备 :C语言基础

    在《全栈的技术栈设想》中埋下了4种编程语言的伏笔,已经兑现了Javacript,Python和Java, 本想将C/C++一并整理,但涉及面向对象等设计技术,最终还是C 梳理一下,从0到1吧。 ?...数据结构 C语言为用户提供了丰富的数据结构,还允许用户自定义复杂的数据结构。...一个变量在内存中的地址就称为该变量的指针,这是C语言中的精华,下面单独描述。 C语言还提供了十分丰富的运算符,主要有如下34种: 算术:+、-、*、/、++等 关系:>、C标准运行时的一部分。 函数在调用和被调用过程中,都伴随着入栈和出栈,因此栈发挥着重要作用。函数的局部变量、参数、返回值都存在栈区中。...C语言被一些人誉为“上帝语言”,它几乎奠定了软件产业的基础,还创造了很多其它语言。但是,鉴于水平有限,难以举重若轻,本文中的基础描述只是老码农的碎碎念罢了。

    1.2K30

    【线性表】之栈(C语言)

    ---- 栈 栈也是线性表,在逻辑上还是挨着放的。 栈的概念以及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。**进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。...**栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈:栈的插入操作叫做进栈/压栈/入栈, 入数据在栈顶。 出栈:栈的删除操作叫做出栈。 出数据也在栈顶。...总结: ​ 如果用尾插做栈顶,用双向链表更好。 ​ 如果用单链表实现,就用头去做栈顶,这样入栈和出栈效率都是O(1)。 ​ 整体来说数组的效率更优一些。...capacity;//栈的容量——能放几个数据 }Stack; 初始化 如果初识的top给0,意味着top指向栈顶的元素的下一个,top给-1,top指向栈顶元素。...void StackPop(Stack* ps) { assert(ps); //如果栈空了调用top,直接终止程序报错 assert(ps->top > 0); ps->top--; } 返回栈顶元素

    68210

    C语言-用栈实现表达式求值(顺序栈)

    函数目录: 栈的基本操作: 创建栈并初始化(create) 入栈(push_in) 出栈(pop_out) 取栈顶元素(GetTop) 优先级函数(Precede) 求值函数(Operate) 判断操作符函数...若选用数字栈(整型),能顺利地将任何数字存入栈中,而在存放操作符的时候,将会转化成ASCII码的形式存入栈中,故数字栈既可以存取多位数字,又能存取操作符,所以我选择的是数字栈。...但是建立两个不同类型的栈,需要在代码中将栈的基本操作函数(建立,初始化,入栈,出栈,取栈顶元素)写两遍,然后在存取操作数和运算符的时候分别调用对应的操作,过程过于麻烦,代码也过于繁琐,不如数字栈来的简洁明了...\n"); exit(0); } } } int In(char c) //判断是否为运算符,是运算符返回1,若不是返回0 { switch(c)...evaluateExpression(exp); printf("\n"); printf("%s%d\n",exp,result); return 0; } 执行结果: ---- 参考: 数据结构(C语言第二版

    1.9K10

    C语言 | C++ 基础栈溢出及保护机制

    以下是正文 ---- 引言 如果你学的第一门程序语言是C语言,那么下面这段程序很可能是你写出来的第一个有完整的 “输入---处理---输出” 流程的程序: #include int...但可能从来没有人告诉你,什么是栈溢出、栈溢出有什么危害、黑客们可以利用栈溢出来进行什么样的攻击,还有你最想知道的,他们是如何利用栈溢出来实现攻击的,以及如何防护他们的攻击。...熟练使用C语言、熟悉gcc编译器以及Linux操作系统 2. 熟悉x86汇编,熟练使用mov, push, pop, jmp, call, ret, add, sub这几个常用命令 3....上一节中gcc victim.c -o victim -zexecstack -g,其中的-zexecstack选项就是告诉操作系统允许本程序的栈可执行。...让我们打开栈保护开关重新编译一下victim.c: $ gcc victim.c -o victim_fsp -g -fstack-protector$ objdump -d victim_fsp -M

    4.9K88
    领券