数据结构学习笔记
记录自己学习数据结构时的心得和感悟,并且上传重点代码。
烟雨迷离半世殇
战略转移到个人博客:lfzxb.top
展开
-
数据结构篇:邻接表基础(C#)
今天突发奇想利用C#实现邻接表(供参考),基本思想是把C++/C语言中的结构体改成类,基本思路一致,参考C++版https://blog.csdn.net/qq_15020543/article/details/84178417还是以这张图为例,我们在C#里面实现using System;using UnityEngine; /// <summary>...原创 2018-12-08 19:26:35 · 1906 阅读 · 1 评论 -
数据结构篇:二叉树(三:根据中序和后序遍历结果推算出完整二叉树)
我们先理解一下前中后序遍历,这是基础。//前序遍历void Tree::PreOrderTraverse(BiTree *T) { if(!T) { return ; } else { cout<<T->data<<" "; PreOrderTraverse(T->lchild); PreOrderTraverse(T->rch...原创 2018-11-24 14:53:23 · 2938 阅读 · 2 评论 -
数据结构篇:校园最短路径导航(三:地图图像显示以及完整程序)
首先是地图的显示,因为控制台限制,只能通过外部程序来显示图片如果你使用的是VC6.0或者Dev C++将准备好的图片放在工程根目录,命名为SchoolMap.png如果有小伙伴和我一样使用的是CLion的话,就把图片放到cmake-build-debug下面)在main函数里调用以下语句即可显示图片system("mspaint SchoolMap.png");可是问...原创 2018-12-04 12:32:27 · 18956 阅读 · 14 评论 -
数据结构篇:校园最短路径导航(二:弗洛伊德算法理解与应用)
求最短路径最常用的有迪杰斯特拉(Dijkstra)和弗洛伊德(Floyd)算法两种。本着简洁为王道的信条,我选择了Floyd算法。Floyd算法首先来看一个简单图,红色标记代表在数组的下标,橙色标记代表距离(边权值)我们用D[6][6]这个矩阵存储两点之间最短路径,用P[6][6]这个矩阵存储路径两个矩阵初始化如下,若两点不直接联通,则初始化为无穷大D[6][6] ...原创 2018-12-04 12:32:21 · 7074 阅读 · 0 评论 -
数据结构篇:校园最短路径导航(一:地图数据的配置以及图的建立)
首先去找一张学校的地图,并且自己配置好数据和路线在代码里面写好数据//地点信息char _mapName[32][50] = {"行政楼","实验楼D", "教学楼A", "篮球场", "足球场", "A4", "实验楼C", "教学楼B", "A2", "A6", "计算机系&qu原创 2018-12-04 12:32:11 · 18638 阅读 · 1 评论 -
数据结构篇:单循环链表倒置(带头结点/不带头结点)
带头结点先去看一下单链表的倒置:https://blog.csdn.net/qq_15020543/article/details/84590642对于单循环链表,它与单链表区别是,它的最后一个结点将指向头结点(无头结点将指向第一个结点),构成一个循环.遍历循环链表的时候,结束标志是next指向head理解了这些基础概念,单循环链表的倒置也不难了完整函数Inode *Te...原创 2018-11-28 20:26:16 · 2199 阅读 · 0 评论 -
数据结构篇:单链表倒置(带头结点/不带头结点)
带头结点初始化如图1.我们需要把1这个结点作为最后一个结点,所以要把1的next指向NULLh->next->next = nullptr; 2.然后我们要新建结点,指向HeadNext的下一位,并把HeadNext的下一位指向HeadPre,Inode *tempNode = HeadNext->next;HeadNext->next =...原创 2018-11-28 19:42:19 · 4257 阅读 · 1 评论 -
数据结构篇:二叉树(四:交换左右子树)
应用递归思想如果结点不为空,就交换其左右子树,而待交换的左右子树,我们不需要关心是否为空。void Tree::ExChangeTree(BiTree *T) { BiTree *temp = new BiTree; if (T) { temp = T->rchild; T->rchild = T->lchild...原创 2018-11-28 17:48:41 · 26874 阅读 · 6 评论 -
数据结构篇:图的遍历(二:广度优先遍历)
广度优先遍历,又称广度优先搜索,缩写BFS如果说深度优先遍历是相当于树的前序遍历,那么,广度优先遍历就相当于树的层序遍历。以上面那张图为例就是,ABFCIGEDH代码实现void AdjacencyList::BFSTraverse(GraphAdjList *G) { EdgeNode *p; queue<int> Q; for (in...原创 2018-11-21 22:52:04 · 5499 阅读 · 2 评论 -
数据结构篇:图的遍历(一:深度优先遍历)
深度优先遍历,也称作深度优先搜索,缩写为DFS深度优先遍历从某个顶点出发,访问此顶点,然后从v的未被访问的邻接点触发深度优先便利图,直至所有和v有路径想通的顶点都被访问到。这样我们一定就访问到所有结点了吗,没有,可能还有的分支我们没有访问到,所以需要回溯(一般情况下都设置一个数组,来记录顶点是否访问到,如果访问到就不执行DFS算法,如果未被访问过就执行DFS算法)以这张图为例我...原创 2018-11-21 20:32:28 · 63093 阅读 · 11 评论 -
数据结构篇:邻接表创建与显示
每一个顶点后面就是一条链表,每个顶点都存在数组里。以这张图为例结构如下运行截图结构体定义//边表结点typedef struct EdgeNode { //顶点对应的下标 int adjvex; //指向下一个邻接点 struct EdgeNode *next;} edgeNode;//顶点表结点typedef struc...原创 2018-11-17 12:22:31 · 1297 阅读 · 0 评论 -
数据结构篇:二叉树的基本应用(一)
二叉树递归算法,树中存放整型数①创建一棵树②构造递归算法,计算树中值大于x的结点的个数,int countx(Bitnode *t,int x) #include <iostream>using namespace std;typedef struct BiTree { int data; BiTree *lchild,*rchild;} Tree ;cl...原创 2018-11-04 14:47:10 · 2127 阅读 · 0 评论 -
数据结构篇:二叉树(一:二叉树的创建,递归遍历及其他基础知识)
二叉树的相关概念<二叉树中的每个元素都叫结点> (1)结点的度。结点所拥有的子树的个数称为该结点的度。例如右图B结点度数为2 (2)叶结点。度为0的结点称为叶结点,或者称为终端结点。例如右图的F,D,C结点 (3)分枝结点。度不为0的结点称为分支结点,或者称为非终端结点。一棵树的结点除叶结点外,其余的都是分支结点。例如右图的A,B,E,左...原创 2018-10-20 21:16:23 · 1766 阅读 · 1 评论 -
数据结构篇:二叉树(二:二叉树的非递归遍历)
二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有前序、中序以及后序三种遍历方法。因为树的定义本身就 是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁。递归遍历:https://blog.csdn.net/qq_15020543/article/details/83216722而对于树的遍历若采用非递归...原创 2018-10-29 10:14:52 · 465 阅读 · 0 评论 -
数据结构篇:#1034 : 毁灭者问题(C#)
前言:这篇文章用C#解决,所以并没有算法参考价值,我的目的也是熟悉C#,所以大家自己随意。正经解法(C++):https://blog.csdn.net/u014316038/article/details/46345145时间限制:10000ms单点时限:1000ms内存限制:256MB描述在 Warcraft III 之冰封王座中,毁灭者是不死族打三本后期时的一个魔法飞行单...原创 2018-10-30 11:13:40 · 316 阅读 · 0 评论 -
数据结构篇:单链表基础操作(一)
本程序以类似应用程序的对话框形式进行单链表的操作。希望对大家的学习有所帮助。#include <iostream>using namespace std;typedef int ElemType;#define EMPTYLIST -1#define NOEMPTYLIST -2#define SUCCESS -3#define FAIL -4#define ...原创 2018-09-19 14:48:12 · 402 阅读 · 0 评论 -
数据结构篇:单链表基础操作(二)
已知带头结点的单链表,存放一组整型数①创建n个元素的单链表②计算链表中值大于x的结点的个数,int countx(lnode *head,int x)③两个链表ha,hb存放整型数,每个链表中无相同元素,hc=ha∩hb,即ha和hb中相同元素放入hc中,void intersection(lnode *ha,lnode *hb,lnode *&hc)#include <...原创 2018-11-04 14:09:56 · 946 阅读 · 0 评论 -
数据结构篇:链栈应用(括号匹配)(C++)
很简单,掌握栈的基础知识即可。#include <iostream>#include <string.h>using namespace std;struct Node { int data; Node *next;};class LinkStack { private : Node *top; public : LinkStack() ...原创 2018-10-02 16:56:40 · 1842 阅读 · 0 评论 -
数据结构篇:链表多项式的加法与乘法。(C++)
链表多项式还算比较简单的。步骤分为 1.创建链表 2.链表排序 3.链表的自我化简 4.进行运算 5.进行自我化简(仅乘法需要多这一步) 设计报告地址:https://download.csdn.net/download/qq_1502...原创 2018-09-29 12:33:21 · 3161 阅读 · 0 评论 -
编程基础篇:建立一个对象数组,内放5个学生的数据(学号,成绩),用指向对象的指针做函数参数,在max函数中找出5个学生中成绩最高者,并输出其学号。
在别的博客看见这道题,要不是晦涩难懂,要不是算法有缺陷。故在此重写#include <iostream>using namespace std;class Student { public : Student (int x,int c):xueHao(x),chengJi(c) {} void selectMax(Student *);//直接在此处声明为frie...原创 2018-03-29 20:31:22 · 3964 阅读 · 2 评论 -
编程基础篇:有两个矩阵a和b,均为2行3列。求两个矩阵之和。(C++重载)
有两个矩阵a和b,均为2行3列。求两个矩阵之和。重载运算符“+”,使之能用于矩阵相加,如c=a+b。重载流插入运算符“<<”和流提取运算符“>>”,使之能用于该矩阵的输入和输出 这题很简单,不需要赘述 #include <iostream>using namespace std;class qua { public :...原创 2018-04-05 16:36:58 · 19816 阅读 · 2 评论 -
编程基础篇:(已知:线段中点坐标公式为:(x,y)=(( x1+ x2)/2,(y1+y2)/2),线段长度公式为:L= sqrt((x1-x2)^2-(y1-y2))
#include<iostream>#include<math.h>using namespace std;class Dot { //定义基类:点 public: float x,y; Dot(float a=0,float b=0) { x=a; y=b; } void Show() { cout<<"x="...原创 2018-05-07 18:27:39 · 3507 阅读 · 0 评论 -
编程基础篇:Trie树解决字典问题。
小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进。这一天,他们遇到了一本词典,于是小Hi就向小Ho提出了那个经典的问题:“小Ho,你能不能对于每一个我给出的字符串,都在这个词典里面找到以这个字符串开头的所有单词呢?”身经百战的小Ho答道:“怎么会不能呢!你每给我一个字符串,我就依次遍历词典里的所有单词,检查你给我的字符...转载 2018-06-24 15:34:07 · 385 阅读 · 0 评论 -
编程基础篇:#1082 : 然而沼跃鱼早就看穿了一切
fjxmlhx每天都在被沼跃鱼刷屏,因此他急切的找到了你希望你写一个程序屏蔽所有句子中的沼跃鱼(“marshtomp”,不区分大小写)。为了使句子不缺少成分,统一换成 “fjxmlhx” 。输入输入包括多行。每行是一个字符串,长度不超过200。一行的末尾与下一行的开头没有关系。输出输出包含多行,为输入按照描述中变换的结果。样例输入The Marshtom...原创 2018-06-25 14:04:25 · 545 阅读 · 1 评论 -
编程基础篇:#1039 : 字符消除
时间限制:1000ms单点时限:1000ms内存限制:256MB描述小Hi最近在玩一个字符消除游戏。给定一个只包含大写字母"ABC"的字符串s,消除过程是如下进行的: 1)如果s包含长度超过1的由相同字母组成的子串,那么这些子串会被同时消除,余下的子串拼成新的字符串。例如"ABCCBCCCAA"中"CC","CCC"和"AA"会被同时消除,余下"AB"和"原创 2018-06-28 09:04:24 · 246 阅读 · 0 评论 -
编程基础篇:#1051 : 补提交卡
时间限制:2000ms单点时限:1000ms内存限制:256MB描述小Ho给自己定了一个宏伟的目标:连续100天每天坚持在hihoCoder上提交一个程序。100天过去了,小Ho查看自己的提交记录发现有N天因为贪玩忘记提交了。于是小Ho软磨硬泡、强忍着小Hi鄙视的眼神从小Hi那里要来M张"补提交卡"。每张"补提交卡"都可以补回一天的提交,将原本没有提交程序的一天变成有提交程序的一天...原创 2018-06-28 13:22:29 · 239 阅读 · 0 评论 -
编程基础篇:编程语言基本常用数据类型的讨论。
今天朋友问我阶乘中的数据类型问题,探讨之后有感而发。(本博客以C(C++)语言中的数据类型为例,不同语言的数据类型精也度不一样,请勿一概而论!)我们先来介绍一下这些常用的数据类型。 类型 长度/字节 取值范围 存储方式 char 1 -128~127 ...原创 2018-07-22 10:22:05 · 2529 阅读 · 0 评论