数据结构DS
am brother
这个作者很懒,什么都没留下…
展开
-
【排序】归并排序
归并排序算法思想归并排序的思想就是利用分治算法。分治算法: 将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解后进行合并,就可以得到原问题的解。归并算法的实现步骤:分解,将要解决的问题划分为若干个规模较小的同类问题求解,当子问题划分得到足够小时,用较简单的方法解决合并,按原问题的要求,将子问题的解逐层合并构成原问题的解。归并排序...原创 2020-05-02 17:39:22 · 164 阅读 · 0 评论 -
【DS】带头双向循环链表之C语言实现
带头双向循环链表的实现DList.h文件#pragma once#include <stdio.h>#include <assert.h>#include <malloc.h>typedef int DLTDataType;typedef struct DListNode // 循环链表节点{ DLTDataType _data; ...原创 2020-02-03 21:22:30 · 202 阅读 · 0 评论 -
【DS】栈和队列的实现
栈的代码实现:#include <stdio.h>#include <cstdbool>#include <assert.h>// 栈适合用数组实现,队列不适合找尾,出栈的时候,找尾麻烦。所以数组实现相较于链表更加简单方便。typedef int STDataType;typedef struct Stack{ STDataType* _a...原创 2020-02-03 12:18:16 · 115 阅读 · 0 评论 -
【排序】冒泡排序
冒泡排序冒泡排序的三种写法void Swap(int* num1, int* num2){ int temp = *num1; *num1 = *num2; *num2 = temp;}void BubbleSort1(int* arr, int n){ int end = n; // n个数 数组的下标是[0,n-1];,数组的下标取不到n while (end >...原创 2019-12-08 21:50:38 · 384 阅读 · 0 评论 -
【排序】堆排序
堆排序直接上代码说话:void Swap(int* num1, int* num2){ int temp = *num1; *num1 = *num2; *num2 = temp;}void AdjustDown(int* arr, int n, int parent) //向下排序法{ int child = 2 * parent + 1; while (child &...原创 2019-12-08 21:09:12 · 184 阅读 · 0 评论 -
【排序】选择排序
选择排序直接上代码:void Swap(int* num1, int* num2){ int temp = *num1; *num1 = *num2; *num2 = temp;}void SelectSort(int *arr, int n){ int begin = 0; int end = n - 1; int maxindex = 0; int mininde...原创 2019-12-08 20:36:16 · 279 阅读 · 0 评论 -
【排序】插入排序
插入排序void InsertSort(int* arr, int n){ for (int i = 0; i < n - 1; i++) { int end = i; int tmp = arr[end + 1]; //临时变量 while (end >= 0) { if (tmp < arr[end]) // 将arr[end+1]覆盖 ...原创 2019-12-08 20:24:24 · 126 阅读 · 0 评论 -
二叉树链式结构的实现以及三种遍历、树的所有节点、叶子结点、非叶子节点等节点相关计算
二叉树链式结构的实现二叉树链式结构的遍历所谓遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问题。 遍历是二叉树上最重要的运算之一,是二叉树上进行其它运算之基础。前序/中序/后序的递归结构遍历:是根据访问结点操作发生位置命名NLR:前序遍历(Preorder Traversal 也叫做先序遍历)— ...原创 2019-11-03 00:07:29 · 1335 阅读 · 2 评论