![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
【数据结构】
吉大秦少游
吉林大学硕士,研究兴趣为芯片数字设计
展开
-
不相交集(并查集)
文章目录概念概念不相交集(disjoint set)概念来自于等价类。等价类的一些基础知识如下:关系R:对于集合S中每对元素(a,b),a R b为true或者false。若a R b为true,则说a与b有关系。等价关系:关系R是集合S上的等价关系,当且仅当:R是对称的(symmetric)、自反的(reflexive)、传递的(transitive)。— 对称:a R b <...原创 2019-10-23 10:33:08 · 611 阅读 · 0 评论 -
集合概念、常用操作及实现
文章目录概念及常用操作实现C++实现Python实现概念及常用操作一般意义的集合和我们高中学习的集合基本是一样的,也就是具有无序性、确定性和唯一性。但在编程中也有有序的集合。常用操作是求差集、补集、并集等等。实现常用语言的实现方式如下:C:自己根据原理手写一个C++:STL set (底层采用红黑树实现)Java:setPython:setC++实现#include &l...原创 2019-10-23 09:54:53 · 335 阅读 · 0 评论 -
散列的核心知识
文章目录散列的概念两个关键问题散列的实现C++实现python实现散列的概念目标和手段:为了更快的查找-O(1)拿空间换时间散列:键值对思想(key-value pair)两个关键问题1. 什么是好的散列函数?快速计算元素尽可能散开2. 有哪些方法可以解决冲突开放定址法如果要坐的位置已有元素,则依次往后坐分离链法所有要坐该位置的元素都在该位置依次形成单链表...原创 2019-10-23 09:15:09 · 323 阅读 · 0 评论 -
优先队列的多种语言实现形式
文章目录优先队列的定义实现c实现C++实现python实现优先队列的定义priority queue是出队的时候永远让具有最高或者最低优先级的数据先出队,而入队不做要求。即:出队:最高(最低)优先级的元素入队:无特别要求现实的典型实例是医院就诊优先救治病情最危急的病人,银行优先处理高级客户等等。实现c实现c语言实现优先队列可以使用最小堆。要理解最小堆首先要知道什么是最小树。最小...原创 2019-10-22 15:46:11 · 262 阅读 · 0 评论 -
《数据结构与算法实战-周强-2.2》——大炮打蚊子
文章目录题目分析代码题目现在,我们用大炮来打蚊子:蚊子分布在一个M×N格的二维平面上,每只蚊子占据一格。向该平面的任意位置发射炮弹,炮弹的杀伤范围如下示意:OOXOO其中,X为炮弹落点中心,O为紧靠中心的四个有杀伤力的格子范围。若蚊子被炮弹命中(位于X格),一击毙命,若仅被杀伤(位于O格),则损失一半的生命力。也就是说,一次命中或者两次杀伤均可消灭蚊子。现在给出蚊子的分布情况以及连续k...原创 2019-09-29 20:13:50 · 826 阅读 · 0 评论 -
《数据结构与算法实战-周强-3.4》——简单模拟单队列排队
文章目录题目分析代码题目用程序简单模拟一个单队列多窗口的排队模式:设某银行有一个固定能容纳N个顾客的等候区,顾客想进银行,若等候区有空则可进,否则被拒绝进入。每当银行柜员叫号时,等候区中最先进入的顾客离开等候区前往柜台办理业务,若叫号时等候区无人,则此次叫号作废。输入格式:第一行输入一个不大于20的正整数N,表示银行等候区能容纳的人数,接下来用若干行表示依时间顺序先后发生的“顾客想进...原创 2019-09-29 20:18:17 · 1061 阅读 · 0 评论 -
数据结构与算法实战-周强》——N进制高精度加法
文章目录题目分析代码题目分析需要考虑输入的两个加数的几种情况:位数多的+位数少的,位数相等进行相加,同时还需要考虑进位。最开始加完之后的数据用reverse反转,奇怪的是怎么都反转的不对(实际上看起来像是失效了),最后换成用字符数组处理。代码#include <iostream>#include <string>#include <algorithm&...原创 2019-09-30 16:15:28 · 632 阅读 · 0 评论 -
二叉树的C实现及前序遍历
// 二叉树的C 实现,前序遍历#include <stdio.h>#include <stdlib.h>typedef int Elem;struct BinNode{ Elem data; struct BinNode* left; struct BinNode* right;};typedef struct BinNode* Bi...原创 2019-10-04 21:31:54 · 229 阅读 · 0 评论 -
二叉树的C++、Python实现及遍历
// 二叉树的先序中序后序实现#include <iostream>using namespace std;template<class Elem>struct BinNode{ Elem data; BinNode<Elem>* left; BinNode<Elem>* right; BinNode(El...原创 2019-10-04 21:32:41 · 249 阅读 · 0 评论 -
BST的C++实现
BST首先是二叉树,对应的二叉树定义和常用操作封装在以下头文件"bintree.h"// 二叉树的头文件#ifndef bintree_h#define bintree_h#include <iostream>using namespace std;template<class Elem>struct BinNode{ Elem data; ...原创 2019-10-04 21:35:01 · 1158 阅读 · 0 评论 -
《数据结构与算法实战-周强-4.1》——统计无后代的人数
实现代码:// 二叉树的先序中序后序实现#include <iostream>using namespace std;template<class Elem>struct BinNode{ Elem data; BinNode<Elem>* left; BinNode<Elem>* right; Bin...原创 2019-10-04 21:39:45 · 264 阅读 · 0 评论 -
平衡二叉树的C++实现
AVL需要在BST的基础上进行实现,因此首先需要将BST的常用操作封装在头文件<bstree.h>中。而BST又依赖于二叉树的实现,因此二叉树的实现封装在<bintree.h>中。如下:<bintree.h>// 二叉树的头文件#ifndef bintree_h#define bintree_h#include <iostream>u...原创 2019-10-05 15:01:01 · 795 阅读 · 0 评论 -
队列的C、C++实现
C#include <stdio.h>#include <stdlib.h>struct Queue{ int *data; int capacity; int front; int rear;}; void init(struct Queue *pq,int capacity){ pq->capacity=capacity; pq->...原创 2019-09-25 20:26:27 · 211 阅读 · 0 评论 -
《数据结构与算法实战-周强-3.3》——后缀式求值
文章目录题目:分析实现Python实现C++实现题目:我们人类习惯于书写“中缀式”,如 3 + 5 * 2 ,其值为13。 (p.s. 为什么人类习惯中缀式呢?是因为中缀式比后缀式好用么?)而计算机更加习惯“后缀式”(也叫“逆波兰式”,Reverse Polish Notation)。上述中缀式对应的后缀式是: 3 5 2 * +现在,请对输入的后缀式进行求值。输入格式:在一行中输入一...原创 2019-09-19 22:32:14 · 1671 阅读 · 0 评论 -
《数据结构与算法实战》3-2:链表
链表是学数据结构的童鞋最先接触的一种数据结构。C语言的链表需要自己用指针和结构体去构造,也最能训练队链表的理解程度。C++可以使用STL中的list实现,而Python则可以直接使用列表类型,列表类型可以当做数组、顺序表、链表。下面是C的实现方式#include <stdio.h>#include <iostream>#include <stdlib.h>...原创 2019-09-17 22:47:59 · 232 阅读 · 0 评论 -
数据结构——链表的c实现(1)
链表产生的原因:对于比较初级的编程学习者,在存储数据时,比较熟悉的是利用数组进行存储。但是静态数组需要在存储时指定需要存储的数量,这在生产生活中不具有现实意义,因此,可以使用动态数组的方法(malloc函数)申请内存,这是可以的。但是使用动态数组存在以下几个问题:1. 当数据达到一定量,需要重新申请内存,然后将原来的数据复制到新的内存空间中,数据的复制需要时间,然后还需要将原...原创 2018-06-17 23:04:07 · 451 阅读 · 0 评论 -
数据结构——链表的c优化(2)
上一篇文章,已经初步会构造“链表”这种数据数据结构,本文主要讲一下构造的链表如何进行优化。链表代码如下: #include <stdio.h> #include <stdlib.h> #include "node.h" /* run this program using the console pauser ...原创 2018-06-18 00:25:10 · 613 阅读 · 0 评论 -
数据结构——链表的c查找,删除,释放(3)
#include <stdio.h> #include <stdlib.h> #include "node.h" /* run this program using the console pauser or add your own getch, system("pause") or input loop */ ...原创 2018-06-18 09:36:05 · 450 阅读 · 0 评论 -
C语言进阶-第四周:利用链表逆序输出(10分)
逆序输出(10分)题目内容:你的程序会读入一系列的正整数,预先不知道正整数的数量,一旦读到-1,就表示输入结束。然后,按照和输入相反的顺序输出所读到的数字,不包括最后标识结束的-1。输入格式:一系列正整数,输入-1表示结束,-1不是输入的数据的一部分。输出格式:按照与输入相反的顺序输出所有的整数,每个整数后面跟一个空格以与后面的整数区分,最后的整数后面也有...原创 2018-06-18 09:58:48 · 2441 阅读 · 1 评论 -
数组和链表的实例讲解——以Facebook为例
数组支持随机访问,而链表只能顺序访问。那在实际使用中什么样的场合下该使用数组,或者链表呢?1、假设你要编写一个记账的应用程序。包含买杂货、看电影和交会费。你每天都将记录所有的支出,并在月底统计支出,算算当月花了多少钱。因此,你执行的插入操作很多,读取操作很少,该使用数组还是链表呢? Ans:实际上每天都要添加支出项,月底读取支出一次。数组的读取速度快,插入速度慢;而链表的读取速度慢,插入速度...原创 2018-12-22 16:36:19 · 753 阅读 · 0 评论 -
汉诺塔问题的C++和Python的递归实现
递归实现主要使用函数和分支语句,最重要的思想是区分清楚基例和链条两个部分,类似于数学里面的数学归纳法。C++实现:#include <iostream>using namespace std;void hanoi(int N,char source,char relay,char destination){ //递归函数的定义 if(N==1) //递归终结条件:...原创 2018-06-29 23:40:03 · 854 阅读 · 0 评论 -
环形链表的判断方法及实现
目录题目方法1:普通查找法分析实现C++Python方法2:Hash列表分析实现C++python补充方法3:快慢指针分析实现C++在公众号看到一篇文章,如何判断链表有环?环是个什么东西,查了下,原来就是链表中有元素指向之前有过的元素。那么如何判断呢,查了下相关资料,将环形链表的判断方法做了一个梳理,并用Python和C++实现了一下,记录如下。不过由于数据结构不扎实,先用数组这种顺序存储来...原创 2019-07-14 10:54:46 · 717 阅读 · 0 评论 -
数据结构基础知识梳理
文章目录1、数据结构的作用2、常见数据结构3、数组4、栈5、队列6、链表7、树8、图9、字典树(trie)10、哈希表1、数据结构的作用数据结构实际上可以理解为数据在计算机中的存储和使用结构。如果借助C++容器的概念,数据结构可以认为是以某种特定的布局方式存储数据的容器。这种“布局方式”决定了数据结构对于某些操作是高效的,而对于其他操作则是低效的。首先我们需要理解各种数据结构,才能在处理实际...原创 2019-08-29 09:17:22 · 1077 阅读 · 0 评论 -
栈的应用和实现
文章目录1 stack基本用法和实例1.1 基本用法1.2 C++栈的实例1.3 Python栈的实例2 stack实现2.1 stack的C++实现2.2 stack的Python实现1 stack基本用法和实例1.1 基本用法push():向栈内压入一个元素pop(): 向栈顶弹出一个元素empty():判断栈是否为空,为空返回true;反之falsetop:返回栈顶元素,但不删...原创 2019-09-05 21:06:13 · 305 阅读 · 0 评论 -
数据结构-目录
文章目录1 为什么学习数据结构2 链表3 栈4 队列5 递归6 树7 图1 为什么学习数据结构1.1 抽象数据类型ADT(Abstract data type),以及为什么要学习数据结构?1.2 数据结构基础知识梳理2 链表2.1 链表的使用形式2.2 环形链表的判断方法及实现2.3 数组和链表的实例讲解——以Facebook为例2.4 语言进阶-第四周:利用链表逆序输出(10分)...原创 2019-09-05 21:26:59 · 680 阅读 · 0 评论 -
《数据结构与算法实战》3-1:顺序表
顺序表比较容易理解,可以使用数组或者结构体实现,课程中给出的例子是一个很好的顺序表的例子:#include <stdio.h>#define MAX 10struct SList{ //定义顺序表的结构体 int data[MAX]; int length;};void init(struct SList *p){ p->length ...原创 2019-09-16 17:04:08 · 390 阅读 · 0 评论 -
抽象数据类型ADT(Abstract data type),以及为什么要学习数据结构?
抽象数据类型从四种基本的原子数据类型:整型、浮点型、字符型、枚举型,到三种构造类型:数组、结构体、指针,再到抽象数据类型:队列、栈、链表等等,逐渐构成程序设计的大厦。为什么要学习数据结构?这种逻辑方式有其合理性,首先基本的原子类型是最小的单位,不可再分解。而构造类型包含元素属性“同质”的数组和元素属性“异质”的结构体,还有可以引用变量地址的指针。到这里为止,程序语言还无法解决复杂的工程...原创 2018-05-11 12:58:52 · 3387 阅读 · 0 评论