数据结构
PETERMAOSX
哎呦,不错哦!
展开
-
简单的单向循环链表实现
当只有一个节点的时候,这个节点的next指向自己。在添加节点的时候,让最后一个节点指向first。public class CircleLinkedPro { public static void main(String[] args) { Node node1 = new Node(1,"托尼","钢铁侠"); Node node2 = new Node(2,"彼得帕克","蜘蛛侠"); Node node3 = new Node(3,"斯蒂..原创 2020-09-18 12:38:12 · 277 阅读 · 0 评论 -
数据结构 - 链表实现双向队列
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace DataStruct_Pro.Tree{ public class QueueNode { public int...原创 2020-02-04 23:03:34 · 271 阅读 · 0 评论 -
数据结构 - 树(一)
树的数组表示法using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace DataStruct_Pro.Tree{ class Class1 { public stati...原创 2020-02-02 22:59:39 · 104 阅读 · 0 评论 -
数据结构 - 基于链表的队列实现
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace DataStruct_Pro.Page_4{ class QueueNode { public int data...原创 2020-02-01 23:47:02 · 158 阅读 · 0 评论 -
数据结构 - 栈的链式表示
本质还是单链表 不过加入了栈的性质using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace DataStruct_Pro.Page_4{ public class Node { ...原创 2020-01-30 22:14:00 · 300 阅读 · 0 评论 -
单链表的反转 - 三指针版
当创建一个链表后,链表只知道自己的下一个节点,而不知道自己的上一个节点,为了能够让节点知道上一个节点,我们需要这样做。1、创建三个指针 一个是沿着原来的链表进行遍历,一个存储,一个用于交换2、进行将链表反向的工作比如: 原来链表 0 -> 1 -> 2 -> 3 -> 4…-> n ->NULL;用代码来表示就是 0.next = 1 1.next =...原创 2020-01-29 21:37:10 · 755 阅读 · 0 评论 -
数据结构 - 单链表的节点操作
单向链表节点的删除有三种不同的情况1、删除链表的第一个节点只要把链表头指针指向第二个节点即可。if (first.data == delNode.data) first = first.next;2、删除链表内的中间节点,只要将删除节点的前一个节点的指针,指向想删除节点的下一个节点即可newNode = null; //Point 1temp = first; //Po...原创 2020-01-29 03:52:50 · 1450 阅读 · 0 评论 -
Java-顺序存储的线性表
顺序存储和链式存储各有各的优缺点。顺序存储主要是通过数组的来实现的,因为数组天生就带有顺序存储的一切特性。通过顺序存储形成的线性表主要是通过数组下标的变更来对元素进行变更。接口package shunxu_Pro;public interface ShunxuLink { void append(Integer item); //添加 int size(); //返...原创 2019-12-13 12:10:55 · 213 阅读 · 0 评论 -
Java,Python-有序链表
有序链表比起无序链表有一些优点1、元素都是拍好序了的2、在search的时候,如果说数据量过于庞大。那么提升的效果可以说是很大的。因为有序链表里面,如果你要找的数小于当前遍历到的节点的话。就可以断定后面一定没有你需要找的数了。就不用在像在无序链表里面那样得将所有的元素都遍历一遍才能够得到答案。class Node: def __init__(self,data): s...原创 2019-12-11 15:04:29 · 225 阅读 · 0 评论 -
Python,Java -无序链表
在链表中有一个经常使用的点,就是链表如果要遍历的话,需要经常用到current = self.head然后通过while 配合current = current.next来循环迭代class Node(object): def __init__(self,data): self.data = data self.next = None de...原创 2019-12-10 18:00:29 · 176 阅读 · 0 评论 -
Java-HashMap通过value反向找key
在Java中,通过构建一个hashmap可以实现类似于python中字典的作用那么如果建立了一个哈希表,需要通过值来判断键,可以通过反向查找的方法来import java.util.HashMap;public class hashMaptest { public static void main(String[] args) { HashMap<Intege...原创 2019-10-14 17:43:21 · 2711 阅读 · 0 评论 -
Java数据结构-图+深度优先遍历
图是一种复杂的非线性结构。在线性结构中,数据元素之间满足唯一的线性关系,每个数据元素(除第一个和最后一个外)只有一个直接前趋和一个直接后继;在树形结构中,数据元素之间有着明显的层次关系,并且每个数据元素只与上一层中的一个元素(parent node)及下一层的多个元素(孩子节点)相关;而在图形结构中,节点之间的关系是任意的,图中任意两个数据元素之间都有可能相关。图G由两个集合V(顶点Ver...原创 2019-10-11 11:47:18 · 385 阅读 · 0 评论 -
Java数据结构-哈希表(散列表)
散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(H...原创 2019-10-10 20:58:47 · 174 阅读 · 0 评论 -
Java数据结构-AVL树的双旋转
在AVL树中,若添加的节点通过一次单旋转无法解决。那么就需要双旋转在左边的话,就先局部左后右在右边的话,就先局部右后左树package AVLTreeDemo;public class BinarySearchTree { Node root; public void add(Node node){ //如果是一颗空树 if(root...原创 2019-10-09 22:53:32 · 232 阅读 · 0 评论 -
Java数据结构-从二叉排序树到AVL树的建立(单旋转)
数据结构中二叉排序树是一个比较好的结构,但是其也有一个很大的缺点,就是如果你添加的数据是无序的,那么二叉排序树可以很好的降低复杂度。但是如果添加的数据是有序的,比如1,2,3,4,5,6,7…这类似的数据。那么二叉排序树会通过以二叉排序树的性质来添加节点。那么二叉排序树就会降低为链表,其实可能还比链表效率还低。所以就引入了AVL树(平衡排序二叉树)其实也就只是在原来的排序二叉排序树种添加了一个...原创 2019-10-09 20:29:17 · 210 阅读 · 0 评论 -
java数据结构-二叉排序树(删除只有一个子节点的节点,删除有两个节点的节点)
在二叉排序搜索树中,要删除有子节点的节点的话。有两种情况第一种-要删除的节点有一个子节点:1、判断子节点是左节点还是右节点2、判断出来是左节点的话2.1、看看其父节点的左节点是不是我要删除的节点2.2、是的话就将其父节点的左节点设置为其左子节点2.3、如果不是左节点的话,就将其父节点的右节点设置为其左子节点3、如果是右子节点的话,同理。但是要注意将左右设置清楚第二种-要删除的节点...原创 2019-10-09 13:42:23 · 929 阅读 · 0 评论 -
Java数据结构-二叉排序树(搜索和删除叶子节点)
在二叉搜索树种搜索直接采用递归就可以做到删除叶子节点的话分3步1、找到要删除的节点2、找到要删除的节点的父节点3、删除节点(将其与父节点的联系断开)java实现树类package com.demo4;public class BinarySearchTree { Node root; public void add(Node node){ if(...原创 2019-10-08 22:31:41 · 655 阅读 · 0 评论 -
Java python数据结构-二叉搜索树(创建,添加和遍历)
二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。二叉排序树的查找过程和次优二叉树类似,通常采取二叉链表作为二叉排序树的存储结构。中序遍历二叉排序树可得到一...原创 2019-10-08 17:31:18 · 144 阅读 · 0 评论 -
java数据结构-赫夫曼树
给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的路...原创 2019-10-07 19:59:24 · 207 阅读 · 0 评论 -
java数据结构-堆排序
package com.demo1;import java.util.Arrays;public class heapsort { public static void main(String[] args) { int [] arr = new int[] {9,6,8,7,0,1,10,4,2}; //开始位置是最后一个非叶子节点,即是最后一个节...原创 2019-10-07 16:52:22 · 87 阅读 · 0 评论 -
数据结构-小链表
创建了3个元素的小链表#include<iostream>using namespace std;class IntNode {private: public: int info; IntNode* next; IntNode() { this->next = 0; } IntNode(int info,IntNode* next = 0) { ...原创 2019-09-18 20:55:07 · 152 阅读 · 0 评论 -
数据结构-链表
#include<iostream>using namespace std;class IntNode {private: public: int info; IntNode* next; IntNode() { this->next = NULL; } IntNode(int info,IntNode* next = NULL) { this-&...原创 2019-09-18 21:46:02 · 95 阅读 · 0 评论 -
C++-双链表-一(增,删)
//// doubleLisk.cpp// algorithm//// Created by mac on 2019/9/18.// Copyright © 2019 Mao. All rights reserved.//#include <stdio.h>#include<iostream>using namespace std;clas...原创 2019-09-19 13:56:28 · 235 阅读 · 0 评论 -
python-单链表
一开始我一直还不怎么懂如何在python里面使用指针,,,但是通过写这个简单的单链表,让我对python里面的指针有了一个全新的理解在python里面用指针不想在c/c++一样需要new一个新空间出来,而是直接创建一个新对象指针就是在对象里面的self来调用就可以了class Node(object): def __init__(self,data,next=None): ...原创 2019-09-19 17:02:28 · 248 阅读 · 0 评论 -
数据结构-python二叉树的实现
class Node(object): #节点类 def __init__(self,data,left=None,right=None): self.data = data self.left = left self.right = right def __str__(self): return str(self....原创 2019-09-19 23:48:33 · 155 阅读 · 0 评论 -
python-哈希表的简化版
class hashtable(object): #一个哈希表类 def __init__(self): self.items = [] def put(self,k,v): self.items.append((k,v)) def get(self,k): for key,value in self.items: ...原创 2019-09-19 23:49:49 · 166 阅读 · 0 评论 -
python-简单的栈
class Stack_01(object): def __init__(self): self.items = [] def push(self,item): self.items.append(item) def peek(self): print(self.items[len(self.items)-1]) de...原创 2019-10-02 11:40:15 · 92 阅读 · 0 评论 -
Java数据结构-栈
感觉绕来绕去,还是绕不过数据结构这座大山啊。。。。开始再学习一次数据结构,使用JAVA来学一遍栈栈的基本结构就是后进先出使用java数组实现的package com.stu;public class myStack { int [] elements; public myStack(){ elements = new int[0]; } ...原创 2019-10-05 19:27:38 · 108 阅读 · 0 评论 -
java数据结构-队列
队列是先进先出基于数组实现package com.stu;public class myDeque { int [] elemenmts; public myDeque(){ this.elemenmts = new int[0]; } //入队 public void add(int item){ int[] new...原创 2019-10-05 19:40:51 · 126 阅读 · 0 评论 -
Java数据结构-单链表(节点)
单链表是链式存储的一种数据结构下面是使用java来实现的一个节点连接和节点追加//节点类package com.stu;public class Node { int data; Node next; public Node(int data){ this.data = data; } //为节点追加节点 public vo...原创 2019-10-05 20:00:55 · 387 阅读 · 0 评论 -
java数据结构-循环链表
循环链表 <将最后的节点的next指向第一个节点>用节点类实现的package com.stu;public class LoopNode { int data; LoopNode next = this; public LoopNode(int data){ this.data = data; } public Lo...原创 2019-10-06 10:22:48 · 224 阅读 · 0 评论 -
java数据结构-双链表
双链表是在单链表的基础上面,在节点类中新加了一个pre指针,这样一个节点就可以向后走,也可以向前中,可进可退。package com.stu;public class DoubleNode { //上一个节点 DoubleNode pre = this; //下一个节点 DoubleNode next = this; //节点内容 int da...原创 2019-10-06 10:40:45 · 124 阅读 · 0 评论 -
java排序算法-插入,冒泡,希尔,快速,选择
1、冒泡import java.util.Arrays;publci class Main{ public static void main(String[] args){ int [] arr = new int[] {5,4,3,2,6,5,7,8,9,10,111,7,8,12}; System.out.println(Arrays.toString(arr)); bub...原创 2019-10-06 15:03:43 · 140 阅读 · 0 评论 -
java数据结构-树
树相当于是一个一对多的链表吧我这里写了一个真树这种结果的小demopackage com.stu;public class Mytree { public static void main(String[] args) { mytree_Node n1 = new mytree_Node("树根"); mytree_Node n2 = new m...原创 2019-10-06 16:50:35 · 106 阅读 · 0 评论 -
c++使用节点来自定义一个二叉树
分别使用了结构体和类来创建一个节点发现使用结构体和类的一个很大的区别就是在结构体当中,所有的属性或者方法都是Public的,在类当中就可以自己来定义是否private还有一个不同,就是在创建类的对象的时候,c++不像java一样可以直接new出来而是要加一个指针,并且在使用指针对象的时候还得加上一个&取地址感觉C++难学不是吹的,感觉规则好多啊。。。。。其实其他的链表啊,栈啊,...原创 2019-10-06 19:10:01 · 1320 阅读 · 0 评论 -
java数据结构-顺序存储的二叉树
package com.demo1;public class ArrayBinaryTree { int [] data; //先创建一个数组用来存储值 public ArrayBinaryTree(int [] data){ this.data = data; //初始化方法 } //下面分别是前序,中序,后序的遍历方法 //根左右,左根右,左...原创 2019-10-07 16:45:33 · 180 阅读 · 0 评论 -
Python-队列的实现
队列 (queue) 是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。有差不多7个步骤1、创建Node类创建一个 Node 的类,作为基础数据结构:链点,并初始化对应的内参。2、创建Queue类创建一个 Queue 的类,以链表形...原创 2019-09-12 22:09:59 · 312 阅读 · 0 评论