自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(63)
  • 收藏
  • 关注

原创 033:排序,又见排序---函数模板

#include <iostream>using namespace std;bool Greater2(int n1,int n2) { return n1 > n2;}bool Greater1(int n1,int n2) { return n1 < n2;}bool Greater3(double d1,double d2){ return d1 < d2;}template <class T1,class T2>void

2022-04-07 22:33:29 675 1

原创 019:全面的MyString

#include <cstdlib>#include <iostream>using namespace std;int strlen(const char * s) { int i = 0; for(; s[i]; ++i); return i;}void strcpy(char * d,const char * s){ int i = 0; for( i = 0; s[i]; ++i) d[i] = s[i]; d[i] = 0; }int s

2022-04-06 14:12:13 252

原创 018:别叫,这个大整数已经很简化了

#include <iostream> #include <cstring> #include <cstdlib> #include <cstdio> using namespace std;const int MAX = 110; class CHugeInt { private: char buf[220]; void reverse() { int tmp; int len = strlen(buf); for

2022-04-05 14:20:45 448

原创 014:MyString

1、右边赋值字符串类型要进行重载,右边赋值是同类时要深拷贝。2、同时,复制构造函数需要重载,深拷贝。3、友元函数可以在类里面定义,是全局函数。(赋值重载时,忘记写返回值return (*this),本地是对的,但是提交会报错,不知道啥原因)参考:014 MyString#include <iostream>#include <string>#include <cstring>using namespace std;class MyString { ch

2022-04-04 18:19:48 897 2

原创 013:魔兽世界之一:备战

这里有两个类,武士类和阵营类,建议从main函数开始阅读。#include <iostream>#include <cstring>using namespace std;const int WARRIOR_NUM = 5;class Cheadquarter;class CWarrior{private: Cheadquarter * pheadquarter;//武士所属阵营的指针 int kindNo;//武士编号的种类 0 dragon 1 ...

2022-04-04 09:54:21 546

原创 证明:在任一含n个元素的堆中,至多有ceiling(n/(2^(h+1)))个高度为h的节点。

证明:当n = 1时,高度为h=0的结点的个数为1=ceiling(1/(2^(0+1)))。当n>=2时,任意给定一个n,用数学归纳法证明。1、base:当h=0时,即高度为0的结点就是叶子结点。根据《算法导论》习题6.1-7可知,叶子结点的数目为n-floor(n/2)=ceiling(n/2)=ceiling(n/(2^(0+1))),即满足上式。2、step:取k为满足0<=k<floor(log2N)的任意整数(注释:log2N是以2为底n的对数)。假设对于高度h=k的结

2021-12-06 22:07:22 1171

原创 快速排序正确性证明

//伪代码描述快排QUICKSORT(A, p,r)if(p < r) q = PATITION(A, p, r) QUICKSORT(A, p, q - 1) QUICKSORT(A, q + 1, r)PATITION()函数:参数含义:A是数组地址,p是数组左边的下标,r是右边的下标。作用是随机选pivot,小于等于pivot的数放左边,大于pivot的数放右边,返回pivot的下标。证明快速排序的正确性:1、对于元素个数为1的数组(即r-p=1),QUICKSORT()后

2021-12-06 10:33:02 1447 1

原创 单链表的划分

方法一:额外空间复杂度O(N),遍历链表,建立节点数组,利用荷兰旗问题中的方法划分数组,如何将数组中的节点成单链表。方法二:建立三个单链表,分别存储小于、等于大于X的节点。再将三个单链表串一起。法二也可分为两种:a、初始化六个节点为null。b、建立三个Node(0)。package class04P;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.StreamTokenizer;.

2021-10-22 22:18:36 207

原创 快慢指针寻找链表中点的不同情况分析

2021-10-22 16:12:44 112

原创 三种方法判断链表是否为回文结构

