首页
学习
活动
专区
工具
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}; //假定序列也是

3K41

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 ,两个五的参数读入读反了,(都怪我没读题呀~) 判断合法性用一个模拟堆栈就行了

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

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

20520

洛谷 || C语言

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

1.2K30

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.8K40

顺序

一个的入序列是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能,所以如果序列前两个是

95160

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.3K20

必备 :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

1.9K20

堆栈操作合法性 C++

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

16130

【线性表】之(C语言)

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

63710

C语言-用实现表达式求值(顺序)

函数目录: 的基本操作: 创建并初始化(create) 入(push_in) (pop_out) 取顶元素(GetTop) 优先级函数(Precede) 求值函数(Operate) 判断操作符函数...但是建立两个不同类型的,需要在代码中将的基本操作函数(建立,初始化,入,取顶元素)写两遍,然后在存取操作数和运算符的时候分别调用对应的操作,过程过于麻烦,代码也过于繁琐,不如数字来的简洁明了...\n"); exit(0); } } } int In(char c) //判断是否为运算符,是运算符返回1,若不是返回0 { switch(c)...运算符 dataType a,b,theta,x,X1,X2; /* a,b,theta用于Operate函数 X用于存放多余的字符 X1,X2用于归并 */ char ch; //读取字符的变量...evaluateExpression(exp); printf("\n"); printf("%s%d\n",exp,result); return 0; } 执行结果: ---- 参考: 数据结构(C语言第二版

1.4K10
领券