top

链式栈

杀马特。学长 韩版系。学妹 提交于 2019-11-27 19:53:23
定义: 栈 是一种 后进先出 的线性表或者说是只允许在表的末端进行插入和删除的线性表。 栈有 顺序栈 (基于数组的存储表示实现)和 链式栈 (基于链表的存储实现)。 这里实现的是链式栈,链式栈的 栈顶 是链表的 表头, 新节点的插入删除均在栈顶(表头)进行。 1 #include<iostream> 2 using namespace std; 3 4 typedef int dataType; 5 6 struct Node //链栈节点 7 { 8 dataType data; //数据域 9 Node *next; //指针域 10 }; 11 12 class LinkedStack 13 { 14 public: 15 LinkedStack(); //构造函数 16 ~LinkedStack(); //析构函数 17 void push(dataType var); //压栈 18 void pop(); //出栈.出栈之前并不判断栈是否已空.需要通过isEmpty()判断 19 dataType getTop(); //取栈顶元素,栈顶无变化.不提前判断栈是否为空 20 bool isEmpty(); //判空.空返回true,反之返回false 21 int getSize(); 22 void makeEmpty(); 23 24 private: 25 Node

表达式的计算

风格不统一 提交于 2019-11-27 16:34:26
引用某本蓝书 解决这道题,首先其实就是两步,1.把中缀转后缀 2.把后缀计算并输出 1. 中缀表达式转后缀表达式 建立一个栈来存储运算符 左括号:进栈 数字:输出 右括号:取栈顶直到左括号,把左括号出栈 运算符:保证优先级的前提下,插入到合适的地方 2.计算后缀表达式 建立一个栈存数 遇到数:进栈 遇到运算符:取栈顶两个数进行计算 大概就是这样了,代码如下: #include<bits/stdc++.h> using namespace std; inline int bj(char op){//^ > */ > +- > ( if(op=='(')return 0; if(op=='+'||op=='-')return 1; if(op=='*'||op=='/')return 2; if(op=='^')return 3; return -1; 防止特殊情况 } inline int calc(char op,int a,int b){//运算 switch(op){//注意先后顺序 case '+':return a+b; case '-':return a-b; case '*':return a*b; case '/':return a/b; case '^':return pow(a,b); } } string st1; inline string change

树链剖分(超详细!!!)

好久不见. 提交于 2019-11-27 16:24:34
一、轻重边剖分的过程 使用两次dfs来实现。剖分过程中要计算如下7个值: father[x]: x在树中的父亲 size[x]: x的子树结点数(子树大小) dep[x]: x在树中的深度 son[x]: x的重儿子,即为重边 top[x]: x所在重路径的顶部结点(深度最小) seg[x]: x在线段树中的位置(下标) rev[x]: 线段树中第x个位置对应的树中结点编号,即rev[seg[x]]=x 第一遍dfs时可以计算前四个值,第二遍dfs可以计算后三个值。而计算seg时,同一条重路径上的点需要按顺序排在连续的一段位置,也就是一段区间。 【代码实现】( 预处理1 ): 【代码实现】( 预处理2 ): 二、树上路径处理: 考虑将一条路径(u,v)拆分为若干条重路径:实际上就是寻找最近公共祖先的过程。考虑暴力的做法,我们会选择u,v中深度较大的点向上走一步,直到u=v。 现在有了重路径,由于我们记录了top和seg,因此我们不需要一步步走。假定top[u]和top[v]不同,那么他们的最近公共祖先可能在其中一条的重路径上,也可能在其他的重路径上,因为LCA显然不可能在top深度较大的那条重路径上,所以我们先处理top深度较大的。 首先我们找出u,v中top深度较大的点,假设是u,则我们可以直接跳到father[top[u]]处,且跳过的这一段,在线段树中是一段区间

剑指offer 顺时针打印矩阵

