自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Heap堆排序

①概念1)堆的结构:1.物理结构:一维数组2.逻辑结构:一颗完全二叉树2)堆的特性:1.结构性:用数组表示的完全二叉树2.有序性:任一结点的关键字是对于其子树所有结点的最大值(最小值)·大顶堆:双亲结点 大于 左右子树上所有结点·小顶堆:双亲结点 小于 左右子树上所有结点3.双亲结点与左右孩子结点的关系:leftchild = parent * 2 + 1rightchild = parent * 2 + 2parent = (child - 1) / 2

2022-04-12 21:40:12 659

原创 希尔排序实现

/*②希尔排序(是直接插入排序的优化)时间复杂度:o(n^(1.3))1):在gap减小到1的过程中,大概要循环log2(n)次2):在移动数据的过程中: 1.如果gap比较大,则大概移动o(n)即可 2.如果gap比较小,由于此时数组已经接近有序,故也大概是o(n)3):所以时间复杂度大概是 o( n * (log2(n)) ) = o(n^(1.3))思路步骤: 1、先进行预排序,将较大的数以"大步伐"尽可能快的跳到最后面(而在 直接插入排序中,较大的数得一步一步往.

2022-04-10 16:02:47 875

原创 直接插入排序

/*①直接插入排序时间复杂度:o(n^2)当原来的数组是逆序排列的时候,要移动数据1+2+3+...+(n-1)次,即o(n^2)当原来的数组是顺序排列的时候,每次都不需要移动数据,直接插入即可,即o(n)*/void InsertSort(int* a,int n){ int i; //n是数组的长度 //进行第一次循环时,是将a[1]上的数据插入到其之前的有序数组中 //进行到第n-2次循环时,是将a[n-1]上的数据(也是最后一个数据)插入到其之前的有序数组中 for (i = .

2022-04-10 16:01:56 419

原创 根据输入的字符串建立二叉树

①题目②代码#include<stdio.h>typedef struct TreeNode{ struct TreeNode* left; struct TreeNode* right; char val;}TNode;TNode* CreateTree(char* a,int* pi){ if (a[*pi] == '#'){ ++(*pi); return NULL; } TNode* root = (TNode*)malloc(sizeof(

2022-04-06 20:34:17 4593

原创 二叉树基本定义

①头文件BinaryTree.h#pragma once //保证头文件只被 编译一次#include<stdio.h>#include<stdbool.h>#include<assert.h>#include<stdlib.h>typedef char BTDatatype;typedef struct BinaryTreeNode{ struct BinaryTreeNode* left; struct BinaryTreeNode

2022-04-04 21:54:43 676

原创 栈与队列LeetCode刷题

①括号匹配问题1)题目链接题目链接https://leetcode-cn.com/problems/valid-parentheses/2)typedef char STDatatype;typedef struct Stack{ STDatatype* a; //栈起始位置 int top; //栈顶位置 int capacity; //栈的容量}ST;void StackInit(ST* ps);void StackDestroy(ST* ps);void

2022-03-25 09:51:00 1744

原创 队列基本功能实现

①头文件:Quene.h#pragma once //防止头文件被重复包含#include<stdio.h>#include<stdbool.h>#include<assert.h>#include<stdlib.h>typedef int QDatatype; //1)如果采用数组来实现队列,则数据出队列非常麻烦,需要挪动数据,故不使用数组//2)采用单链表来实现队列,无论尾插还是头删都很方便typedef struct Qu

2022-03-22 18:59:18 122

原创 栈Stack基本功能实现

①头文件:#pragma once //防止头文件被重复包含#include<stdio.h>#include<stdbool.h>#include<assert.h>#include<stdlib.h>//如果采用链表来实现栈,//1)若采用尾插和尾删来操作栈,则需要使用双向链表来实现。//2)若采用头插和头删来操作栈,可以使用单链表来实现typedef int STDatatype;typedef struct Stack{

2022-03-22 18:56:46 136

原创 寻找环形链表中,链表开始入环的第一个节点

题目链接https://leetcode-cn.com/problems/linked-list-cycle-ii/结论:假设快指针fast与慢指针slow在环中相遇时所指向的节点为meet,则一个指针从meet开始走,另一个指针从head开始走,两个指针必定在链表开始入环的节点begin 处相遇。证明如下:假设链表中环总长度为C,从begin到meet距离为X,从head到begin距离为L.slow指针和fast指针相遇时,fast走的距离一定是slow的两倍,故有:2 *(L +.

2022-03-21 19:20:28 198

原创 判断链表中是否有环

题目链接https://leetcode-cn.com/problems/linked-list-cycle/bool hasCycle(struct ListNode *head) { struct ListNode* slow = head; struct ListNode* fast = head; //①假设链表不存在环: //1.当链表节点总个数为奇数个N时,则第二个节点到尾节点共有N-1偶数个节点(包括第二个节点) //则经过有限次2连跳,快指针将到

2022-03-20 20:47:00 1419

原创 合并两个有序链表

题目链接https://leetcode-cn.com/problems/merge-two-sorted-lists/实现方法:采用尾插法​//思想:使用尾插法来实现,每次从两个链表中选择较小的那个节点尾插入新链表中struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2){ //如果两个链表中有一个为空链表,则返回另一个,同时也可以实现两个都是空链表时返回NULL if(li

2022-03-20 20:40:34 377

原创 查找链表的中心节点

题目链接https://leetcode-cn.com/problems/middle-of-the-linked-list/解决方法:采用快慢指针实现struct ListNode* middleNode(struct ListNode* head){ //采用快慢指针来实现 struct ListNode* slow = head; struct ListNode* fast = head; //即使链表一开始只有一个节点,由于此时fast-next = NU

2022-03-20 20:27:20 360

原创 反转链表的实现

题目链接1)解决方法一:采用头插法实现struct ListNode* reverseList(struct ListNode* head){ //采用头插法来实现 struct ListNode* cur = head; struct ListNode* newhead = NULL; while(cur){ struct ListNode* next = cur->next; cur->next = newhe..

2022-03-20 20:09:56 78

原创 带头双向循环链表

①头文件List.h#pragma once#include<stdio.h>#include<stdlib.h>#include <assert.h>typedef int LTDataType;//双向链表结点结构typedef struct ListNode{ struct ListNode* prev; struct ListNode* next; LTDataType data;}ListNode;ListNode* List

2022-03-18 22:00:55 266

原创 不带头结点单向链表

①节点定义:struct SListNode{ SLTDataType data; struct SListNode* next;};②创造一个新结点函数SLTNode* CreateSListNode(SLTDataType x){ //开辟一个新结点,并存储要插入的数据x,以及将新结点指向NULL SLTNode* newnode = (SLTNode*)malloc(sizeof(SLTNode)); newnode->data = x; newnode->

2022-03-17 22:38:52 487

空空如也

空空如也

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

TA关注的人

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