
数据结构
数据结构
流年玄月
初闻不知曲中意,再闻已是曲中人
展开
-
【数据结构】二叉树的实现--需要时ctrl+c
#include <stdio.h>#include <assert.h>#include <string.h>typedef char BTDataType;typedef struct BinaryTree{ struct BinaryTree* left; struct BinaryTree* right; BTDataType data;}BTNode;//初始化BTNode* BTCreate(BTDataType x){ B..原创 2022-02-02 22:47:34 · 690 阅读 · 0 评论 -
【数据结构】 -- 深究“向下建堆法”的时间复杂度为何是O(N)?
在正常排序的二叉树中,有满二叉树与完全二叉树两种,他们之间相差X个结点。如果我们要继续排序,就要用到大小堆的方法。这里我问一个问题:要建立顺序数组,应该用到哪个堆呢?答案是大堆,而不是小堆!为什么?因为大堆可以把最大值找出来,赋值给新的数组后与最后一个值交换隐藏即可,第二次排序即次大。用小堆的话很难找到最大值,因为左孩子有孩子之间无法排序(按本题思路为前提)。而排序的过程就是建堆,为什么建堆的复杂度是0(N)呢?现在我们来计算一下:我们可以先想象一下最坏的情况,就是满二叉树,每一个结点,原创 2022-02-03 12:09:57 · 1311 阅读 · 0 评论 -
【数据结构算法】-- C语言
用C语言实现的数据结构算法,下面来一个一个讲解:(Swap函数在末尾,一个换位函数,理解即可)1,插入排序顾名思义就是一个值从前面开始一个一个插入,插入的时候排序一次,有 n 个数就排序 n 次思想简单所以不介绍,代码如下:void InsertSort(int* a, int n){ for (int i = 0; i < n - 1; i++) { int end = i; int tmp = a[end + 1]; while (end >原创 2022-02-10 23:17:55 · 824 阅读 · 0 评论 -
【数据结构】堆 -- 大堆小堆
堆的物理结构其实是数组,逻辑结构则是二叉树。堆的调整算法有多种,其中典型的是:大堆 和 小堆。小堆的意思就是:父亲位,比孩子位,要小;大堆:父亲位,比孩子位,要大。下面我们来用图说明:给一组数组:int a[] = { 27,15,19,18,28,34,65,49,25,37 };按照小堆的方式来排序:由于我们父亲的两个孩子位都是小堆排序,所以我们可以直接从头开始进行一次排序即可。#include <stdio.h>void Swap(int* pa,原创 2022-02-01 15:35:52 · 3133 阅读 · 0 评论 -
【数据结构】双向链表的实现
本次双向链表分为2个源文件、1个头文件:test.c#include "DList.h"void Teat1(){ ListNode* plist = ListInit(0); ListPushBack(plist, 1); ListPushFront(plist, 2); ListNode* pos = ListFind(plist, 1); ListInsert(pos->prev, 3); //ListPopBack(plist); //ListPopFron原创 2022-01-28 17:13:38 · 746 阅读 · 0 评论 -
【数据结构】-- 明解 ‘ 希尔排序 ‘
100年前,人类发明了味精;20年前,太太乐创造了鸡精;xxx年前,希尔创造了希尔排序:希尔排序的思想就是:把一个数组拆分成多个组进行排序,先分组再进行插入排序,然后缩小组间的间隔进行排序,这一步会使得整个数组接近排序,这也称为预排序。其中的组不是连续的数值组成,而是间隔 gap 个后的下一个数值组成。当 gap == 1 时,整个数组已经排序成功。为什么用希尔排序:答案当然是快啦,插入排序的时间复杂度为 O(N^2),而希尔排序的时间复杂度为O(N^1.3—N^2)希尔原创 2022-02-07 23:05:10 · 1147 阅读 · 0 评论 -
【数据结构】力扣刷题
989. 数组形式的整数加法对于非负整数X而言,X的数组形式是每位数字按从左到右的顺序形成的数组。例如,如果X = 1231,那么其数组形式为[1, 2, 3, 1]。给定非负整数 X 的数组形式A,返回整数X + K的数组形式。来源:力扣(LeetCode)链接:https ://leetcode-cn.com/problems/add-to-array-form-of-integer著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。/** *...原创 2022-01-22 22:05:34 · 114 阅读 · 0 评论 -
【初阶数据结构】模拟顺序表的开辟
1、首先定义结构体:typedef int Seqdata;typedef struct SeqList{ Seqdata* data; int sz; int capacity;}SeqList; SeqList s; //定义结构体2、初始化结构体: SeqListInit(&s); //初始化结构体注意:这里为清晰,分为2个源文件,1个头文件操作//初始化结构体void SeqListInit(SeqList* pa){ .原创 2022-01-21 17:27:37 · 467 阅读 · 0 评论 -
【数据结构】oj练习
1、合并两个有序链表:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) { if (list1 == NULL) return list2; if (list2 == NULL) return list1; struct ListN..原创 2022-01-25 23:51:46 · 334 阅读 · 0 评论 -
【数据结构】单链表 -- 无头单项链表
无头单项链表分为2个源文件,一个头文件,增删查,没有改,改可以在查直接改,增加有头点尾增加和头点尾删除;test.c:#include "SList.h"void Test1(){ SLTNode* plist = NULL; SLTPrint(plist); SLTPushFront(&plist, 1); SLTPrint(plist); SLTPushFront(&plist, 2); SLTPrint(plist); SLTPushFront(&am原创 2022-01-24 15:49:41 · 296 阅读 · 0 评论