op

栈实现中缀转后缀,并用逆波兰方式计算

眉间皱痕 提交于 2020-03-10 15:07:57
stack.js class Stack { constructor ( ) { // dataStore 保存所有数据 this . dataStore = [ ] ; // top 指示可以添加数据的“位置” this . top = 0 ; } // 当然定义栈自己的push 方法,并让顶指针加一 push ( elem ) { this . dataStore [ this . top ++ ] = elem ; } // 返回最顶部的值 peek ( ) { return this . dataStore [ this . top - 1 ] } // 出栈一个元素,即最顶部的值。并让指针减一,注意是先用后减 pop ( ) { return this . dataStore [ -- this . top ] } // 因为无论添加值、访问值、还是出栈值,都是根据this.top // 就像数组清空,直接令length=0 clear ( ) { this . top = 0 } length ( ) { return this . top ; } } 中缀转后缀 const Stack = require ( './stack.js' ) /** * 传入一个字符串类型的计算式 * @param {*} op */ function converted ( op )

洛谷P1111 修复公路

匿名 (未验证) 提交于 2019-12-02 23:47:01
一个结构体存储操作,另外一个存储节点,操作按时间排序并遍历即可。 #include<bits/stdc++.h> using namespace std; typedef struct { int vertex,next,time; }OP;OP op[100010]; typedef struct{ int parent; int child; }NODE; NODE nodes[5000]; int n,m; bool cmp(OP n1,OP n2) { return n1.time<n2.time; } int find(int key) { if(nodes[key].parent!=key) return nodes[key].parent=find(nodes[key].parent); return nodes[key].parent; } int main() { cin>>n>>m; for(int i=1;i<=n;i++) { nodes[i].child=1; nodes[i].parent=i; } int cnt=0; while(m--) { cin>>op[cnt].vertex>>op[cnt].next>>op[cnt].time; cnt++; } sort(op,op+cnt,cmp); // for(int i=0;i<cnt;i++)

MongoDB oplog 深入剖析

匿名 (未验证) 提交于 2019-12-02 23:41:02
为什么80%的码农都做不了架构师?>>> MongoDB 的Replication是通过一个日志来存储写操作的,这个日志就叫做oplog。 在默认情况下,oplog分配的是5%的空闲磁盘空间。通常而言,这是一种合理的设置。可以通过mongod --oplogSize来改变oplog的日志大小。 oplog是capped collection,因为oplog的特点(不能太多把磁盘填满了,固定大小)需要,MongoDB才发明了capped collection(the oplog is actually the reason capped collections were invented). oplog的位置 oplog在local库: master/slave 架构下 local.oplog.$main; replica sets 架构下: local.oplog.rs sharding 架构下,mongos下不能查看oplog,可到每一片去看。 mongos> use local switched to db local mongos> show collections Thu Mar 28 11:37:11 uncaught exception: error: { "$err" : "can't use 'local' database through mongos",

前端优化--创建文档碎片(document.createDocumentFragment())

匿名 (未验证) 提交于 2019-12-02 21:53:52
for(var i=0;i<5;i++) { var op = document.createElement("span"); var oText = document.createTextNode(i); op.appendChild(oText); document.body.appendChild(op); } 当然,你也可以建个新的节点,比如说div,先将oP添加到div上,然后再将div添加到body中.但这样要在body中多添加一个<div></div>.但文档碎片不会产生这种节点. var oDiv = document.createElement("div"); for(var i=0;i<10000;i++) { var op = document.createElement("span"); var oText = document.createTextNode(i); op.appendChild(oText); oDiv.appendChild(op); } document.body.appendChild(oDiv); 代码如下: //先创建文档碎片 var oFragmeng = document.createDocumentFragment(); for(var i=0;i<10000;i++) { var op = document

C++ 类学习笔记

混江龙づ霸主 提交于 2019-11-30 19:56:12
类与封装的概念: 1、类:   类的实现、类的使用。   当使用类的时候,不需要关心实现的细节。当创建类的时候,才需要考虑到内部具体的实现细节。 2、类的封装:   成员变量,C++用于表示属性的变量。   成员函数,C++中用于表示类的行为的函数。 3、pubic、private 关键字。(使得变量和函数有了访问权限)   pubic:成员 变量 和成员 函数 。可以在类的 外部被访问 。   private:成员 变量 和成员函数,只可以在 内部被访问 。 4、类成员的作用域:   类成员的作用域只在类的内部,外部无法直接访问。(可以通过定义对象的方式进行访问)   成员函数可以直接访问成员变量和调用成员函数。   类的外部可以通过类变量访问public成员。   类的作用域与访问权限无关 5、struct 与class 不同之处   C++中 struct 定义的类中所有的成员默认为 public       class 定义的类中左右的成员默认为 private 实验:写出一个四则运算的类。   1、 calculate.h(头文件,用于定义类)      #ifndef __CALCULATE_H #define __CALCULATE_H class calculate { private: char symbol; double val_laft; double

用栈求算术表达式的值

青春壹個敷衍的年華 提交于 2019-11-28 16:17:33
题目:1 将中缀表达式转换为后缀表达式 2 求后缀表达式的值 #include<stdio.h> #define MaxSize 100 struct { char data[MaxSize]; int top; //栈顶指针 }op; //定义运算符栈 struct { float data[MaxSize]; int top; }st; //定义数值栈 void trans(char exp[],char postexp[]) { int i = 0; int j = 0; char ch; op.top = -1; //栈顶指针初始化为-1 ch = exp[i]; i++; while (ch != '\0') { switch (ch) { case '(': //判定为左括号 直接入栈 op.top++; op.data[op.top] = ch; break; case ')': while (op.data[op.top] != '(') { postexp[j] = op.data[op.top]; op.top--; j++; } op.top--; //左括号也出栈 但不输出 break; case '+': case '-': //为 + 或者 - 时候,优先级不大于栈顶任何运算符的优先级 直到 ) while (op.top != -1 && op

栈的应用

回眸只為那壹抹淺笑 提交于 2019-11-28 07:35:26
栈 属于 一种最基本的数据结构 具体的 维护一个一个序列 且这个序列中的元素满足先进后出 或者 后进先出类似于火车进站 可以想象一下。 而单调的栈 具有一些性质: 1 单调栈里的元素具有单调性 2 元素被加入到栈前 会在栈顶把破坏栈单调性的元素都删除。 3 使用单调栈可以找到元素向左遍历第一个比他小的元素 也可以找到元素向左遍历第一个比他大的元素。(显然 这是单调性的应用吧) 当然 也有一些其他栈的变形 辅助贪心 如 LIS 维护数列的性质 :可持久化单调栈 什么的。还有一些比较有意思的是 对顶栈维护整个序列。栈还和卡特兰数有关 这些坑都填一下吧。 对顶栈:LINK: HDU4699 题目意思让你维护一个数列和一个光标 有多个操作 模拟每个操作 并输出对应结果。Q<=1e6 I x 在光标位置插入一个x 插入完后光标移动到x之后 D 删除光标前一个数字 L 光标向左移 R 光标向右移 Q k 在k之前的最大前缀和 且k不超过当前光标位置。 这个题目很有意思由于动态的插入数字我们可以考虑BST 或者 treap splay 。我乍一看是splay 维护区间位置尽管这样做也可以但是对于Q k 的询问呢?设f[i]表示i之前的前缀最大值 s[i]表示前i个数的和。 那么显然有 s[i]+=s[i-1] f[i]=max(f[i-1].s[i]);