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

判断顺序合法性

顺序合法性是指给定一系列元素,如1 - N,按照从小到大的方式入,每个元素的时机不定。题目给定一个顺序,我们来判断这个顺序有没有可能发生。...比如对[1,2,3,4,5,6,7,8,9]: [1,2,3,4,5,6,7,8,9]是一个合法序列 [9,8,7,6,5,4,3,2,1]也是一个合法序列 [4,5,3,2,7,6,1,8,9]也是一个合法序列...另一种是模拟入,对序列中每一个数值,如果它当前已经在顶,则;如果不在,那么从入序列中取出下一个放入中;如果需要入时入序列已空,则这就是一个非法序列。...static boolean stackOrder(int[] nums){ int[] origin=new int[]{1,2,3,4,5,6,7,8,9}; //假定序列也是

3.2K41

2-10 序列的合法性 (20 分)

本文链接:https://blog.csdn.net/shiliang97/article/details/101147545 2-10 序列的合法性 (20 分) 给定一个最大容量为 M 的堆栈...,将 N 个数字按 1, 2, 3, ..., N 的顺序入,允许按任何顺序,则哪些数字序列是不可能得到的?...输入格式: 输入第一行给出 3 个不超过 1000 的正整数:M(堆栈最大容量)、N(入元素个数)、K(待检查的序列个数)。最后 K 行,每行给出 N 个数字的序列。...输出格式: 对每一行序列,如果其的确是有可能得到的合法序列,就在一行中输出YES,否则输出NO。...2 输出样例: YES NO NO YES NO 姊妹题2-9 彩虹瓶 (20 分) 找了好几个小时bug都没找到,原来是测试样例里的 5 7 5 ,两个五的参数读入读反了,(都怪我没读题呀~) 判断合法性用一个模拟堆栈就行了

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

    C语言共享

    的操作我相信大家都应该了解了弄懂了, 如果没弄懂希望可以去再去看看相关的资料,我博客中的C语言中缀表达式转后缀表达式中涉及到了一下的基本操作,有兴趣的朋友也可以看看。...如若入成功则返回0;入失败则返回-1; 时,先确定号是否合法,然后查看是对0#还是1#进行操作,操作和顺序操作并无太大不同。 选定之后进行操作。...如果成功返回0;失败返回-1; 添加适当的头文件,定义一个数据结构, 共享也是,只不过有点特殊,在这里我们还是需要添加适当的头文件和定义恰当的数据结构 #include<stdio.h...{ case 0:s->data[++s->top[0]] = x; break; case 1:s->data[--s->top[1]] = x; break; } return 0; } 操作...和入一样,也需要选择的具体是哪个 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:返回顶元素...next指针指向原""的顶点 *pps = newnode;//更新顶 } 2.3 “”,删除""中的数据 步骤:(与链表的头删操作类似) 判空,防止空链的删除操作 记录原顶元素的地址....(ST* ps);//返回顶元素 void STDestory(ST* ps);//的销毁 接口实现区( stack.c) #include "stack.h" //初始化 void InitST

    29020

    洛谷 || C语言

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

    1.3K30

    C语言的实现

    因为方便:试想一下我们要判断是否空就只需要判断top是否等于buttom,如果buttom指向底显然就会麻烦许多 下面我们先用C语言来实现一下: 首先我们需要对这个装东西的“盒子”定义,而这个盒子就是...一般有两种:1.让指定数据2.让top指向的数据,注意,如果要让指定的数据,而且如果那个数据在中间,那你就不得不把从top到那个数据的全部节点出,因为是后进先出,而且只允许一段入/...,这里我们讨论把top指向的节点出 这个非常简单,你可能会马上想到 sk->top=sk->top->next; 但是如果再想一下,你虽然完成了,但是出了的那个节点怎么办?...*n=sk->top; sk->top=n->next; delete n; } 就像上面,另还要注意需要考虑是否为空,我没有写 至此,一个C语言版本的及其主要操作就完成了,这也是我第一次写结构...,因为我用C++ stack sk; sk.push(5); //..

    3.9K40

    顺序

    一个的入序列是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!      ...(3)先拿4 3 1 2这个序列来说,4最先出来,说明此时1 2 3(底到顶顺序)还都在中;接下来只有3能,3来后,中为1 2(底到顶顺序);再接下来只有2能,所以如果序列前两个是

    99560

    (用C语言实现)

    1.1 概念与结构 :⼀种特殊的线性表,其只允许在固定的⼀端进行插入和删除元素操作。进行数据插入和删除操作的⼀端称为顶,另⼀端称为底。...中的数据元素遵守后进先出 LIFO(Last In First Out)的原则。 压的插⼊操作叫做进/压/入,入数据在顶。 的删除操作叫做出数据也在顶。...* ps, STDataType x); // void STPop(ST* ps); //取顶元素 STDataType STTop(ST* ps); //获取中有效元素个数 int...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

    8710

    C语言实现顺序

    文章目录 顺序的常规操作 定义顺序结构体 初始化顺序 顺序判满 顺序判空 计算顺序的长度 顺序(Push) 顺序(Pop) 顺序各操作测试 源代码 ?...-- ,后让顶元素 s -> top--; return s -> datas[s -> top]; 顶指针top,指向的是元素的当前位置(初始 top = -1)。...入(Push),,先把 顶指针top 后移 ++ ,后让元素放入中 s -> top++; s -> datas[s -> top] = data; (Pop),先取出顶元素,后让 顶指针...top] = data; s -> top ++; return TRUE; } 顺序(Pop) /* * * s 顺序 */ ElemType Pop(Stack s){...源代码 源代码已上传到 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.1K30

    C语言函数的帧详解

    一、 简单来说的主要特点有: 一个限定表尾进行删除()和插入(入)操作的线性表,其过程类似与压子弹与退子弹(后进先出)。...EBP 存放底指针 汇编指令 用途 mov mov A,B 将数据B移动到A push 压 pop call 函数调用 add 加法 sub 减法 rep 重复 lea 加载有效地址 三...引用百度百科:C语言中,每个帧对应着一个未运行完的函数。帧中保存了该函数的返回地址和局部变量。从这句话中,可以提炼以下几点信息: 帧是一块因函数运行而临时开辟的空间。...在函数帧、局部变量创建完毕后,进行Add()函数运算过程: PLAINTEXT c = a + b; 00AA13E5 mov eax,dword ptr [ebp+8] 00AA13E8...在函数拿到返回值后,开始: PLAINTEXT 00AA13F1 pop edi 00AA13F2 pop esi 00AA13F3 pop

    2.2K20

    堆栈操作合法性 C++

    题目描述 假设以S和X分别表示入操作。如果根据一个仅由S和X构成的序列,对一个空堆栈进行操作,相应操作均可行(如没有出现删除时空)且最后状态也是空,则称该序列是合法的堆栈操作序列。...一般就是遇到S就压,遇到X就需要弹,然后我们来看细节: 上来先判断栈容量是否已经达到最大容量M,这里非常需要注意操作的准确性,M指的是的最大容量,不是序列的长度,50和100根本不用搭理这两个数字...遇到S不管那么多直接压,遇到X先判断是不是空的,因为一般情况下我们的只有S在里面,如果是空的,那么说明肯定不对,直接寄(把S压入,跳出循环),遇到X并且非空,判断顶元素是不是匹配的S,不是就直接寄...最后判断是不是空的,空的说明S都找到了自己的X,不是空的就寄。

    20930

    【线性表】之(C语言)

    ---- 也是线性表,在逻辑上还是挨着放的。 的概念以及结构 :一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。**进行数据插入和删除操作的一端称为顶,另一端称为底。...**中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压:的插入操作叫做进/压/入, 入数据在顶。 :的删除操作叫做出数据也在顶。...(顺序表——【线性表】之顺序表_半生瓜のblog-CSDN博客) 链表实现 数据得找到前一个,这样的话用双向链表更好一些。...总结: ​ 如果用尾插做顶,用双向链表更好。 ​ 如果用单链表实现,就用头去做顶,这样入效率都是O(1)。 ​ 整体来说数组的效率更优一些。...} else { ps->arry = tmp; ps->capacity *= 2; } } ps->arry[ps->top] = x; ps->top++; }

    66410
    领券