方法一:全部丢到栈中,然后依次取出与链表中的值比较。需要N个额外空间。方法二:利用快慢指针,找出链表中点位置,将链表后半部分依次压栈,再取出与链表的值比较。需要额外N/2个额外空间。方法三:利用快慢指针,找出链表中点位置,将链表后半部分翻转,依次比较两链表值,判断是否是回文结构后将翻转的链表还原。package class04P;import java.util.Stack;public class Code04P_IsPalindromeList { public static

2021-10-21 22:58:17 1492

原创 java打印有序链表的公共部分(StreanTokenizer的简单用法)

但是最后面打印了空白符,不清楚为什么也通过测试!package class04P;import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.StreamTokenizer;public class Code03P_StreamTokennier { public static StreamTokenizer st = new StreamTokenizer(new BufferedRea

2021-10-20 17:09:41 114

原创 回顾单链表、双向链表的翻转+打印链表公共部分

package class04P;public class Code02P_ReverseList { //下面是单链表的定义、翻转和打印 public static class Node{ public int val; public Node next; public Node(int val){ this.val = val; } } public static Node re

2021-10-20 10:42:30 88

原创 java中哈希表与有序表的使用

package class04P;import java.util.Comparator;import java.util.*;public class Code01P_HashAndTree { public static class Node{ public int value; public Node next; public Node(int vaule){ this.value = value; ...

2021-10-19 22:04:20 189

原创 java实现计数排序与基数排序

基数排序的正确性证明可以用数学归纳法,《算法导论》第三版习题8.3-3。里面需要一个概念:排序算法的稳定性。//计数排序package class03P;import java.util.Arrays;public class Code01P_CountSort { // 计数排序例子,如按给定一个数组,数组中的元素是员工的年龄,范围是0~200,数据大小限制在一定的范围内的排序 // 计数排序的时间复杂度是O(N) public static void countSo.

2021-10-18 23:21:01 102

原创 java比较器的简单使用

package class03P;import java.util.Arrays;import java.util.Comparator;import java.util.PriorityQueue;public class Code03P_Comparator { public static class Student{ public String name; public int id; public int age; .

2021-10-16 21:56:58 96

原创 java实现堆排序及其扩展题目

package class02P;import java.util.Arrays;public class Code03P_HeapSort { public static void heapSort(int[] arr){ int size = arr.length - 1; for (int i = 0; i < arr.length; i++) { heapInsert(arr, i); }

2021-10-15 15:24:33 84

原创 java实现基于荷兰旗问题的快速排序

1、先写一个稍微简单点的代码。这个排序是主要想法是:给定一个数组arr[n],把数组中小于arr[n]的数放左边,并记下左边的位置下标i;大于等于arr[n] 的放右边(arr[n]是不进行交换的);再把arr[n]与位置下标为i + 1的数进行交换。最后递归左边的数组和右边的数组。package class02P;import java.util.Arrays;public class Code06P_QuickSort1 { public static void quickSort1(

2021-10-12 23:50:32 92

原创 荷兰旗问题

问题一的代码:package class02P;import java.util.Arrays;public class Code05P_SimpleNetherlandsFlag { public static void SimpleNetherlandsFlag(int[] arr, int num){ int flag = -1; int i = 0; int tep; while(i < arr.length).

2021-10-12 11:01:47 88

原创 归并排序求解逆序对

打印所有的逆序对,并求出逆序对的总数。package class02P;import java.util.Arrays;public class Code02P_ReversePair { public static int ReversePair(int[] arr){ if(arr == null && arr.length < 2) return 0; return MergeSort(arr, 0, arr.length -

2021-10-11 23:43:59 101

原创 归并排序解最小和问题(Java)

给定一个n个元素的数组arr,arr[i]的最小和是指下标0到i-1上的小于arr[i]的所有元素之和。数组arr的最小和是指数组中每个元素的最小和的总和。参考:左程云)最新数据结构与算法基础到高级算法教程全家桶下面代码求的是数组的最小和:public class Code01P_MergeSort { public static void mergeSort(int[] arr){ if(arr == null || arr.length < 2){

2021-10-11 14:43:06 156

原创 Java基础知识笔记

1、自动类型转换。a、将 取值范围小的类型 自动提升为 取值范围大的类型。b、byte、short、char 运算时直接提升为 int。short s=1;s=s+1;//编译失败s=(short)(s+1);//编译成功但是+ +、- -不需要强制类型转换。short s=1;s+=1;//编译成功s++;//编译成功short a=127;a++;//编译成功,a等于-128...

2021-07-10 21:52:58 65

原创 模式匹配_KMP(草稿)

#include "string.h"#include "stdio.h" #include "stdlib.h" #include "math.h" #include "time.h"#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define MAXSIZE 100 /* 存储空间初始分配量 */typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等

2021-06-10 18:02:03 55

原创 无向图的邻接表表示法

总结:1、邻接表表示由表头结点、邻接结点组成;2、为了方便插入边(即将两个结点连起来)的操作,定义边(两个邻接点下标+边权重);3、表头结点的权重存放的是结点的权重,邻接点的权重存放的是边权重!//无向图的邻接表表示法#include <stdio.h>#include <stdlib.h>#define MaxVertexNum 100typedef int Vertex;typedef int WeightType;typedef char DataType.

2021-04-19 21:23:19 3163 2

原创 图的邻接矩阵表示法

很简单,两部分。图GNode包含:1、二维矩阵G[][]2、顶点数3、边数4、结点的数据(可选)边ENode包含:1、是那两个结点的边(边的位置)2、边的权重weight通过Insert函数把边ENode插入图GNode中。//图的邻接矩阵表示法 #include <stdio.h>#include <stdlib.h>#define MaxVertexNum 100#define Infinity 65535typedef int Vertex;t

2021-04-11 22:09:59 269

原创 05-树8 File Transfer (25 分) 按秩归并

#include <stdio.h>typedef int ElementType;typedef int SetName;typedef ElementType SetType[10003];SetName Find(SetType S,ElementType X){ while(S[X]>=0) X=S[X]; return X;}void Union(SetType S,SetName Root1,SetName Root2){

2021-04-09 21:19:07 68

原创 并查集及其运算

要点:集合的查找与并中,下标可理解为结点元素的地址,Parent可理解为指向下一个地址的指针。//集合及运算 #include <stdio.h>#include <stdlib.h>typedef int ElementType;typedef struct{ ElementType Data; int Parent;}SetType;int MaxSize;//MaxSize为最大的下标 int Find(SetType S[],ElementType X).

2021-04-09 14:47:41 114

原创 (完整版C语言代码)哈夫曼树的构造

图:最终构成的哈夫曼树//哈夫曼树的构造#include <stdio.h>#include <stdlib.h>#define MinSize -1000typedef struct HTNode *HuffmanTree;struct HTNode{ int Weight; HuffmanTree Left; HuffmanTree Right;};typedef HuffmanTree ElementType;typedef struct HeapNo.

2021-04-09 00:32:34 1660

原创 05-树7 堆中的路径 (25 分)+插入误解成最大堆的建立

//通过Insert函数建最大堆#include <stdio.h>#include <stdlib.h>#define MinSize -10001typedef struct HeapNode *MinHeap;struct HeapNode{ int *Elements; int Size; int Capacity;};MinHeap Create(int N){ MinHeap H=(MinHeap)malloc(sizeof

2021-04-08 16:54:57 64

原创 最大堆的基本操作

关于最大堆的DeleteMax函数,运行其中for循环步骤:1、判断条件: root的孩子是否存在2、若存在,找到最大的孩子3、判断最大孩子与item的大小4、若item大 break,此次没改变root的地址,结束for循环,将root结点赋值5、若item小,把大孩子赋给root结点。循环末尾赋值: root改为大孩子的下标,进行下次循环6、循环到4的情况,或:root的孩子不存在,结束循环, root结点赋值。//最大堆的基本操作#include <stdio.h>#in

2021-04-07 16:28:31 191

原创 04-树4 是否同一棵二叉搜索树+bug总结

看完小白专场,感觉也没啥难的。就自己开始写了。但是“最大N,多组合”的测试点一直通过不了,debug了一下午,一直找不到错误,都快崩溃了。于是逐一得把自己的代码换成老师的代码,寻找bug在哪里(下面注释的代码为老师的函数代码)。我常见的bug总结:1、敲代码时,字母经常敲错。2、if(T)、while(!T)之类的经常弄反了这个题目bug总结:1、漏了ResetTree函数2、鬼使神差地if(i=0;i<=N;i++),其实只要输入N个数据3、需要用scanf输入N个数据,提前retur

2021-04-06 18:27:39 315 3

原创 AVL树的插入函数+CSDN去水印办法+04-树5 Root of AVL Tree (25 分)

该图是把i=0,1,2,3,4依次插入空树所形成的AVL树,前序遍历结果是1 0 3 2 4。//AVL树的插入函数 #include <stdio.h>#include <stdlib.h>typedef int ElementType;typedef struct AVLNode *Position;typedef Position AVLTree;struct AVLNode{ ElementType Data; AVLTree Left; AVLTree.

2021-04-06 11:09:28 130

原创 二叉搜索树的插入与删除+递归的数学原理

之前一直不太会用递归,想知道递归对应的数学原理。现在大概明白了。递归的数学原理是:数学归纳法。以下面二叉搜索树的插入为例:Insert(X,BST)的作用:是创建一个存储X数据的结点,并按二叉搜索树的规则插入,并返还二叉搜索树的根结点(简洁地说就是插入元素,返回根结点)。1、二叉树有0个结点,即BST为空,Insert函数代码成立。2、二叉树有一个结点时,Insert函数代码成立。3、假设Insert函数对小于等于n个结点的二叉树都成立。根据假设,则Insert函数对于有n+1个结点的二叉树成立

2021-04-05 11:23:27 239 1

原创 基本的非递归后序遍历+根据层序遍历改写的非递归前、中、后序遍历

讨论3.4 如何用堆栈实现后序遍历的非递归程序(来源与慕课陈越姥姥的《数据结构》)参考要点:(1) 借助堆栈实现前序遍历、中序遍历非递归程序的本质是利用堆栈模拟递归函数调用时的入栈和出栈过程。而前序遍历、中序遍历和后序遍历在递归函数执行时,结点(作为函数参数)的入栈和出栈过程是完全一样的。(2) 前序遍历是在结点入栈时输出结点信息,然后开始分别对该结点左右子树的遍历;而在中序遍历中,结点出栈时表明刚完成对该结点左子树的遍历,此时可输出该结点信息。(3) 后序遍历必须在左右子树均输出

2021-04-05 08:47:54 323

原创 03-树3 Tree Traversals Again (scanf的思考与递归不熟练)

#include <stdio.h>#include <stdlib.h>typedef int Tree;struct TNode{ int Data; Tree Left; Tree Right;}T[30];int *PreorderQ,P=-1;int *InorderQ,I=-1;int N,check=0;void GetPreQandInQ(){ scanf("%d",&N); PreorderQ=(int*)malloc(sizeo

2021-04-04 16:06:30 71

原创 03-树2 List Leaves (25 分)

#include <stdio.h>#define Null -1typedef int Tree;struct TNode{ Tree Left; Tree Right;}T[10];//全局变量,在定义的函数内部也可以调用 Tree BuildTree(struct TNode T[]){ int N; Tree Root=Null; char cl,cr; scanf("%d",&N); int check[N]; for(int i=0;i<N;

2021-04-03 17:09:03 45

原创 03-树1 树的同构 判断树是否同构的略简单方法

如何判断树的同构?分情况讨论:1、两颗树都为空,同构。2、两棵树有一颗为空,不同构。3、两棵树都不为空。(a) 根结点数据不相同(b) 根结点数据相同。要是r1的左子树与r2的左子树同构&&r1的右子树与r2的右子树同构,或r1的左子树与r2的右子树同构&&r1的右子树与r2的左子树同构,则同构。即:return (Ismorphic(T1[r1].Left,T2[r2].Right)&&Ismorphic(T1[r1].Right,T2[r2]

2021-04-03 14:21:56 1619

原创 Pop Sequence

#include<stdio.h> int main() { int N,M,K; int i,j,a[1000]; scanf("%d %d %d",&M,&N,&K); for(i=0;i<K;i++){ for(j=0;j<N;j++)scanf("%d",&a[j]); int stack[1000]={0},top=0;//创建一个栈 int num=1; j=0,stack[0]=num; while(j

2021-04-01 16:32:56 83

原创 (完整版代码)二叉树的层次生成、递归和非递归遍历、队列和堆栈层次遍历及基本操作

Talk is cheap, show me your code!#include <stdio.h>#include <stdlib.h>#define NoInfo 0typedef int ElementType;typedef struct TNode *Position; typedef Position BinTree;struct TNode{ ElementType Data; BinTree Left; BinTree Right;};ty

2021-03-31 22:50:50 196

原创 02-线性结构3 Reversing Linked List及踩的坑

踩过的坑:1、可能会出现输入的数据不在链表节点上。2、看错题目成翻转前K个元素。正确的题意:每隔k个节点翻转一下,输出翻转结果。我把翻转前K个元素的函数进行改编,写成一个独立的函数。一次又一次地输出翻转后的K个元素,直到剩余元素小于K个。我方法应该不好,只能不断地调试,直到AC。#include <stdio.h>#define MaxSize 100003typedef int ElementType;typedef int Ptr;typedef struct node{

2021-03-31 00:08:20 98

原创 栈在括号匹配中的应用

//栈在括号匹配中的应用 #include<stdio.h>#include<stdlib.h>typedef int Position;typedef char ElementType; struct SNode{ ElementType *Data; Position Top; int MaxSize;}; typedef struct SNode *Stack;Stack CreatStack(int MaxSize);bool IsFull(Stac

2021-03-30 18:39:30 91

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除