坚强是说给别人听的谎言 提交于 2019-11-27 14:03:23
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 1 class Solution { 2 public: 3 vector<int> ans; 4 int row,col; 5 vector<int> printMatrix(vector<vector<int> > matrix) { 6 7 row = matrix.size(); 8 col = matrix[0].size(); 9 int top = 0, bottom = row-1,left = 0,right = col-1; 10 while(top <= bottom && left <= right){ 11 for(int i = left; i <= right; i++) 12 ans.push_back(matrix[top][i]); 13 for(int i = top+1; i <= bottom; i++) 14 ans.push_back(matrix[i][right]); 15 if(top < bottom) 16 for(int i = right-1; i >=

jquery的offset().top与javascript的offsetTop区别?

邮差的信 提交于 2019-11-27 13:17:29
offset().top是jquery的方法,需引入jquery,它获取你绑定元素上边框 相对于html上边界 的 偏移量 offsetTop是原生js的方法,它获取你绑定元素上边框相对于离自己最近且position属性为非static的祖先元素的偏移量 区别一:offset().top与offsetTop偏移量参照对象不同,offset().top始终是html,而offsetTop相对于其祖先position 的 来源: https://www.cnblogs.com/sjzgk/p/11365200.html

linux应用问题分析命令

核能气质少年 提交于 2019-11-27 09:59:09
1. 描述 应用问题分析方式及命令有很多,一般都结合着使用,今天主要介绍下: (1)top命令,实时查看服务器资源使用情况,类似windows下的资源管理器; (2)tail命令,实时刷新查看日志命令。 2. top命令 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况。 2.1 命令用法 top //默认每隔5秒,显示所有进程的资源占用情况 top -d 2 //每隔2秒,显示所有进程的资源占用情况 top -c //每隔5秒,显示所有进程的资源占用情况,-c重点是能看到命令行参数名称(比如java项目,不加-c的话只有java,增加-c的话,能看到具体执行参数,i'm 软件老王) 2.2 top显示信息说明 (1)第一行就不说了,没啥意思; (2)第二行, 显示的是进程汇总信息,其中: total 进程总数 running 正在运行的进程数 sleeping 睡眠的进程数 stopped 停止的进程数 zombie 僵尸进程数 (3)第三行,显示的是cpu使用情况,其中: 0.2% us 用户空间占用CPU百分比 0.2% sy 内核空间占用CPU百分比 0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比 99.6% id 空闲CPU百分比 0.0% wa 等待输入输出的CPU时间百分比 0.0%hi:硬件CPU中断占用百分比

单调栈

陌路散爱 提交于 2019-11-27 08:34:47
单调栈: 单调栈解决的是:以某个值为最小(最大)值的最大区间。 实现方法是:求最小值(最大值)的最大区间,维护一个递增(递减)的栈,当遇到一个比栈顶小的值的时候开始弹栈,弹栈停止的位置到这个值的区间即为此值左边的最大区间;同时,当一个值被弹掉的时候也就意味着比它更小(更大)的值来了,也可以计算被弹掉的值的右边的最大区间。 单调递增:数据 出栈 的序列为单调递增序列(即从栈顶到栈底的元素是单调递增的) 单调递减:数据 出栈 的序列为单调递减序列(与上面相反) 模板如下: 1 stack<int> sta; 2 for (遍历这个数组) 3 { 4 while(栈不为空 && 栈顶元素小于当前元素){ 5 更新结果; 6 栈顶元素出栈; 7 } 8 if(栈空 || 栈顶元素大于等于当前比较元素){ 9 当前数据入栈; 10 } 11 } 或 1 stack<int> sta; 2 for (遍历这个数组) 3 { 4 if(栈空 || 栈顶元素大于等于当前比较元素){ 5 入栈; 6 } 7 else{ 8 while(栈不为空 && 栈顶元素小于当前元素){ 9 更新结果; 10 栈顶元素出栈; 11 } 12 当前数据入栈; 13 } 14 } 15 /*如果要使最后单调栈内的元素能全部弹出,一般要在数组最后加一个符合条件的值,使栈内元素能全部弹出。*/ 例题:Largest

mysql top n 问题

生来就可爱ヽ(ⅴ<●) 提交于 2019-11-27 01:24:23
日常工作中,经常要查询分组的前几名或查询数据的前几条记录(第5条到第十条)等。 TOP-N分析法就是通过TOP-N算法从研究对象中得到所需的N个数据,并从排序列表中选取最大或最小的N个数据,这就是一个TOP-N算法。 mysql中用limit;oracle中用rownum。 mysql中 没有top , 你想查前几条数据 要用排序方试来查 order by id desc limit 0,10 按照id的倒序排序 取出前10条 order by id limit 5,10 按照id的正序排序 从第5条开始取10条 从mysql到oracle迁移一个程序,遇到了sql语句中的limit问题。 查遍网络,所提供的方法都极其麻烦,不利于通用。 以下是我的解决方案,可以与limit媲美。 比如从一个mobileuser 用户表中查询2到6条记录,按照第一次使用时间排序。 mysql语句为: SELECT userid,password,firstusetime from mobileuser ORDER BY firstusetime DESC limit 2,6; oracle语句为: SELECT * FROM ( SELECT userid,password,firstusetime, RANK() OVER (ORDER BY firstusetime DESC ) RN FROM

POWER

你说的曾经没有我的故事 提交于 2019-11-27 00:08:18
源程序名 输入文件名 输出文件名 时间限制 内存限制 power. pas /power. cpp power.in power.out 1s 128M FJ 的奶牛想要快速计算整数 P 的幂 (1 <= P <=20,000),它们需要你的帮助。因为计算 极大数的幂,所以它们同一时间仅能使用 2 个存储器,每个存储器可记录某个结果值。 第一件工作是初始化存储器内的值一个为底数 x, 另一个为 1。 奶牛可以相乘或相除 2 个存储器中的值,并把结果存在其中某个存储器内,但所有存储的结果必须是整数。 例如, 如果他们想计算 x^31, 一种计算方法是: WV1 WV2 开始: x 1 存储器 1 和存储器 1 相乘,结果存于存储器 2: x x^2 存储器 2 和存储器 2 相乘,结果存于存储器 2: x x^4 存储器 2 和存储器 2 相乘,结果存于存储器 2: x x^8 存储器 2 和存储器 2 相乘,结果存于存储器 2: x x^16 存储器 2 和存储器 2 相乘,结果存于存储器 2: x x^32 存储器 2 和存储器 1 相除,结果存于存储器 2: x x^31 因此, x^31 可以通过 6 次计算得出。给出要计算的幂次,要求求出最少需要几次计算。 输入 仅一个整数: P。 输出 仅一个整数:最少计算次数。 样例 power.in 31 power.in 6 A

(一)布局

我是研究僧i 提交于 2019-11-26 21:45:10
StackPanel stackPanel是一种以堆叠方式放置控件的布局方式. Orientation属性有Vertical和Horizontial两种方式可以选择,Vertical表示纵向布局,Horizontial表示横向布局. HorizontalAlignment属性用来调整拓展方向.默认是strentch,即横向延伸.横向占满,除此之外还有Left,Center,Right,这是按照最小占位符分别位于横向的三个位置.相应的有VerticalAlignment属性,与之类似. View Code 1 <StackPanel Orientation="Vertical" VerticalAlignment="Bottom"> 2 <Button Content="1"/> 3 <Button Content="2"/> 4 <Button Content="1"/> 5 <Button Content="2"/> 6 <Button Content="1"/> 7 <Button Content="2"/> 8 <Button Content="1"/> 9 <Button Content="2"/>10 <Button Content="1"/>11 <Button Content="2"/>12 <Button Content="1"/>13 <Button