![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
weixin_53437610
这个作者很懒,什么都没留下…
展开
-
线性表-链表
链表,包含插入、删除、查找、清空#include <stdio.h>#include <malloc.h>typedef enum{ ERROR = 0, SUCCESS = 1,} State;typedef int Data;/** * 节点 */typedef struct Node{ Data data; struct Node *next;} *Node;/** * 头节点 */typedef stru原创 2021-11-06 19:18:01 · 64 阅读 · 0 评论 -
线性表-顺序存储结构
线性表,数组实现#include <stdio.h>#include <malloc.h>//数组默认大小#define MAXSIZE 10//执行状态枚举typedef enum{ ERROR = 0, SUCCESS = 1,} State;typedef int Data;typedef struct{ Data data[MAXSIZE]; int length;} *List;/** * 初始化操作,建原创 2021-11-06 17:49:51 · 79 阅读 · 0 评论 -
二叉树线索化
线索化二叉树 public void infixThrNodes(TreeNode node){ if (node == null){ return; } infixThrNodes(node.lChild); if (node.lChild == null){ node.lType = 1; node.lChild = pre; } if原创 2021-03-03 18:48:47 · 57 阅读 · 1 评论 -
二叉树操作
二叉树的创建思路:使用递归进行创建。使用前序遍历的方式创建 public static HeroNode createTree(HeroNode node){ Scanner scanner = new Scanner(System.in); System.out.println("请输入"); String next = scanner.next(); if (next.equals("#")){ node原创 2021-03-02 20:53:12 · 44 阅读 · 0 评论 -
1.1哈希表
哈希表思路:1.需要一个数组,数组中存取的是一个链表,这个链表可以没有表头。2.需要一个哈希计算的方法,决定传入的数据存在哪里public class HashTable { public static void main(String[] args) { HashTable hashTable = new HashTable(7); User user = new User(1,18,"张三"); hashTable.addUser(1,use原创 2021-01-01 18:47:40 · 93 阅读 · 0 评论 -
12.31二分查找
二分查找:每次将从数组(数组必须是有序的)找一个中间位置的值。判断需要寻找的值是比当前中间值大还是小,然后决定向左还是向右查询。查询有三个思路,分别是:如果比中间值大,就向右查询。如果比中间值小,就向左查询。最后不停向左或向右寻找它就会刚好等于中间值,然后返回。这个连续向右向左需要使用递归。import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class Find { public原创 2020-12-31 21:17:49 · 52 阅读 · 0 评论 -
12.31基数排序
基数排序思路1.定义一个“桶”,这个桶根据元素位数的值存放元素。这个桶是一个二维数组,第一层数组存放0到9的值,第二层存放数据2.我们需要根据最大位数的元素确定遍历次数3.从个位数开始遍历,根据位数的值确定放入哪个桶,比如1就放进元素为一的桶。4.我们还需要一个变量来纪律每个桶里元素的数量。这个变量可以是一个一维数组,方便记录所有桶里面元素的个数。5.遍历需要排序的数组,根据位数上的值放入桶里,在从桶里取出数据,依次放回数组,直到遍历完。6.继续重复操作,直到位数遍历完。public void原创 2020-12-31 21:08:21 · 52 阅读 · 0 评论 -
12.27排序算法
冒泡排序:遍历数组元素,每次将最小或最大的元素与后一位交换,直到当前元素到达数组末端。循环数组长度减一public class Sort { public static void main(String[] args) { int[] lis = new int[]{2,667,3,-3,-9,-1,}; int[] sor = Sort.sor(lis); for (int i : sor){ System.out.pri原创 2020-12-31 10:59:44 · 44 阅读 · 0 评论 -
12.27八皇后问题
定义:方法自身调自身递归调用规则:1.当程序执行一个方法时,会开辟一个新空间(栈)2.每个空间里的变量都是独立的递归实现八皇后:1.每次需要判断当前棋子是否与其他棋子冲突。2.棋盘是8*8的,有一个循环遍历所有行,内部再有一个循环遍历每行的每一列。每次遍历都要判断是否与棋盘上的棋子冲突。3.然后里面递归调用,每次行加一(从0行开始),因为递归调用会一直向里面递归,也就是会遍历到所有行,然后匹配列。到达最大行如果不能匹配,会返回到上一层,上一层又会开始匹配当前行其它列的下一层是否匹配。以此类推.原创 2020-12-27 18:29:46 · 53 阅读 · 0 评论 -
中缀表达式转后缀表达式
中缀转后缀流程:先遍历字符串,定义两个栈(也可以使用一个栈加一个数组,我这里使用的是一个数组)如果是数字直接入数组。如果是符号判断符号栈是否为空,如果空直接入栈。否则和栈里面所有元素比较,只要栈顶元素优先级高于或等于当前字符将符号栈字符弹出并加入到数组中。直到栈顶元素优先级小于当前符号。再将当前元素入符号栈遇到左括号直接入符号栈,遇到右括号遍历字符栈直到遇到左括号停止。并将字符栈里面的字符加入数组中(括号直接弹出不加入数组)最后字符站会剩下一个字符,将他加入数组即可现在数组中的元素就是后缀表原创 2020-12-26 20:35:01 · 31 阅读 · 0 评论 -
12.25栈实现简易计算器
栈实现计算器思路:利用数组模拟出栈的基本结构创建两个栈分别存放数字和符号创建一个指针变量遍历字符串判断遍历到的字符是数字还是符号(注意转换成数字要减去48,因为它默认会是char类型的1转成int类型)如果是数字直接入栈,也可以判断栈是否已满,在入栈如果是字符,自定义字符级别,判断字符级别是多少。如果大于字符栈栈底的字符,就直接加入。反之取出数字栈的两个数字,再从字符栈取出一个字符(因为栈是先进先出,所以要注意运算顺序)进行运算所有字符遍历完毕,进入一个循环。终止条件是数字栈只有一个或者字符原创 2020-12-25 18:34:02 · 86 阅读 · 0 评论 -
12.21栈
实现栈的思路1.使用数组来模拟栈2.定义一个top模拟栈顶3.入栈时,top++,出站时top–原创 2020-12-25 18:32:55 · 34 阅读 · 0 评论 -
12.20环形单向链表
环形单向链表实现package zhangs;public class Clinked { public static void main(String[] args) { Linkedboy linkedboy = new Linkedboy(); linkedboy.addBoy(25); linkedboy.show(); }}class Linkedboy{ public Boy first = null; p原创 2020-12-21 13:15:15 · 76 阅读 · 1 评论 -
12.19单向链表
1.链表(linked list )链表是有序的列表链表是以节点的方式来存储,链式存储每个节点包含data域,next域,指向下一个节点如图:链表的各个节点不一定是连续存放的package zhangsong;import java.util.PrimitiveIterator;public class Linked { public static void main(String[] args) { HeadLinke headLinke = new Hea原创 2020-12-20 16:35:27 · 101 阅读 · 1 评论 -
12.18稀疏数组,环形队列
二维数组转换稀疏数组0000rowcolval010203431000111222011.二维数组转稀疏(sparse)数组的思路:稀疏数组固定三列,有行,列,值三个属性。第一行存储原二维数组的总行数与列数。其余几行存储原二维数组数据对应行列及值。稀疏数组行数 = 二维数组所有值个数+1;int arr_list[][] = new int[11][11]; arr_list[2][4]原创 2020-12-19 13:54:18 · 62 阅读 · 1 评论