首页
学习
活动
专区
工具
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(

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

单调总结_进的算法思想

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

28430

c语言实现(顺序,链)

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

20520

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

顺序

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

95060

​一个序列为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.4K20

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

62530

洛谷 || C语言

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

1.2K30

C语言的实现

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

3.8K40

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

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

52620

关于函数参数的思考(函数调用约定,顺序)

由于这种约定,C调用约定允许函数的参数的个数是不固定的,这也是C语言的一大特色。...,然后再完成其他的运算并将结果。...因为i自增之后无法提供的值,所以另外开辟了一个内存单元dword ptr [ebp-0D0h]来存放第一个的表达式的值。...接着计算—i的值,自减运算完成之后,编译器认为i的值可以直接作为参数,所以并没有开辟别的内存单元存放这一个参数的值。 再接下来计算++i情形跟计算- -i类似。...这些操作完成之后,分别将dword ptr [ebp-0D0h]处的值、最终的ii。再三次调用cout.operator<<函数将它们输出。所以程序的最终结果是11,11,10。

2.4K31

打卡1】:的压、弹出序列

【题目】 输入两个整数数组序列,第一个序列表示的压顺序,请判断第二个序列是否可能为该的弹出顺序。假设压的所有数字均不相等。...具体的步骤是这样的:我们先创建一个辅助的 stack。 1、让序列 arr1 的元素,每一个元素,都来判断该元素是否与 arr2 的数组相等。...2、如果相等,则该元素,指向 arr2 的下标向由移动一位,并且继续拿 stack 中剩下的元素与 arr2 中比较是否相等,如果一直相等的话,就一直重复这个步骤,直到 stack 为空。...我举个例子吧: 1,2,3,4,5 4,5,3,2,1 首先1辅助,此时顶1≠4,继续2 此时顶2≠4,继续3 此时顶3≠4,继续4 此时顶4=4,4,弹出序列向后一位...,此时为5,,辅助里面是1,2,3 此时顶3≠5,继续5 此时顶5=5,5,弹出序列向后一位,此时为3,,辅助里面是1,2,3 ….

41530
领券