![](https://img-blog.csdnimg.cn/20190918135101160.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法
数据结构与算法
帅_shuai_
用自己的努力去收获自己的未来
展开
-
数据结构与算法学习(9)
数据结构与算法学习(9)一.暴力递归1.汉诺塔问题void Process(int i, string from, string to, string other) { if (i == 0) return; else { Process(i - 1, from, other, to); cout << "Move " + to_string(i) + " From " + from + " To " + to << endl; Process(i - 1,原创 2022-01-19 09:55:03 · 242 阅读 · 0 评论 -
数据结构与算法学习(8)
数据结构与算法学习(8)一.前缀树struct TrieNode{ int pass; int end; unordered_map<char, TrieNode*> nexts; TrieNode() :pass(0), end(0) {}};struct Trie{private: TrieNode* root;public: Trie() { root = new TrieNode(); } void Insert(string val) { Tr原创 2022-01-13 09:44:32 · 90 阅读 · 0 评论 -
数据结构与算法学习(7)
数据结构与算法学习(7)一.图1.图的定义class Node;class Edge {public: int weight; Node* from; Node* to; Edge(int weight,Node* from,Node* to):weight(weight),from(from),to(to){}};class Node {public: int val; int out; int in; vector<Node*>* nexts; vector原创 2022-01-10 09:48:24 · 515 阅读 · 0 评论 -
数据结构与算法学习(6)
数据结构与算法学习(6)一.二叉树的补充1.如何判断一棵树是否是搜索二叉树Info1* Process01(TreeNode* head) { if (head == nullptr) { return nullptr; } Info1* leftInfo = Process01(head->left); Info1* rightInfo = Process01(head->right); int minNum = head->val; int maxNum =原创 2022-01-07 10:37:01 · 254 阅读 · 0 评论 -
数据结构与算法学习(5)
数据结构与算法学习(5)一.链表的补充(获取两个链表(有环或无环)相交的交点)ListNode* GetLoopNode(ListNode* head) { ListNode* fast = head->next->next; ListNode* slow = head->next; while (fast != slow) { if (fast->next == nullptr || fast->next->next == nullptr) ret原创 2022-01-06 10:51:39 · 460 阅读 · 0 评论 -
数据结构与算法学习(4)
数据结构与算法学习(4)一.排序算法总结1.选择排序:时间O(n^2) 空间O(1) 不稳定2.冒泡排序:时间O(n^2) 空间O(1) 稳定3.插入排序:时间O(n^2) 空间O(1) 稳定4.快速排序:时间O(nlogn) 空间O(logn) 不稳定5.归并排序:时间O(nlogn) 空间O(N) 稳定6.堆排序:时间O(n*logn) 空间O(1) 不稳定二.哈希表和有序表1.哈希表操作O(1)2.有序表操作O(logn)三.链表1.单链表反转ListNode* Revers原创 2022-01-05 14:49:10 · 594 阅读 · 0 评论 -
数据结构与算法学习(3)
数据结构与算法学习(3)一.堆排序void HeapInsert(vector<int>& arr, int index) { while (arr[index] > arr[(index - 1) / 2]) { Swap(arr, index, (index - 1) / 2); index = (index - 1) / 2; }}void Heapify(vector<int>& arr, int index, int size)原创 2022-01-04 13:17:12 · 241 阅读 · 0 评论 -
数据结构与算法学习(2)
数据结构与算法学习(2)一.递归二.归并排序void Merge(vector<int>& arr, int left, int mid, int right) { vector<int> tmp(right - left + 1, 0); int p1 = left; int p2 = mid + 1; int i = 0; while (p1 <= mid && p2 <= right) { tmp[i++] = arr原创 2022-01-03 16:59:26 · 174 阅读 · 0 评论 -
数据结构与算法学习(1)
数据结构与算法学习(1)一.选择排序void Sort01(vector<int>& arr) { int size = arr.size(); for (int i = 0; i < size; i++) { int minIndex = i; for (int j = i + 1; j < size; j++) { if (arr[j] < arr[minIndex]) minIndex = j; } Swap(arr,原创 2022-01-03 10:07:18 · 242 阅读 · 0 评论 -
C#实现二叉查找树以及二叉树的删除
C#实现二叉查找树以及二叉树的删除首先需要知道二叉树的基础知识,比父节点小的元素放在左边,大的放在右边一.实现二叉查找树对二叉树进行遍历查找没有找到返回-1二.实现二叉树的节点删除二叉树的节点删除难点就在于要分类讨论的地方太多了,容易混乱1.前提是删除的节点得存在(使用上面提到的二叉查找树)2.首先需要找到需要删除的节点3.需要找到删除节点的父节点代码实现如下之后就需要分类进行讨论了代码里面的注释非常的详细了整体删除节点方法的代码如下 public void D原创 2020-08-14 21:22:13 · 424 阅读 · 0 评论 -
二叉树的建立及其递归遍历(C#实现)
二叉树的建立及其递归遍历(C#实现)首先建立一个二叉树,这里使用链表(也可以用数组但是数组太浪费空间)链表的节点 class Node { public Node leftNode; public Node rightNode; public int item; public Node(int item) { this.item = item; leftNode原创 2020-08-11 16:46:28 · 860 阅读 · 0 评论 -
C#队列(环形队列)
C#队列(环形队列)为什么需要环形队列我们之前用数组实现队列的时候,当我们弹出队列中的元素后,会剩余很多的空间,这样非常的浪费,所以用环形队列能一定程度上减少空间的浪费。代码实现如下 class MyQueue<T> { private int front; private int last; private int size;//最大容量 public int currCount;//当前元素个数原创 2020-08-09 09:31:19 · 554 阅读 · 0 评论 -
C#队列(链表实现)
C#队列(链表实现)明白了C#来实现链表的话,本篇文章就变得非常简单了如果还没有明白如何使用C#来实现链表的话建议看我之前的博客:C#实现链表的传送门如果不明白什么是队列:C#队列的传送门链表的话需要一个结点类(Node)队列的话自然需要一个队列的类(MyQueue)Node class Node<T> { public T item; public Node<T> next; public Node(T i原创 2020-08-08 15:30:21 · 458 阅读 · 0 评论 -
C#队列 (数组实现)
C#队列(数组实现)队列的实现首先定义队列的类然后是两个基础的方法(入队,出队)出队入队扩容的方法然后是测试最后是全部的代码using System;namespace ConsoleApp18{ class Program { static void Main(string[] args) { MyQueue<int> queue=new MyQueue<int>();原创 2020-08-05 17:54:13 · 2560 阅读 · 0 评论 -
C#用链表来实现堆栈
C#用链表来实现堆栈先来介绍一下堆栈:堆栈是一种数据结构。堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。下面是详细的代码介绍既然有链表了,那就需要指针,和之前的一样,我们声明一个节点类(Node)来模拟指针接下来写 堆栈链表(StackByLink)类,我们需要一个来判断链表是否为空的方法,和一个压入栈中的方法(Push)和一个出栈的方法(Pop)判断链表是否为空的方法压入栈中的方法(Push)出栈的方法(Pop)完成后我们来测试原创 2020-07-18 20:32:10 · 491 阅读 · 0 评论 -
c# 环形链表的实现(详细过程)
c# 环形链表的实现(详细过程)环形链表不过是在之前的单链表上做了一点点的改变(使单链表的首尾相连接)如图:一.首先先定义一个Node(结点)类二.定义链表linklist类firstNode表示第一个节点listNode表示最后一个节点我们要向环形链表中存数据,就要从最后一次存的位置继续添加元素,添加的元素又需要指向第一个元素,每次添加元素时记录一下这个位置,下一次就从这个位置继续添加元素完成后测试这里循环1000次来测试输出的结果我们可以看到循环到最后一个元素时又会回到第一原创 2020-06-30 17:12:22 · 1230 阅读 · 1 评论