首页
学习
活动
专区
工具
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]也是一个合法序列...[3,4,5,1,2,9,8,7,6]就是一个非法序列 判断方法有两种,一种是对每一个值,其后所有小于它数是一个降序排列。...另一种是模拟入,对序列中每一个数值,如果它当前已经在顶,则;如果不在,那么从入序列中取出下一个放入中;如果需要入时入序列已空,则这就是一个非法序列。...static boolean stackOrder(int[] nums){ int[] origin=new int[]{1,2,3,4,5,6,7,8,9}; //假定序列也是

2.9K41

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。...5 7 5 ,两个五参数读入读反了,(都怪我没读题呀~) 判断合法性用一个模拟堆栈就行了 #include using namespace std; int a,b,c,n,zhan

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

C语言实现

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

3.8K40

C语言共享

操作我相信大家都应该了解了弄懂了, 如果没弄懂希望可以去再去看看相关资料,我博客中C语言中缀表达式转后缀表达式中涉及到了一下基本操作,有兴趣朋友也可以看看。...所谓共享,就是两个共同使用一块内存空间,其中一个底作为另一个顶,反之亦然。...如若入成功则返回0;入失败则返回-1; 时,先确定号是否合法,然后查看是对0#还是1#进行操作,操作和顺序操作并无太大不同。 选定之后进行操作。...如果成功返回0;失败返回-1; 添加适当头文件,定义一个数据结构, 共享也是,只不过有点特殊,在这里我们还是需要添加适当头文件和定义恰当数据结构 #include<stdio.h...和入一样,也需要选择具体是哪个 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 “”,删除""中数据 步骤:(与链表头删操作类似) 判空,防止空链删除操作 记录原顶元素地址.

19920

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语言括号匹配(括号匹配c语言)

大家好,又见面了,我是你们朋友全君。 给定一串字符,不超过100个字符,可能包括括号、数字、字母、标点符号、空格,编程检查这一串字符中( ) ,[ ],{ }是否匹配。...如果遇到左括号,就入,如果遇到一个右括号,就与顶元素比较,如果匹配,,就继续重复操作,直到字符串没有了。期间一旦出现不匹配括号对就直接输出no ,如果空了,说明匹配了,就输出yes。...(char c)//判断是否为右括号,是返回1,否返回0. { if(c==')'||c=='}'||c==']') { return 1;...for(i=0;i<l;i++)//遍历每个字符串中字符。 { if(left(s[i])==1)//如果是左括号入,同时顶向上移动。...{ if(check(stack[top-1],s[i]))//如果匹配,那么顶下移,继续执行下一次新for循环。

2.5K20

洛谷 || C语言

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

1.2K30

合法序列

poj 1363 Rails 已知从1至n数字序列,按顺序入,每个数字入后即可出,也可在中 停留,等待后面的数字入后,该数字再出,求该数字序列 序列是否合法?...算法设计:使用与队列模拟入过程 同时使用一个队列与一个来解决该问题,设队列order与为S。队列order存储待判断是否合法 序列,使用S用来模拟出与入过程。...1.按照1-n顺序,将元素push进入S中: 2.每push一个元素,即检查顶S.top()是否与队列头部元素order.front()相同。...3.如果相同则同时弹出顶元素与队列头部元素,直到空或顶与队列头部元素不同。 若最终为空,则说明序列合法,否则不合法。...int n = order.size();//n为序列长度,将1-n按顺序入 for(int i = 1; 1<= n;i++){ s.push(i);//将i入

1.1K20

单调总结_进算法思想

单调是一种特殊,特殊之处在于元素都保持一个单调性。...假设下图是一个内元素排列情况(单调递增): 此时插入情况有两种: (1).插入元素大于顶元素 当插入7时,因7 > 6,满足单调递增条件,故可以直接加入 此时: (2...).插入元素小于顶元素 当插入3时,为了满足单调递增性质,需要先将4,6弹出,再插入,此时: 功能 以上内容和图我相信是非常容易理解,但单调作用和功能并不能得到很好体现,故下面将用文字...7大于顶元素对应元素3,故 L[3] = S.top() = 2 (顶元素值) 然后将元素7对应下标3存入 此时中情况: (4).i = 4时,为保持单调递增性质,应将顶元素...总结:一个元素向左遍历第一个比它小位置就是将它插入单调顶元素值,若为空,则说明不存在这么一个数。

28330

必备 :C语言基础

在《全技术设想》中埋下了4种编程语言伏笔,已经兑现了Javacript,Python和Java, 本想将C/C++一并整理,但涉及面向对象等设计技术,最终还是C 梳理一下,从0到1吧。 ?...数据结构 C语言为用户提供了丰富数据结构,还允许用户自定义复杂数据结构。...C标准库有各种不同实现,比如最著名glibc, 用于嵌入式LinuxuClibc,还有ARM自己C语言标准库等。...关于这部分代码对于开发者不可见,属于C标准运行时一部分。 函数在调用和被调用过程中,都伴随着入,因此发挥着重要作用。函数局部变量、参数、返回值都存在区中。...C语言被一些人誉为“上帝语言”,它几乎奠定了软件产业基础,还创造了很多其它语言。但是,鉴于水平有限,难以举重若轻,本文中基础描述只是老码农碎碎念罢了。

1.1K30

介绍以及使用数组模拟

(stack) 介绍 (1)是一个先进后有序列表 (2)是限制线性表中元素插入和删除只能在线性表同一端进行一种特殊线性表。...(3)根据定义可知,最先放入元素在底,最后放入元素在顶,而删除元素时正好相反,最后放入元素最先删除,最先放入元素最后删除。...---- 使用数组模拟 思路分析 (1)定义一个 top 表示顶,初始化为 -1 (2)入操作:stack[++top] = data; (3)操作:int value = stack[top...] = value; }   //-pop,将数据返回 public int pop() { //先判断是否为空 if(isEmpty(...int res = arrayStack.pop();//抛出异常 System.out.println("数据为

15610

c语言堆、和内存映射

该区域大小在程序一加载进内存时候就已固定,但是静态变量值是可以改。 Heap(堆):由程序员控制,使用malloc/free来操作。 Stack():预先设定大小,自动分配与释放。 ?...(stack)实现原理 ? int abc(int a, int b)   //注意:c语言形参是从右到左入,b先入,a后入;a先出,b后。...{ } 因为c语言是底层语言,包括操作系统本身就是用c语言,所以呢,很多时候是这样:用c语言来写一个库,再用其他语言来调用。 但是呢,不能保证所有的语言都是从右到左入。...所以其他语言在调用c语言时候,要遵循c语言规范。 例子3 ?

1.7K11

C语言笔记】函数参数压顺序?

按照日常习惯来看,C语言函数参数压顺序是从左到右吧?但是事实却是相反C语言函数参数压顺序是从右到左。..., &c = 0x61fef8 我们知道,是向下生长,即从高地址向低地址方向分配内存。...由程序输出结果可知,变量c值首先存储在高地址,其次是b,最后低地址保存a。即函数参数压顺序是从右到左。 为什么是从右到左呢?...那么,其参数个数是如何确定呢,靠就是format,如果format首先被压入中,就无法知道还有多少个参数还没入了;所以,format应该最后入,才能确定参数个数,也即符合参数入顺序为“从右到左...以上就是关于函数参数压顺序总结,如有错误欢迎指出! ----

3.5K20
领券