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

C语言数据结构与算法--简单实现栈的出栈与入栈

(三)栈的链式表示时元素压入、弹出 算法实现思路 1.栈的线性链表的压入算法 压入算法过程为:定义新的结点 p、修改新结 点的指针(指向原栈顶结点 top)、给新结点 p 赋 值为 x、...\n"); return 1; // 如果创建栈失败,返回1 } printf("请输入入栈个数:"); scanf("%d", &n); // 读取入栈的元素个数...printf("入栈后:\n"); Print_function(p); // 打印当前栈的状态 } printf("请输入出栈个数:");...\n"); return 1; // 如果创建栈失败,返回1 } printf("请输入入栈个数:"); scanf("%d", &n); // 读取入栈的元素个数...printf("入栈后:\n"); Print_function(p); // 打印当前栈的状态 } printf("请输入出栈个数:");

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

    C语言共享栈

    栈的操作我相信大家都应该了解了弄懂了, 如果没弄懂希望可以去再去看看相关的资料,我博客中的C语言中缀表达式转后缀表达式中涉及到了一下栈的基本操作,有兴趣的朋友也可以看看。...1#栈进行操作,入栈操作和顺序栈的入栈操作并无太大不同。...选定之后进行入栈操作。这里应该注意此共享栈是否已满,如果已满则不能进行入栈操作。...如若入栈成功则返回0;入栈失败则返回-1; 出栈时,先确定栈号是否合法,然后查看是对0#栈还是1#栈进行操作,出栈操作和顺序栈的出栈操作并无太大不同。 选定之后进行出栈操作。...出栈和入栈一样,也需要选择出栈的具体是哪个栈 int Pop(SqStack *s, ElemType* x, int n) { if (n 1) { printf("The

    1.2K30

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

    个人主页: :✨✨✨初阶牛✨✨✨ 推荐专栏: C语言进阶 个人信条: 知行合一 本篇简介:>:讲解用c语言实现:“数据结构之"栈”,分别从"顺序栈"和"链栈"的接口讲解....栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。 出栈:栈的删除操作叫做出栈。...出数据也在栈顶 "栈"的常见接口实现 InitST:初始化栈 STPush:入栈 STPop:出栈 STEmpty:判空(判断是否为空栈) PrintSTTop:打印栈顶元素 STTop:返回栈顶元素...同时为了提高效率: 链表 分析 尾插,尾删 效率低,因为需要找尾巴 头插,头插 效率高,只需要改变头指针的指向 综上:我们利用不带头单链表的"头插(入栈)和头删(出栈)"来完成栈的各项基本操作.并且...* SLStack = InitStack(); 2.2 入栈(压栈,向"栈"中插入数据) 步骤:(与单链表的头插类似) 创建一个新节点.

    30920

    ​一个栈的入栈序列为ABCDEF,则不可能的出栈序列是?

    今日分享一道关于栈的经典题目,笔者在秋招过程中考过两次。...题目: 一个栈的入栈序列为ABCDEF,则不可能的出栈序列是(D) A、DEFCBA B、DCEFBA C、FEDCBA D、FECDBA E、ABCDEF F、ADCBFE 分析: 该题主要是考虑栈的核心思想是先进后出...,并且需要注意入栈和出栈的顺序是未知的,例如你可以先入栈ABCD,然后出栈D,然后入栈E,出栈E,入栈F,出栈F,然后CBA依次出栈,也就是A选项的情况。...这里有一规律可记: 任何出栈的元素后面出栈的元素必须满足以下三点: 1、在原序列中相对位置比它小的,必须是逆序; 2、在原序列中相对位置比它大的,顺序没有要求; 3、以上两点可以间插进行。...我们再看选项D的出栈顺序FECDBA,明显出栈元素F后面的元素C和D不满足上面规律1,所以选项D是错误的,其它答案都是满足的。

    1.6K20

    C语言栈的实现

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

    3.9K40

    洛谷 || 栈(C语言)

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

    1.3K30

    出栈顺序

    一个栈的入栈序列是a,b,c,d,e则栈的不可能的输出序列是:() A edcbd B decba C dceab D abcde       ...知道这个意思了以后,就要明确这个问题的矛盾根本所在:第一次出栈d,说明什么?说明a,b,c一定早已入栈(入栈顺序决定的)。...那么在出栈d以后,a,b,c的出栈顺序一定是c,b,a,而不用理会中间穿插着出栈了d后面的字符(因为可以再入栈,再出栈嘛)。...所以立即选中C,不用犹豫,理由简单:d出栈了,abc一定已经入栈,那么abc只能以cba的顺序出栈,C不符合,OK!      ...例如:入栈序列:1 2 3 4 5 6,出栈序列,4,3,5,2,6,1 算法思想,1:根据出栈序列,入栈,直到其栈顶等于出栈元素,栈s:4,3,2,1                  2:栈顶与出栈序列相同出栈

    1K60

    C语言入坑指南-数组之谜

    前言 在C语言中,数组和指针似乎总是“暧昧不清”,有时候很容易把它们混淆。本文就来理一理数组和指针之间到底有哪些异同。 数组回顾 在分析之前,我们不妨回顾一下数组的知识。...但C99中引入了变长数组,允许数组的维度是表达式 ,但在数组分配内存时,其表达式的值可以被求出。...数组和指针不相等 考虑下面的声明: int c[4];//假设int占4字节 int *d; 对于上面的声明,编译器会给c预留内存空间4*4字节,并且数组名代表着指向数组第一个元素的指针。...所以此时有下面的操作: c[3]; //合法 *(c+3); //合法 *d; //不合法,d指向了内存中不确定位置 c++; //不合法,一维数组名是指针常量...字符串常量存储在只读区,因此有下面的操作: c[0] = 'H'; //合法,可修改数组内容 *d = 'H'; //不合法,字符串常量内容不可更改 d[0] = 'H' //不合法

    77130

    【Android UI】Canvas 画布 ① ( Canvas 状态栈 | Canvas 状态栈入栈与出栈 | 获取 Canvas 状态栈容量 | Canvas 状态栈原点数据 )

    文章目录 一、Canvas 状态栈入栈与出栈 二、获取 Canvas 状态栈容量 三、Canvas 状态栈原点数据 Canvas 状态保存机制 中 , 存在两个栈结构 , 分别是 状态栈 和 图层栈 ;...其中 图层栈 又称为 Layer 栈 ; 一、Canvas 状态栈入栈与出栈 ---- 状态栈 用于保存 绘图坐标系 信息 , 每次调用 Canvas#save() 方法 , 都会向 状态栈 中存储一份坐标数据..., 即 入栈操作 , 状态栈 是 后入先出 的栈结构 数据 ; 每次调用 Canvas#restore() 方法 , 就是将 状态栈 栈顶的坐标数据 , 进行 出栈操作 ; Canvas#save()...---- Canvas 的 状态栈 中, 默认存在一个数据 , 就是 原点 坐标数据 , 也就是即使不调用 Canvas#save() 方法 , 直接调用 Canvas#getSaveCount()...方法获取的值是 1 ; 如果没有调用 Canvas#save() 方法 , 直接调用 Canvas#restore() 方法 , 就会将 状态栈 中的 原点坐标数据 出栈 , 该操作会导致程序崩溃 ,

    70230

    栈的压入、弹出序列 栈的压入、弹出序列

    题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。...例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。...(注意:这两个序列的长度是相等的) 解题思路 模拟堆栈操作的过程,将原数列依次压栈,把栈顶元素与所给出栈队列相比,如果相同则出栈,如果不同则继续压栈,直到原数列中所有数字压栈完毕。...最后,检测栈中是否为空,若空,说明出栈队列可由原数列进行栈操作得到。否则,说明出栈队列不能由原数列进行栈操作得到。

    56320
    领券