数据结构
The_Best_Hacker
天不生我李淳罡,剑道万古如长夜。
展开
-
数组实现队列【一】
【一】思路 队列的思想为-----先进先出 初始化:定义头指针尾指针,队列最大长度,头指针指向队列第一个数据的前一个位置;尾指针指向最后一个元素,默认值都为-1; 判断队列是否为空,当尾指针与头指针相等时,队列为空; 判断队列是否已满,当尾指针与队列最大长度-1相等,队列已满; 添加数据:当添加元素的时候,需要从队列尾部添加,所以尾指针向后加一; 取出数据:当取出元素的时候,需要从队列...原创 2019-09-04 18:27:53 · 192 阅读 · 0 评论 -
二叉树:定义、遍历、查询、删除
【一】二叉树 二叉树的相关概念 满二叉树:如果二叉树的yezi节点都在最后一层,并且节点总数=2^n-1,n为层数 完全二叉树:如果二叉树的所有叶子节点都在最后一层或者倒数第二层,而且最后一层的叶子节点在左边连续,倒数第二层的叶子节点在右边连续。 【二】为什么提出二叉树 数组 优点:通过下标形式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。 缺点:如果检...原创 2019-09-15 16:14:56 · 280 阅读 · 1 评论 -
哈希表
【一】哈希表 他通过把关键码值映射到表中的一个位置来访问记录,以加快查找的速度。这个映射函数就是散列函数。 【二】哈希表的价值 相当于一个缓存区,将常用的加入哈希表,减少对数据库的操作。 【三】自己写的哈希表 import java.util.Scanner; public class HashTableTest { //4.测试 public static vo...原创 2019-09-13 20:41:52 · 207 阅读 · 0 评论 -
浅谈:时间复杂度、空间复杂度
【时间复杂度】 1.时间频度(语句频度):一个算法中的语句执行的次数。记为T(n) 时间频度的计算特点: 忽略常数项 忽略低次项 忽略系数 2.时间复杂度 若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常熟,则称f(n)是T(n)的同数量级函数。 记作T(n)=O(f(n)),称O(f(n)...原创 2019-09-13 12:15:28 · 441 阅读 · 0 评论 -
浅谈---栈的前缀、中缀、后缀表达式
【前缀表达式】 前缀表达式(波兰表达式):运算符位于操作数之前;eg:(3+4)*5-6 - * + 3 4 5 6 1.从右至左扫描,将6,5,4,3压入堆栈; 2.遇到+运算符,因此弹出3和4,计算3+4的值,得7,再将7入栈; 3.接下来是*运算符,因此弹出7和5,计算7*5=35,将35入栈; 4.最后是-运算符,计算35-6的值,即29,由此得到结果。 【中缀表达式】 中缀表达式...原创 2019-09-13 10:26:07 · 541 阅读 · 0 评论 -
栈实现简易计算功能
【一】栈实现计算功能思想 1.首先定义两个栈,数据栈numStack、符号栈operStack 2.如果扫描到的是一个数字就存入numStack中 3.如果扫描到的是一个符号 如果符号栈为空,直接加入符号; 如果操作的符号优先级小于等于符号栈中的符号,从符号栈中pop出一个符号,再从数据栈中pop出两个数据,进行运算并将运算结果存入数据栈中; 如果操作的符号优先级大于栈中的符号,直接存储...原创 2019-09-12 18:30:11 · 238 阅读 · 0 评论 -
Stack(栈)
【一】Stack(栈) 特点:它是一个先进后出的有序列表 允许插入和删除的一端为栈顶(top),另一端为栈底(bottom) 出栈pop,入栈push 数组模拟栈 1.判断栈是否为空 2.判断栈是否已满 3.入栈 4.出栈 【二】代码实现 import java.util.Scanner; public class StactTest2 { public static...原创 2019-09-12 01:18:41 · 292 阅读 · 0 评论 -
环形单链表
【一】环形单链表 单项环形链表解决约瑟夫环 1.定义节点 2.创建环形链表 3.遍历环形链表 4.环形链表添加节点 【二】环形单链表的图示 【三】代码实现 public class LinkedListDemo { public static void main(String[] args) { CirLinkedList cll=new CirLinkedList();...原创 2019-09-11 21:25:53 · 347 阅读 · 0 评论 -
双向链表
【一】双向链表 单向链表,查找的只能是一个方向,而双向链表可以向前或向后查找。 单向链表不能自我删除,需要靠辅助节点;而双向链表可以自我删除 双向链表中的节点 pre data next pre指向前一个节点的地址 data存储当前节点的数据 next指向下一个节点的地址 【二】代码实现 实现功能: 1.遍历双向链表 双向链表的遍历和单链表一样,只是可以向前查找,向后查找。 ...原创 2019-09-06 13:22:58 · 184 阅读 · 0 评论 -
单链表
【一】单链表特点 1.存储方式为:节点,节点包含data域和next域,data域用于存储数据,next域用于存储下一个节点对应的地址。 2.链表的各个节点不一定是连续存储的。 3.链表分为带头结点的链表和没有头结点的链表。 【二】单链表的功能实现 功能列表: 1.添加节点 2.插入节点 3.修改节点 4.删除节点 5.遍历元素 6.返回倒数第K个节点获取到单链表中的节点个数,不统计...原创 2019-09-05 11:01:06 · 233 阅读 · 0 评论 -
数组实现队列【二】
【一】实现思路 基于上一篇文档数组实现队列【一】加以改进,将浪费掉的空间用起来。 改进: front头指针和rear尾指针的默认值为0,头指针指向头元素,尾指针指向尾元素的下一个位置; 将数组最大长度的最后一个位置queue[maxSize-1]预留出来; 判断队列为空的条件:rear==front; 判断队列已满的条件:(rear+1)%maxSize==front; 队列的有效个...原创 2019-09-04 23:12:06 · 139 阅读 · 0 评论 -
顺序存储二叉树前序、中序、后序
【一】顺序存储二叉树 数组存储方式和树的存储方式可以相互转换。 要求: 1)二叉树的节点,要求以数组的方式来存放 2)要求在遍历数组时,仍然可以以前序遍历、中序遍历和后序遍历的方式来完成节点的遍历。 特点: 顺序二叉树通常只考虑完全二叉树 第n个元素的左子树的下标为2*n+1; 第n个元素的右子树的下标为2*n+2; 第n个元素的父节点为(n-1)/2 n:表示二叉树中的第几个元...原创 2019-09-15 23:25:32 · 934 阅读 · 2 评论