- 博客(11)
- 收藏
- 关注
原创 遍历二叉树的迭代写法
使用递归遍历二叉树一般比较简单,使用迭代较难。这两种方法是等价的,不同之处在于递归时隐式维护了一个栈,而迭代时则要显示地将这个栈模拟出来。1.前序遍历前序遍历时中左右的遍历顺序,处理时先将根节点压入栈中,然后处理根节点,将右孩子先压入栈中,再将左孩子压入栈中(处理时先左后右,故入栈顺序为先右后左) vector<int> preorderTraversal(TreeNode* root){ stack<TreeNode*> stk; vector<int>
2021-02-22 21:51:30 381
原创 汇编语言编写中断的处理程序
CPU都具有执行完当前正在执行的指令之后,检测到从CPU外部(外中断)或内部(内中断)产生的一种特殊信息,并且可以立即对所接收到的信息进行处理。称这样的信息为:中断信息。CPU有四种情况可以产生中断信息:(1) 除法错误(2) 单步执行(能够用来实现debug中一步一步执行程序并返回寄存器状态的操作)(3)执行into指令(4)执行int指令编写中断的处理程序有多个步骤首先,CPU接收到中断类型码(一个字节型数据),然后通过中断向量表找到对应的中断处理程序的入口地址。中断向量表是入口地址的列表
2021-02-12 20:50:18 3610
原创 汇编语言 编写子程序时的注意事项
使用汇编语言编写可供调用的子程序,即类似于C编写可用调用的函数。主要使用call和ret命令来实现子程序的编写和调用使用的语法为 call 标号 指令1标号: 指令2 ret则可以实现在执行指令1之前,执行指令2在写子程序时,一般会在 标号:后面,指令2前面,先执行push操作,将子程序中可能用到的寄存器压栈,最后在指令2之后,ret之前执行出栈操作,防止子程序改变寄存器中的内容学习汇编语言,应该努力坚持,充分获得底层编程的体验,深刻理解机器运行程序的机理。...
2021-02-11 00:56:23 1544
原创 快慢指针(Fast and Slow Pointers)
快慢指针为双指针系列下的一个分支双指针是指在遍历对象的过程中,不使用单个的指针去遍历,而是 使用两个相同方向(快慢指针)或相反方向(对撞指针)的指针进行扫描,从而实现一些功能。快慢指针的应用1.判断链表是否有环如果存在环,则快慢指针一定会相遇2.在有序链表中寻找中位数设置快指针移动速度为慢指针的二倍,则当快指针移动到表位时,慢指针到达中点位置,但在实际实现的过程中,应该考虑到链表元素个数的奇偶性,进行合理的调整3.输出链表中倒数第k个节点快指针先走k步,随后快慢一起走,当快指针走到尾部时,满
2021-01-07 15:14:00 2137
原创 Pop Sequence
Given a stack which can keep M numbers at most. Push N numbers in the order of 1, 2, 3, …, N and pop randomly. You are supposed to tell if a given sequence of numbers is a possible pop sequence of the stack. For example, if M is 5 and N is 7, we can obtain
2020-12-06 19:41:13 268
原创 csapp学习笔记1
本章第一部分重点内容1.机器级程序将内存视作一个整体,称为虚拟内存(virtual memory),内存中的每个字节都由唯一的数字来标识,这个数字就是它的地址(address),所有可能地址的集合称为虚拟地址空间(virtual address space)。实际上存储的实现是多级且复杂的,展现给机器级程序的只是一个概念性映像。2.各种进制的转换,最重要的是十六进制和二进制的转换。3.布尔代数,包含C语言中的位级运算(~ & |),以及逻辑运算(! && ||),注意区分二者的
2020-12-04 21:17:56 121
原创 SQL语句GROUP BY的用法
一些重要规定group by 子句可以包含任意数目的列,使得能对数据分组进行嵌套。若在group by 子句嵌套了分组,则数据将在最后规定的分组上进行分组。即建立分组时所有的列一起算。Group By子句中列出的每个列都必须是检索列或有效的表达式(不可以是聚集函数),如果在Select中使用表达式,则必须在Group中使用相同表达式,不可用别名。除聚集计算语句以外,Select语句中每个列都必须在Group By中给出(关于此条,下面会给出具体例子和这样规定的原因)Group By必须出现在Wh
2020-11-24 09:35:13 15111 1
原创 c++实现Dijkstra算法寻找有向无权图的最短路径
Dijkstra算法学习笔记Dijkstra算法常用来求图中单个源点到其他各点的最短路径,该算法采用贪心策略,每次都挑选最短路径的顶点。对每个结点使用时可求图中任意两点间的最短路径,不过求图中任意两点间的路径时常使用Floyd算法实现。本次使用的图为有向带权图,存储结构为邻接矩阵,该存储结构更适合稠密图。一、求解过程1.将网(带权的图)中的顶点分为两组,一组为已知最短路径的顶点,一组为未知的。后面将通过此算法不断将未知集中的顶点加入已知集。2.此算法依赖三个容器,在此使用的是数组。分别为dist[
2020-11-23 22:42:30 904
原创 用栈实现中缀转后缀(c++)
用栈实现表达式中缀转后缀栈的特点是先进后出,可以用来将中缀表达式转换成后缀表达式,在本程序中对表达式进行了限制,数字0-9,运算符只有±*/(),缩小了问题规模。转换思路:将表达式输入,全部数据以char型存储在vector容器中,输入完后从左到右扫描vector,遇到数字直接输出,遇到操作符时根据操作符的种类分为三种情况进行操作:1.遇到*/和( 时直接入栈,乘除运算级别最高,所以应该直接入栈,左括号也直接入栈,直到遇到右括号才出栈。2.遇到±时,若栈中无元素,则直接入栈,否则开始出栈直到遇到左括
2020-10-30 18:48:59 1755
原创 数据结构学习笔记——单链表实现多项式加法
一元n次多项式的加法(单链表实现)下面展示一些 代码。首先是单链表结构体的定义typedef struct LNode{ int Base_number; int Index_number; struct LNode *Next; }LNode,*LinkList;typedef 将 struct LNode 的名字重定义成 LNode,将指向LNode的指针重定义成LinkList。以下是用到的一些函数。 void Creat(LinkList &polynom
2020-10-29 22:35:55 580
原创 c++中顶层const和底层const的区别
c++中顶层const和底层const的区别const的定义顶层const和底层const的区别区分顶层const和底层const的作用const的定义const是c++中定义变量时使用的限定符,被它修饰的变量的值不能改变。对于一般的变量来说,没有底层const和顶层const的区别,只有像指针这类复合类型的基本变量,才有这样的区别。顶层const和底层const的区别指针添加const修饰符时有两种情况:① 指向常量的指针:代表不能通过改变其指向内容的指针。声明形式为:const int 或 i
2020-07-10 18:27:32 413
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人