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

的介绍以及使用数组模拟

(stack) 介绍 (1)是一个先进后的有序列表 (2)是限制线性表中元素的插入删除只能在线性表的同一端进行的一种特殊线性表。...允许插入删除的一端,为变化的一端,称为顶(Top),另一端为固定的一端,称为底(Bottom)。...---- 使用数组模拟 思路分析 (1)定义一个 top 表示顶,初始化为 -1 (2)的操作:stack[++top] = data; (3)的操作:int value = stack[top...return top == -1; } } //-push public void push(int value) { //先判断是否为满...] = value; }   //-pop,将顶的数据返回 public int pop() { //先判断是否为空 if(isEmpty(

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

    单调总结_进的算法思想

    ,但是只用到它的一端,利用它可以用来解决一些ACM/ICPCOI的题目,如RQNOJ 的诺诺的队列等。...).插入的元素小于顶元素 当插入3时,为了满足单调递增的性质,需要先将顶的4,6弹出,再插入,此时: 功能 以上的内容图我相信是非常容易理解的,但单调的作用功能并不能得到很好的体现,故下面将用文字...+ 图示的形式来展示单调的作用 先上结论: 利用单调,可以找到从左/右遍历第一个比它小/大的元素的位置 举个例子: 假设有一个单调递增的 S一组数列: a : 5 3 7 4 用数组...所以用一个树状数组维护一个区间即可。...另外注意全部为一个值最大值为0的情况。

    32330

    c语言实现(顺序,链)

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

    29020

    C语言共享

    的操作我相信大家都应该了解了弄懂了, 如果没弄懂希望可以去再去看看相关的资料,我博客中的C语言中缀表达式转后缀表达式中涉及到了一下的基本操作,有兴趣的朋友也可以看看。...如若成功则返回0;失败则返回-1; 时,先确定号是否合法,然后查看是对0#还是1#进行操作,操作和顺序操作并无太大不同。 选定之后进行操作。...如果成功返回0;失败返回-1; 添加适当的头文件,定义一个数据结构, 共享也是,只不过有点特殊,在这里我们还是需要添加适当的头文件定义恰当的数据结构 #includetop[1] = MaxSize; } 操作 在的时候,我们需要选择的是两个中的哪一个,我们这里用01来区分 int Push(SqStack*s, ElemType x, int...一样,也需要选择的具体是哪个 int Pop(SqStack *s, ElemType* x, int n) { if (n 1) { printf("The

    1.2K30

    ​一个序列为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后面的元素CD不满足上面规律1,所以选项D是错误的,其它答案都是满足的。

    1.6K20

    顺序

    之前参加过华北计算机研究所优酷土豆的笔试,都考到顺序,之前数据结构学的不到位,遇到这类题时,还着实把我愣了一会,现在总结下,省得以后再遇到这类问题,也希望能给遇到同样问题的兄弟们一个参考。      ...一个序列是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!

    99560

    【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() 方法 , 就会将 状态 中的 原点坐标数据 , 该操作会导致程序崩溃 ,

    69030

    洛谷 || 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语言版本的及其主要操作就完成了,这也是我第一次写结构

    3.9K40

    【数据结构】线性表(七)堆栈:链式及其基本操作(初始化、判空、、存取顶元素、清空);顺序与链式之比较

    定义   堆栈(简称)是一种操作受限的线性表,只允许在表的同一端进行插入删除操作,且这些操作是按后进先出的原则进行的。进行插入删除的一端被称为顶,另一端被称为底。当中无元素时称其为空。...、判空、判满、、存取顶元素、清空) 三、链式   用数组实现的效率很高,但若同时使用多个,顺序将浪费很多空间。... int pop(Stack* stack) { if (isEmpty(stack)) { printf("Stack is empty....接下来,通过连续调用 push 函数,将值 10、20 30 压堆栈。 使用 peek 函数查看堆栈的顶部元素。 使用 pop 函数两次弹出堆栈的元素。...在时间复杂性上,对于针对顶的基本操作(压、弹出顶元素存取),容易看出,顺序链式的时间复杂性均为O(1) 。

    15610

    的压、弹出序列 的压、弹出序列

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

    56020

    队列深入浅

    的概念及使用: 1. 概念: 一种特殊的线性表,其只允许在固定的一端进行插入删除元素操作。进行数据插入删除操作的一端称为 顶,另一端称为底。中的数据元素遵守先进后的原则。...压的插入操作叫做进/压/的 删除操作叫做出 。 压出入数据都在顶。...(s.peek()); // 获取顶元素---> 4 s.pop(); // 4中剩余1 2 3,顶元素为3 System.out.println(s.pop()); // 3中剩余...、弹出序列:的压、弹出序列_牛客题霸_牛客网 理解图: 代码: //的压、弹出序列 public boolean IsPopOrder (int[] pushV, int[] popV)...用队列实现 :. - 力扣(LeetCode) 图解:主要就是定义两个队列做到 "先进后",这里注意操作,写peek方法时,定义一个中间变量这些细节,如图: 代码: class MyStack

    9710
    领券