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

C语言栈的实现

因为方便:试想一下我们要判断栈是否空就只需要判断top是否等于buttom,如果buttom指向栈底显然就会麻烦许多 下面我们先用C语言来实现一下: 首先我们需要对这个装东西的“盒子”定义,而这个盒子就是栈...,而且我们没有把链表和节点的概念分开,我们始终认为链表是由节点组成的,而栈我们认为他是一个概念,然后节点可以放在里面(不过实际上的代码是一个概念,只是形象的用了两个结构体表示) 回到上面的话题,栈定义完了...,接下来就是栈的操作,栈操作主要有入栈(push)和出栈(pop),还有遍历输出,其次就是一些诸如清栈、判断栈是否为空/满的操作,注意,由于我们这里讲的是链式栈,所以不存在栈满,如果用数组储存就会遇到...结构创建完成我们需要创建一个空栈,前面我们已经说了要想让栈为空只需要top=buttom,于是你可能很容易写出现下面代码 struct stack *create_stack(){ struct stack...*n=sk->top; sk->top=n->next; delete n; } 就像上面,另还要注意出栈需要考虑栈是否为空,我没有写 至此,一个C语言版本的栈及其主要操作就完成了,这也是我第一次写栈结构

3.9K40

C语言共享栈

栈的操作我相信大家都应该了解了弄懂了, 如果没弄懂希望可以去再去看看相关的资料,我博客中的C语言中缀表达式转后缀表达式中涉及到了一下栈的基本操作,有兴趣的朋友也可以看看。...所谓共享栈,就是两个栈共同使用一块内存空间,其中一个栈的栈底作为另一个栈的栈顶,反之亦然。...开始 思路分析 因为两个栈公用一个空间,假设一个栈为0#,规定其为空时top[0]==-1;另一个栈为1#规定其为空时,top[1]==MaxSize; 入栈时,先确定栈号是否合法,然后查看是对0#栈还是...\n", x); } return 0; } 以上就是共享栈的简单操作,我这里只测试他是否能够成功,如有需要,请研读代码后自行修改,如果一时看不懂,请多看几遍思路分析,把原理弄懂,代码还是想当简单的...注: 上述代码在visual studio 2015中编译成功运行,其他ide请自行测试 上述文字皆为个人看法,如有错误或建议请及时联系我

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

    c语言实现栈(顺序栈,链栈)

    个人主页: :✨✨✨初阶牛✨✨✨ 推荐专栏: C语言进阶 个人信条: 知行合一 本篇简介:>:讲解用c语言实现:“数据结构之"栈”,分别从"顺序栈"和"链栈"的接口讲解....代码: typedef struct stack { stacktype* data;//一个指向连续内存空间的指针 int top;//记录栈顶元素的下标 int capacaity; }ST;...将新节点的next指针指向原"栈"的顶点 更新栈顶指针(将栈顶指针指向新节点) 图解: 代码: //入栈 void STPush(SLStackNode** pps, stacktype x)//...next指针指向原"栈"的顶点 *pps = newnode;//更新栈顶 } 2.3 “出栈”,删除"栈"中的数据 步骤:(与链表的头删操作类似) 判空,防止空链栈的删除操作 记录原栈顶元素的地址....);//释放原栈顶空间 } 2.4 判空(判断"栈"是否为空) 链栈(不带头版本的)的初始状态是栈顶指针指向NULL. bool STEmpty(SLStackNode* ps)//判断是否为空栈 {

    30920

    C语言函数的栈帧详解

    一、栈 简单来说栈的主要特点有: 一个限定表尾进行删除(出栈)和插入(入栈)操作的线性表,其过程类似与压子弹与退子弹(后进先出)。...引用百度百科:C语言中,每个栈帧对应着一个未运行完的函数。栈帧中保存了该函数的返回地址和局部变量。从这句话中,可以提炼以下几点信息: 栈帧是一块因函数运行而临时开辟的空间。...每调用一次函数便会创建一个独立栈帧。 栈帧中存放的是函数中的必要信息,如局部变量、函数传参、返回值等。 当函数运行完毕栈帧将会销毁。 ​ 下面进入主题,图解函数栈帧的创建与销毁过程。...在函数栈帧、局部变量创建完毕后,进行Add()函数运算过程: PLAINTEXT c = a + b; 00AA13E5 mov eax,dword ptr [ebp+8] 00AA13E8...3.3.4 函数返回 PLAINTEXT return c; 00AA13EE mov eax,dword ptr [ebp-8] 将返回值传递至寄存器eax中,因此在函数调用结束函数栈帧被销毁时

    2.2K20

    C语言括号匹配(栈括号匹配c语言)

    大家好,又见面了,我是你们的朋友全栈君。 给定一串字符,不超过100个字符,可能包括括号、数字、字母、标点符号、空格,编程检查这一串字符中的( ) ,[ ],{ }是否匹配。...如果遇到左括号,就入栈,如果遇到一个右括号,就与栈顶元素比较,如果匹配,出栈,就继续重复操作,直到字符串没有了。期间一旦出现不匹配的括号对就直接输出no ,如果栈空了,说明匹配了,就输出yes。...int top=0;//初始化栈,栈为空,栈顶top=0; char s[200];//存放字符串。...for(i=0;i的字符。 { if(left(s[i])==1)//如果是左括号入栈,同时栈顶向上移动。...因为不是在for循环中结束,说明都匹配成功了,但会出现特殊情况比如((()),令栈不为空。所以是否括号匹配成功不仅要判断是否右括号都有左括号使其匹配,还需要判断栈是否为空。

    2.7K20

    洛谷 || 栈(C语言)

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

    1.3K30

    全栈必备 :C语言基础

    在《全栈的技术栈设想》中埋下了4种编程语言的伏笔,已经兑现了Javacript,Python和Java, 本想将C/C++一并整理,但涉及面向对象等设计技术,最终还是C 梳理一下,从0到1吧。 ?...数据结构 C语言为用户提供了丰富的数据结构,还允许用户自定义复杂的数据结构。...在使用内存时,申请与释放要配对,本着谁申请,谁释放的原则,释放后,要把指针置空。...编译 C语言的编译过程有预编译——>语法分析——>代码生成——>优化——>汇编——>连接。预编译器完成宏替换,词法分析,并创建符号表。语法分析包含了语义分析,创建语法树。...关于这部分代码对于开发者不可见,属于C标准运行时的一部分。 函数在调用和被调用过程中,都伴随着入栈和出栈,因此栈发挥着重要作用。函数的局部变量、参数、返回值都存在栈区中。

    1.2K30

    C 语言代码

    以下是一个较为复杂的 C 语言代码示例,展示了如何使用指针和动态内存分配来实现一个简单的字符串操作库: #include #include #include...destroyString(str2); destroyString(concatenated); destroyString(copied); return 0; } 上述代码中...我们实现了以下几个字符串操作函数: createString:用于创建一个新的字符串对象,并将字符串内容复制到动态分配的内存中。...最后,我们释放了所分配的内存,避免内存泄漏。 请注意,这只是一个相对复杂的示例代码,演示了如何使用指针和动态内存分配来操作字符串。...在实际编写代码时,应根据具体需求选择合适的字符串处理库或者使用已有的标准库函数来处理字符串。

    17140

    c语言中的堆、栈和内存映射

    Code Area(代码区):程序代码指令、常量字符串,只可读。 Static Area(静态区):存放全局变量/常量、静态变量/常量。...该区域的大小在程序一加载进内存的时候就已固定,但是静态变量的值是可以改的。 Heap(堆):由程序员控制,使用malloc/free来操作。 Stack(栈):预先设定大小,自动分配与释放。 ?...栈(stack)的实现原理 ? int abc(int a, int b)   //注意:c语言的形参是从右到左入栈的,b先入栈,a后入栈;a先出栈,b后出栈。...{ } 因为c语言是底层语言,包括操作系统本身就是用c语言写的,所以呢,很多时候是这样的:用c语言来写一个库,再用其他语言来调用。 但是呢,不能保证所有的语言都是从右到左入栈的。...所以其他语言在调用c语言写的库的时候,要遵循c语言的规范。 例子3 ?

    1.8K11

    【C语言笔记】函数参数压栈的顺序?

    按照日常习惯来看,C语言的函数参数压栈顺序是从左到右吧?但是事实却是相反的,C语言函数参数压栈顺序是从右到左的。..., &c = 0x61fef8 我们知道,栈是向下生长的,即从高地址向低地址的方向分配内存。...由程序输出结果可知,变量c的值首先存储在高地址,其次是b,最后低地址保存a。即函数的参数压栈的顺序是从右到左。 为什么是从右到左呢?...那么,其参数的个数是如何确定的呢,靠的就是format,如果format首先被压入栈中,就无法知道还有多少个参数还没入栈了;所以,format应该最后入栈,才能确定参数的个数,也即符合参数入栈顺序为“从右到左...以上就是关于函数参数压栈顺序的总结,如有错误欢迎指出! ----

    3.9K20
    领券