数据结构
学海无涯o
将学习变成一种习惯.
展开
-
单链表的建立--插入--删除的很容易理解记住的代码
#include<stdio.h>#include<malloc.h>#define NUll 0#define LEN sizeof(struct node)struct node{ int info; struct node *link;};struct linklist{ struct node *head; int n;};// 单链表...原创 2019-03-17 20:43:26 · 646 阅读 · 0 评论 -
蓝桥杯部分总结
1.求日历#include<stdio.h>int main(){ int monthDays[12]={31,28,31,30,31,30,31,31,30,31,30,31}; int days=1000; int year=2014,month=11,day=9; int i; for(i=0;i<days;i++) { day+...原创 2021-01-14 11:38:19 · 89 阅读 · 0 评论 -
大组合数
#include<stdio.h>long long C(int n, int m) {int i,j,q=1;if(m < n-m) m = n-m;long long ans = 1;for( i = m+1,j=1; i <= n; i++,j++) { ans *= i; ans /= j;}return ans;}int main...原创 2019-02-10 21:47:11 · 492 阅读 · 0 评论 -
数字螺旋方针--等一系列三角形变形
第一种,通过递归来实现:#include<stdio.h>int n0;void square(int m[20][20],int begin,int size,int number){ int j; int h=begin,v=begin; if(size==0) return; if(size==1) { m[begin][begin]=number; retu...原创 2019-03-18 09:42:19 · 310 阅读 · 0 评论 -
基于c语言的深度搜索与广度搜索
dfs/*第一步求出两个点的所有路径第二步通过查找找出最短路径,如果太多,可以先求一次最短路径,后查找,得出最短路径的过程只针对迷宫比较小的方法*/#include<stdio.h>int a[51][51],b[51][51],n,m,p,q,min=999;struct wpc{ int x1; int y1;}s[1000];int top=0;voi...原创 2021-01-14 11:24:01 · 168 阅读 · 0 评论 -
枚举法解决一切 0--1背包问题
一.当3个物品数量,总背包为40时 每个物品重量 10 20 30 价值为 70 80 150代码如下:#include<stdio.h>#define n 3possible_solution(int x[n]){ int i; for(i=0;i<3;i++) if(x[i]!=1) { x[i]=1;return;} el...原创 2019-03-17 22:10:56 · 4633 阅读 · 2 评论 -
求解 -------------最大子段和问题
1.通过分治法求解最大子段和问题递归来求解:#include<stdio.h>#define n0 10int maxsum(int a[n0],int left,int right){ int j,sum; int center,leftsum,rightsum; int s1,s2,lefts,rights; if(left==right) { sum=...原创 2019-03-18 14:53:10 · 153 阅读 · 0 评论 -
基于c语言的并查集
#include<stdio.h>int f[100]={0},n,m,sum=0;int getf(int v){ if(f[v]==v) return v; else { f[v]=getf(f[v]); return f[v]; }}void merge(int x,int y){ ...原创 2021-01-14 11:38:34 · 71 阅读 · 0 评论 -
蓝桥杯------字符串转换----------求子串长度
轮换:串“abcd”每个字符都向右移位,最右的移动到第一个字符的位置,就变为“dabc”。这称为对串进行位移=1 的轮换。同理,“abcd”变为:“cdab”则称为位移=2 的轮换。void shift(char* s, int n){ char* p; char* q; int len = strlen(s); if(len==0) return; if(n<=0 ...原创 2019-03-20 22:00:12 · 291 阅读 · 0 评论 -
11.1红黑树的复习
红黑树产生的原因:之前我们学习过二叉查找树,大部分情况下,发现它的查询效率比单纯的链表和数组的查询效率要高很多(二叉查找树相当于二分查找)但如果按顺序插入的9,8,7,6,5,4,3,2,1 会发现二叉树变成链表样子,如果我们要查找1这个元素,查找的效率依旧会很低效率低的原因在于这个树并不平衡,为了保证查找树的平衡性,引入2-3路平衡查找树与红黑树但2-3查找树实现起来比较复杂,而且添加数据或删除数据的时候,为维护平衡问题可能会使得效率降低,所以引入红黑树红黑树主要是对2-3树进行编码,红黑树原创 2021-02-07 18:47:58 · 155 阅读 · 0 评论 -
10.2索引优先队列---了解
在之前实现的最大优先队列和最小优先队列,他们可以分别快速访问到队列中最大元素和最小元素,但是他们有一个缺点,就是没有办法通过索引访问已存在于优先队列中的对象,并更新它们。为了实现这个目的,在优先队列的基础上,学习一种新的数据结构,索引优先队列。接下来我们以最小索引优先队列举列。/** * 索引优先队列 * 增加或者删除数据时候,是通过pd指针的交换达到最大堆或最小堆 * 排序 排的不是items 而是pq */public class IndexMinPriorityQueue...原创 2021-02-04 16:47:28 · 195 阅读 · 0 评论 -
10.1 最大堆与最小堆构建
最大堆:// 最大优先队列代码 (最大堆)public class MaxPriorityQueue<T extends Comparable<T>> { //存储堆中的元素 private T[] items; //记录堆中元素的个数 private int N; public MaxPriorityQueue(int capacity) { items = (T[]) new Comparable[capacit.原创 2021-02-04 16:37:35 · 123 阅读 · 0 评论 -
9.2堆排序复习
通过上一节发现 ,堆要不就是最大堆,要不就是最小堆,不管是最大堆还是最小堆,根节点最大值或最小值堆排序就是通过这个特点1.构造堆;2.得到堆顶元素,这个值就是最大值;3.交换堆顶元素和数组中的最后一个元素,此时所有元素中的最大元素已经放到合适的位置;4.对堆进行调整,重新让除了最后一个元素的剩余元素中的最大值放到堆顶;5.重复2~4这个步骤,直到堆中剩一个元素为止。import java.util.Arrays;public class HeapSort { //对sourc原创 2021-02-04 16:10:56 · 70 阅读 · 0 评论 -
9.1堆的复习
堆:1.满足完全二叉树 2. 左右子结点 都小于父节点 或左右子结点 都大于父节点大堆:左右子结点 都小于父节点小堆:左右子结点 都大于父节点// 堆代码public class Heap<T extends Comparable<T>> { //存储堆中的元素 private T[] items; //记录堆中元素的个数 private int N; public Heap(int capacity) { ...原创 2021-01-28 19:50:53 · 85 阅读 · 0 评论 -
8.二叉树复习
构建二叉树:左子结点小于根节点,右子结点大于根节点// 二叉树代码public class BinaryTree<Key extends Comparable<Key>, Value> { //记录根结点 private Node root; //记录树中元素的个数 private int N; //获取树中元素的个数 public int size() { return N; } //向树原创 2021-01-28 19:45:53 · 64 阅读 · 0 评论 -
7.符号表复习
符号表最主要的目的就是将一个键和一个值联系起来,符号表能够将存储的数据元素是一个键和一个值共同组成的键值对数据,我们可以根据键来查找对应的值无序符号表// 无序符号表public class SymbolTable<Key, Value> { //记录首结点 private Node head; //记录符号表中元素的个数 private int N; public SymbolTable() { head = new No原创 2021-01-27 10:21:01 · 74 阅读 · 0 评论 -
6.队列复习
import java.util.Iterator;public class Queue<T> implements Iterable<T> { // 记录首结点 private Node head; // 记录最后一个结点 private Node last; //记录队列中元素的个数 private int N; public Queue() { head = new Node(null, null).原创 2021-01-27 10:13:41 · 103 阅读 · 0 评论 -
5.栈复习
import java.util.Iterator;public class Stack<T> implements Iterable<T> { //记录首结点 private Node head; //栈中元素的个数 private int N; public Stack() { head = new Node(null, null); N = 0; } //判断当前栈中元素个数是否为.原创 2021-01-27 10:11:07 · 76 阅读 · 0 评论 -
4.4链表常规例题
1. 单向链表反转:查看4.2节2. 查找链表的中间值 // 通过快慢指针,按照1:2的比例,找到中间结点 public static String getMid(Node<String> first){ Node slow=first; Node fast=first; while (fast!=null && fast.next!=null){ fast=fast.next.next;原创 2021-01-27 09:57:41 · 66 阅读 · 0 评论 -
4.3双向链表复习
import java.util.Iterator;public class TowWayLinkList<T> implements Iterable<T> { //首结点 private Node head; //尾结点 private Node tail; //链表的长度 private int N; public TowWayLinkList() { tail = null; he.原创 2021-01-27 09:24:45 · 94 阅读 · 0 评论 -
4.2单向链表复习
import java.util.Iterator;public class LinkList<T> implements Iterable<T> { //记录头结点 private Node head; //记录链表的长度 private int N; public LinkList() { head = new Node(null, null); N = 0; } // 清空链表 .原创 2021-01-27 09:20:44 · 85 阅读 · 0 评论 -
4.1顺序表复习
import java.util.Iterator;/** * 构建 顺序表 * * @param <T> */public class ArrayList<T> implements Iterable<T> { private T[] nodes; private int N; public ArrayList(int capacity) { nodes = (T[]) new Object[capacity].原创 2021-01-27 09:01:26 · 55 阅读 · 0 评论 -
3.排序算法复习
import java.util.Stack;public class Sort { // 插入排序 public static void InsSort(int[] a) { for (int i = 1; i < a.length; i++) { int n = a[i], j = i - 1; while (j >= 0 && n < a[j]) { .原创 2021-01-26 19:20:24 · 79 阅读 · 0 评论 -
2.查找算法复习
package com.heima.test2;public class Search { // 顺序查找法 public static int SeqSearch(int[] a,int key){ for(int i=0;i<a.length;i++) if(a[i]==key) return i; return -1; } //折半查找 public static int BinaryS.原创 2021-01-06 20:24:56 · 67 阅读 · 0 评论 -
1.Comparable与Comparator排序方式复习
1.Comparableimport java.util.*;public class ComparableTest implements Comparable<ComparableTest>{ private String name; private int age; public String getName() { return name; } public void setName(String name) {原创 2021-01-26 15:36:59 · 88 阅读 · 0 评论 -
数据结构————查找与排序
复习了几遍数据结构,线性表、栈、队列、串、数组、广义表、树、图、查找和排序。发现查找和排序算法很容易忘,而且这些算法又是很经典的,其他的掌握结构体和指针稍微好一点,想在此写下查找和排序算法,让自己更深刻,很多都不好写,所以有些就没写。查找1.基于线性表查找法 静态查找表 不对表做插入和删除 顺序查找法 : ...原创 2018-09-14 13:36:26 · 2283 阅读 · 0 评论