数据结构和算法
陈俊成
这个作者很懒,什么都没留下…
展开
-
树的概念总结;树的存储结构;树、二叉树、森林的相互转换
树的相关概念 1、结点分为:根结点(无双亲、有孩子)、内部结点(有双亲、有孩子)、叶结点(有双亲、无孩子)2、结点与结点的关系:孩子、双亲、祖先、兄弟、堂兄弟3、结点的度:结点的度是结点的孩子个数4、树的度是各结点度数的最大值5、层:根节点为第1层,最下层叶子结点为最后一层6、树的深度:一棵树的层数就是深度7、二叉树的定义:8、二叉树有物种基本形态:空二叉树、只有一个根结点、根节点只有左子树、根结原创 2016-09-06 18:45:09 · 819 阅读 · 0 评论 -
栈的两种遍历方式
一、普通遍历 public void test05(){ MyLinkedStack<String> myStack = new MyLinkedStack<String>(); myStack.push("1"); myStack.push("2"); myStack.push("3"); myStack.pus原创 2016-09-11 15:42:15 · 9361 阅读 · 0 评论 -
自己实现顺序表和单链表以及他们的对比
线性表包括:顺序表和单链表;顺序表是一串连着的内存空间,因此用数组来实现;单链表是分散的内存空间块,用对象来实现,一个结点是一个对象,对象里面有两个域,一个是data域,一个是nextNode域。由于顺序表和单链表都涉及到迭代器模式,自己实现迭代器去迭代里面的数据,这里提供一个接口。 迭代器: MyIterator类:package cn.test.ArrayList;public inter原创 2016-09-05 16:42:52 · 566 阅读 · 0 评论 -
循环队列
这里的循环队列用数组来实现,以下是几个约定或者说是公式:1、队列的队头指针指向队列的第一个元素,队列的队尾指针指向 队列的最后一个元素的下一个位置2、数组剩下一个空位的时候,队列已满3、队列为空的时候,数组front == rear,故初始化时,front = rear = 0; (但在实际编程中会用length记录队列长度)4、队满的公式是(rear+1)%size()==fro原创 2016-09-06 10:31:00 · 441 阅读 · 0 评论 -
二叉树的遍历和查找
就如图所示的二叉树进行遍历:(1)前序遍历:A B D G H C E I F (2)中序遍历:G D H B A E I C F (3)后序遍历:G H D B I E F C A递归前序遍历算法: private void preOrderTraverse(Node rootNode){ if(null != rootNode){ System.原创 2016-09-07 17:56:15 · 335 阅读 · 0 评论 -
【转】跳跃表-原理及Java实现
原文地址:点击进入 引言:上周现场面试阿里巴巴研发工程师终面,被问到如何让链表的元素查询接近线性时间。笔者苦思良久,缴械投降。面试官告知回去可以看一下跳跃表,遂出此文。1、跳跃表的引入 我们知道,普通单链表查询一个元素的时间复杂度为O(n),即使该单链表是有序的,我们也不能通过2分的方式缩减时间复杂度。如上图,我们要查询元素为55的结点,必须从头结点,循环遍历到最后一个节点,不算-INF(负无穷转载 2016-10-27 12:14:30 · 286 阅读 · 0 评论