堆栈

数组与队列算法

吃可爱长大的小学妹 提交于 2019-12-02 19:25:36
二者均是抽象数据类型( Abstract Data Type, ADT ) 堆栈在 Python 中包含两种方式,分别是数组结构(以List仿真数组结构)和链表结构 用数组实现堆栈 设计算法简单。但是,如果堆栈本身大小是可以变动的,而数组大小只能事先规划和声明好,那么数组规划大了会浪费空间,小了不够用。 判断是否为空堆栈 def is_empty(): global top if top == -1: # 顶端 return True else: return False 入栈 def push(data): global top global MAXSTACK # 堆栈最大容量 global stack # stack = [None] * MAXSTACK 声明堆栈 if top >= MAXSTACK - 1: return "堆栈已满" else: top += 1 stack[top] = data 出栈 def pop(): global top global stack if is_empty(): return "堆栈是空的" else: data = stask[top] top -= 1 return data 用链表实现堆栈 算法复杂。动态改变链表长度,有效利用内存资源。 class Node: def __init__(self): self.data =

log4j打印抛出异常时堆栈内容

China☆狼群 提交于 2019-12-02 18:21:40
JAVA 中为快速定位,抛出异常的位置。往往需要在日志中描述。 log.err("异常出错点", e); 会将出错时的堆栈信息显示出来。 package com.jqyc.jase; import static org.junit.Assert.*; import org.apache.log4j.Logger; import org.junit.Test; public class TestError { Logger log = Logger.getLogger(TestError.class); @Test public void test() { String s = null; try { s.length(); } catch (Exception e) { log.error( "出错日志"+s, e); // 当然如果你懒得想提示信息的话,直接这样log.error("", e); System.out.println(e.getMessage()); } } } [com.jqyc.jase.TestError.test(TestError.java:18)] - 出错日志null java.lang.NullPointerException at com.jqyc.jase.TestError.test(TestError.java:16) at sun

python异常信息堆栈输出到日志文件

我是研究僧i 提交于 2019-12-02 15:11:06
# -*- coding: utf-8 -*- import logging from logging import handlers from datetime import datetime import time import ccxt import math import pymysql import traceback from pprint import pprint class Logger(object): level_relations = { 'debug':logging.DEBUG, 'info':logging.INFO, 'warning':logging.WARNING, 'error':logging.ERROR, 'crit':logging.CRITICAL }#日志级别关系映射 def __init__(self,filename,level='info',when='D',backCount=3,fmt='%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s'): self.logger = logging.getLogger(filename) format_str = logging.Formatter(fmt)#设置日志格式 self

Java中线程与堆栈的关系

放肆的年华 提交于 2019-12-02 14:59:23
栈 是线程私有的,每个线程都是自己的栈,每个线程中的每个方法在执行的同时会创建一个栈帧用于存局部变量表、操作数栈、动态链接、方法返回地址等信息。每一个方法从调用到执行完毕的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。其中局部变量表,存放基本类型(boolean、byte、char、short、int、float)、对象的引用等等,对象的引用不是对象实例本身,而是指向对象实例的一个指针。 堆 是线程共享的,所有的对象的实例和数组都存放在堆中,任何线程都可以访问。Java的垃圾自动回收机制就是运用这个区域的。 方法区 也是线程共享的,用于存放类信息(包括类的名称、方法信息、字段信息)、常量、静态变量以及即时编译器编译后的代码等等。 这么讲比较抽象,写段代码: 当程序执行到箭头指向那一个行代码的时候, 入参i和局部变量j都是基本类型,直接存放在栈中。 入参str和oneMoreStudy是对象类型,在栈中只存放对象的引用。 如下图: 微信扫描二维码,关注 万猫学社 ,获得更多Java技术干货。 来源: https://blog.csdn.net/heihaozi/article/details/102752636

Program terminated with signal 6, Aborted. (最后发现是数组越界导致)

吃可爱长大的小学妹 提交于 2019-12-02 14:41:43
外网崩溃现象:   1.多台物理机中的多个进程消失,而且都是场景进程。   2.core文件都很小,看了 ulimit -a 和 cat proc/pid/limits (都很正常。看这个是为了以后core文件正常。)   3.场景日志中堆栈信息都是 libc.so.6 (abort 或者 malloc)   4.场景日志中在崩溃堆栈信息的前一条都是某玩家离线打印出来的日志。 gdb调试core文件后报错内容如题:Program terminated with signal 6, Aborted. 跟之前的主程交流后,可能double free,也可能内存不足,要查下最近提交代码,最后发现是 数组越界 。 ------------------------------------------------ 结果已经知道了,那么分析现象,第4条是偶然,第3条的 malloc是偶然,所以有时候现象会影响自己的判断,要时刻保留疑问。 以下是堆栈信息: 来源: https://www.cnblogs.com/workharder/p/11750656.html

监控应用卡顿BlockCanary

只愿长相守 提交于 2019-12-02 13:21:23
参考 https://juejin.im/post/5d837cd1e51d4561cb5ddf66#heading-22 https://github.com/markzhai/AndroidPerformanceMonitor http://blog.zhaiyifan.cn/2016/01/16/BlockCanaryTransparentPerformanceMonitor/ 基于消息队列替换 Looper 的 Printer Looper 暴露了一个方法 public void setMessageLogging(@Nullable Printer printer) { mLogging = printer; } 在Looper 的loop方法有这样一段代码 public static void loop() { ... for (;;) { ... // This must be in a local variable, in case a UI event sets the logger Printer logging = me.mLogging; if (logging != null) { logging.println(">>>>> Dispatching to " + msg.target + " " + msg.callback + ": " + msg

[leetcode] 232. Implement Queue using Stacks

别等时光非礼了梦想. 提交于 2019-12-02 11:20:23
https://leetcode.com/problems/implement-queue-using-stacks 使用堆栈实现队列。 使用两个堆栈,push的时候正常放入堆栈1,pop的时候,如果堆栈2为空,就把堆栈1的数据全部放入堆栈2(此时数据就倒序了),这时候从堆栈2的顶部就能取到最早进入的数据。 class MyQueue { public: stack<int> s1; stack<int> s2; /** Initialize your data structure here. */ MyQueue() { } /** Push element x to the back of queue. */ void push(int x) { s1.push(x); } /** Removes the element from in front of queue and returns that element. */ int pop() { int res = peek(); s2.pop(); return res; } /** Get the front element. */ int peek() { if(s2.empty()) { while(!s1.empty()) { s2.push(s1.top()); s1.pop(); } } return s2

堆栈

前提是你 提交于 2019-12-02 04:59:44
堆栈(stack) 其特点是先进后出 堆栈是最容易实现的ADT之一,其基本操作通常称为push和pop,push操作是把一个新值压入到堆栈顶部,而pop操作是把堆栈顶部的值移出堆栈并返回这个值 1. 数组实现堆栈 # include <stdio.h> # include <assert.h> # include <stdlib.h> # define STACK_SIZE 10 //堆栈中值数量的最大限制 # define STACK_TYPE int # define size_t int //static STACK_TYPE stack[STACK_SIZE]; //存储堆栈中值的数组 static STACK_TYPE * stack ; //指向存储堆栈元素空间的指针 static int top_element = - 1 ; //指向堆栈顶部元素的指针 static size_t stack_size ; void push ( STACK_TYPE value ) ; //入栈 void pop ( void ) ; //出栈 STACK_TYPE top ( void ) ; //返回栈顶元素,但不对栈内元素修改 int stack_is_full ( void ) ; //检测堆栈是否已满,若已满返回TRUE,否则返回FALSE int stack_is

未关中断情况下的hardlock

风格不统一 提交于 2019-12-02 03:26:57
最近遇到一例crash,3.10内核,hardlock,查看对应的堆栈,中断是使能的。 查看对应的hrtimer_interrupts和hrtimer_interrupt_save的值,发现确实相等。 具体可参考: 百思不得其解,然后咨询os的同事茂春兄,然后他很轻描淡写第说,他遇到过,并随手给了个链接: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/kernel/watchdog.c?id=7edaeb6841dfb27e362288ab8466ebdc4972e867 你看,多个兄弟多么关键,搞内核,永远不要一个人战斗。 另外,顺带看了一下touch_nmi_watchdog的用法,比如为了避免在printk的时候,遇到nmi,nmi中有可能调用printk,这样就非递归情况下变成死锁了, 那么printk调用一下touch_nmi_watchdog,安抚一下那只狗狗。 来源: https://www.cnblogs.com/10087622blog/p/11728836.html

Swift的一些翻译4:Designing UI Using Stack Views

最后都变了- 提交于 2019-12-02 00:46:49
第六章 用堆栈视图(Stack Views)来设计UI iOS9带来了许多新的特性来让我们的开发生涯更简单,Stack Views的简介就是一个很好的例子.之前给你们简单的介绍了auto layout.这个例子让我们工作起来很简单.但是,随着你的app UI变得更复杂,你会发现给所有的iOS设备完美的提供界面约束变得更难. 这是苹果在最新的Xcode和Ios版本中介绍Stack views的一个原因. 这一章,我们将继续讨论界面编辑器里的UI设计.我会教你们怎么来构建一个更全面的界面,你可能会在实际运用中遇到的应用.你将学到如何: 使用堆栈视图来布局用户界面. 使用图片视图来显示图片. 使用内置目录来管理图片. 使用Size类调整堆栈视图. 我们将根据上面的来讨论更多的关于自动布局的内容.你可能会被吓到,因为你一行代码都没写却可以干那么多的事. 堆栈视图(Stack Views)是什么 先说重要的,什么是堆栈视图?堆栈视图提供一个流线型的界面来把视图集合放置成一行或者一列.在Keynote或者PPT里,你可以把很多对象一起分组,那样它们可以作为一个单独对象移动或分组.堆栈视图提供了一个非常相似的特性.你可以用堆栈视图将很多UI对象合成一个.最好的是,视图嵌入一个堆栈视图里以后,你不再需要定义自动布局约束. 视图嵌入一个堆栈视图里时,他们通常被看做安排好的视图.