数据结构
dp不会就不会
这个作者很懒,什么都没留下…
展开
-
2022_天勤数据结构高分笔记_第二章_算法
3、将顺序表的所有元素逆置void exchange(List &L,int low,int high){ //顺序表置换方法 while(low<high){ L.data[low] = L.data[low]+L.data[high]; L.data[high] = L.data[low]-L.data[high]; L.data[low] =L.data[low]-L.data[high]; low+=1; high-=1;}}4、在顺序表中删除下标i原创 2021-03-26 22:04:12 · 1131 阅读 · 0 评论 -
堆排序
堆排序重点在于第一步构造堆结构后,使用下沉算法,每次把指针指向的索引元素和跟结点交换,再指针-1,每次都把堆结点中最大的元素取出package Mr_math;import java.util.Random;public class Heapsort { /*public int N; private int [] a; public Heapsort(int maxSize) { a = new int[maxSize+1]; for(int i=0;i<=maxSize;原创 2020-11-08 16:17:58 · 708 阅读 · 0 评论 -
索引优先队列
对于优先队列(堆),定义为每个父结点都要大于两个叶子结点。在优先队列中,元素的添加可以通过将每个元素添加到叶子中,再通过上浮算法swim来不断跟父结点比较,来维护优先队列的完整性。但是对于某些需要删除特定位置的时候,需要从头到尾遍历得到该元素的特定位置,再进行删除。因此索引优先队列就是维护了一个逆序数组,保存了每个元素在优先队列的下标,如 我要删除 6这个元素 ,我能够通过qp[6]得到6在pq的位置下标,再通过将pq[qp[6]]和最后的一个结点进行交换,进行删除,然后下沉sink后,保持优先队列。原创 2020-11-08 16:09:29 · 296 阅读 · 0 评论 -
java数组实现优先队列
堆定义:结点大于两个子结点的二叉树使用堆来实现优先队列从1开始存储有子结点的2倍为父结点如 a[1] 的子结点为 a[2],a[3],a[2]的子结点为a[4],a[5]队列的入队可以看成叶子结点的上浮队列的出队可以看成跟结点的下沉上浮算法public void swim(int k) { while(k > 1&& a[k/2]<a[k]) { int n = a[k/2]; a[k/2] = a[k]; a[k] = n; k=原创 2020-11-03 20:56:29 · 298 阅读 · 0 评论 -
双向链表实现栈
代码实现:package stack;public class LinkListStackDemo { public static void main(String[] args) { // TODO Auto-generated method stub LinkListStack stack = new LinkListStack(); stack.push(1); stack.push(2); stack.push(3); System.out.println("---原创 2020-07-21 15:14:30 · 221 阅读 · 0 评论 -
数组栈
数组栈栈类class ArrayStack { private int[] stack; //数组栈 private int MaxSize; //栈的容量 private int top; //栈的指针 public ArrayStack(int MaxSize){ this.MaxSize = MaxSize; stack = new int[this.MaxSize]; top = -1; //栈为空时,指针指向-1 }判断栈满或栈空public bool原创 2020-07-21 15:12:40 · 192 阅读 · 0 评论 -
循环单向链表解决约瑟夫问题
约瑟夫问题男孩类class Boy{ private int no; private Boy next; public Boy(int no){ this.setNo(no); } public int getNo() { return no; } public void setNo(int no) { this.no = no; } public Boy getNext() { return next; } public void setNext(Boy next原创 2020-07-18 17:00:07 · 62 阅读 · 0 评论 -
双向链表实现水浒排行增删改查
双向链表与单向链表的不同在于,容易出现空指针异常在添加时:heroNode.pre = temp; if(temp.next!=null){ temp.next.pre = heroNode; heroNode.next = temp.next; } temp.next = heroNode;如果刚好是最后一个里面添加,需要 temp.next!=null的限制在删除时,有两种情况://删除的不是最后一个节点则if(temp.next!=null){原创 2020-07-17 16:57:02 · 150 阅读 · 0 评论 -
单链表实例(1)实现水浒传排行增删改查和练习
实现水浒传排行增删改查对于英雄类,每一个类里都有指向下一个节点的引用public HeroNode next;对于添加根据编号大小,插入对于删除把 要删除的节点的next赋值到被删除的上一个节点的next,即:temp.next == temp.next.next英雄类的定义class HeroNode { public int no; public String name; public String nickname; public HeroNode next; //下一节原创 2020-07-16 00:02:52 · 219 阅读 · 0 评论 -
java:数据结构(2.1):循坏队列
循环队列 此处,尾指针指向的是尾部元素的后一位 头指针指向的是头部元素 空出一个位置来作判断队列是空还是满 如 rear321front则若继续加元素,首先判断(rear+1)/%maxSize == front,已满rear == front 空有效元素应该为:(rear-front+maxSize)%maxSize循环队列的定义class CircleArray { private int maxSize; //最大容量 pri原创 2020-07-09 16:42:31 · 85 阅读 · 0 评论 -
java:数据结构(2):队列
非循环队列非循环队列会不断的使得下标上移,造成”一次性“的浪费队列定义class ArrayQueue { private int maxSize; //最大容量 private int front; //队列头 指向头元素的前一个元素 private int rear; //队列尾 指向尾元素 private int[] arr; //数据队列 //创建队列构造器 public ArrayQueue(int maxSize) { this.maxSize = maxSize原创 2020-07-09 16:32:37 · 87 阅读 · 0 评论 -
java:数据结构(1):二维数组转稀疏数组
java:二维数组转稀疏数组以5五子棋棋盘保存为例1、稀疏数组定义原数组的行原数组的列非零元素的个数第一个非零元素所在行第一个非零元素的列第一个非零元素的值第二个非零元素所在行第二个非零元素的列第二个非零元素的值int chessArr1[][] = new int[11][11];//创建一个原始的二位数组11*11// 0:无棋// 1:黑子// 2:蓝子 chessArr1[1][2] = 1; chessArr1[2][3] = 2; c原创 2020-07-09 16:20:51 · 79 阅读 · 0 评论