
Cpp-数据结构的学习(C++)
数据结构相关知识,C++实现
TIM33470348
著有《Python数据分析:从小白到专家》一书。于2021年5月,由电子工业出版社和工信出版集团出版,是一本正式发行的图书,ISBN-13:9787121409233。
这本书能够面市,得感谢这么多年来,在我前进道路上一直陪伴我的亲人和好友,以及赏识我的各位长辈,老师和大佬们。尤其是在我低落的时候,仍然陪伴我,鼓励我,没有放弃我的挚友。
展开
-
对于KMP算法的理解
KMP算法是三位伟大的计算机先驱:D.E.Knuth、J,H,Morris 和 V.R.Pratt提出的,取其姓名首字母得名KMP,KMP算法是为了优化暴力匹配而诞生的。暴力匹配时,较长的文本串指针会多次回溯使得程序性能下降,而KMP的核心思想就是减少匹配时主串(较长的文本串)指针的回溯次数以提升程序性能。KMP的具体概念就不写了,直接看这位博主的吧:KMP算法—终于全部弄懂了如果实在不懂KMP的话建议看下某一年《王道考研·数据结构》咸鱼学长的讲课视频,十分易懂,比强行啃书本效率高得多。我按照《原创 2021-02-08 14:52:05 · 297 阅读 · 0 评论 -
面试准备——各类排序算法
经过了两趟面试,我意识到自己对以前学习过算法,尤其是排序算法已经遗忘不少了,是时候再复习一下。首先,什么是排序?将记录序列排列成按关键字有序的序列的操作,称为排序(Sort)。其中排序依据的关系是任意的,通常使用小于(递增)、大于(递减)Definitely关系。————张琨 张宏 朱保平《数据结构与算法分析(C++语言版)》...原创 2020-04-11 10:54:57 · 693 阅读 · 0 评论 -
牛客网————客官这边请(高精度问题,可以AC)
最近再练习高精度问题,这个题目是这样的:这是一道典型的大数问题,可以看到我们要求两个大数相加的结果,大数相加原理可以看这里:https://blog.youkuaiyun.com/qq_41938259/article/details/104638833只要稍加修改,主要是格式正确即可,代码如下:#include<iostream>#include<stack>#...原创 2020-03-07 09:40:49 · 313 阅读 · 0 评论 -
算法笔记__大整数加法和减法(STL实现、stack)以及(String实现)
当C++的long long int类型也无法存放下一个数字的长度了的话,就得使用大数算法。大数算法的原理就是小学学的竖式,例如加法超过十了就要进位,减法减不了了就得向高位借位,原理很简单,代码如下,使用stl实现的,先减法再加法:#include<iostream>#include<stack>#include<sstream>#include...原创 2020-03-03 18:57:21 · 546 阅读 · 0 评论 -
再谈DFS(深度优先遍历)(集合求所有子集问题、求最长路径问题、如何保存最优化问题的结果)
DFS 是“深度优先遍历”或“深度优先搜索”的英文缩写。一开始是用于解决“迷宫问题”,或者说是“连通性问题”所产生的,用于判断两点间是否可达。对于求最短路径一般用的是BFS(广度优先搜索),不过现在从DFS衍生出了好几种问题的解决,比如题中给出的“集合求所有子集问题、”求最长路径问题”、“如何保存最优化问题的结果”这三个问题。首先还是先从经典的迷宫问题引入DFS。要判断u和v是否连通,我们可以...原创 2020-01-23 11:51:46 · 1828 阅读 · 0 评论 -
朱保平《数据结构C++》课程设计————校园导航最短路径
有学弟问我要课设的代码,保平这次好像又布置了这个。这是简略版本(这是我当时自己写的,拉到底可以看到参考地图的简略拓扑图,还有输入输出示例。提交这个版本应该就没什么大问题了)https://blog.youkuaiyun.com/qq_41938259/article/details/86568922当然还有更流皮的版本:(转自lfz童鞋博客,17级计科一班):其一:https://blog.c...转载 2019-12-26 09:25:25 · 3104 阅读 · 0 评论 -
二叉树交换左右子树算法(递归)
void change(bitnode *&t){ bitnode *temp = new bitnode; if (t==NULL)return//若是根节点为NULL,递归结束 temp = t->lchild; t->lchild = t->rchild; t->rchild = temp; change(t-&...原创 2019-01-10 11:47:57 · 13904 阅读 · 14 评论 -
单链表倒置算法
void turn(lnode *&head){ if (head == NULL || head->next == head) return; lnode *p = head,*q,*qr; qr = p->next; while (qr->next != head) { q = qr->next; qr->next = p; ...原创 2019-01-10 11:52:08 · 2845 阅读 · 0 评论 -
萌新谈STL(上)vector,string,queue,priority_queue,stack
开始不懂,用栈和队列这些东西的时候都自己定义单链表,一段段写过去,后来才发现了C++的STL这么一个神器。一,vector变长数组:1)一维变长数组定义:vector<typename> name2)二维变长数组定义:vector<vector<typename> > name //name前的两个>要以空格隔开3)vector数组的定义:...原创 2019-01-16 16:43:46 · 325 阅读 · 0 评论 -
数据结构__最小生成树(prim算法)
返回最小生成树的边权值之和。prim算法核心思想就是贪心,与dijstra算法结构如出一辙。代码和注释如下:#include<iostream>#include<vector>#include<iomanip>//用于格式化输出#define maxn 1000//最大节点数#define inf 1000000000//模拟距离无限大i...原创 2019-01-22 11:09:08 · 1168 阅读 · 0 评论 -
算法笔记__全源最短路径问题(数据结构__floyd算法)
所谓全源最短路径问题(All-Pairs Shortest Paths Problem),可以认为是单源最短路径问题的推广,即分别以每个顶点作为源顶点并求其至其它顶点的最短距离。#include<iostream>#include<algorithm>#include<iomanip>using namespace std;const int i...原创 2019-01-27 11:38:55 · 590 阅读 · 0 评论 -
数据结构__双向循环队列(链表形式)
#include<iostream>using namespace std;struct node{ int data; node *next, *prior;};class queue{private: node * front, *rear;public: queue(int e); ~queue(){} void enqueue(int e);...原创 2019-01-28 09:36:23 · 585 阅读 · 0 评论 -
用DFS求连通块问题
这是题目:先给出输入输出示例图: 代码和注释都比较详细了,如下给出:#include<iostream>#include<cstring>using namespace std;const int maxn = 100;char pic[maxn][maxn];//pic用于表示邻接矩阵int m, n, idx[maxn][maxn]...原创 2019-02-05 13:43:49 · 464 阅读 · 0 评论 -
数据结构(补漏)___二叉树的层次遍历
原理:如图所示二叉树创建一个队列,A入队,队列里此时只有A。再将A出队同时将两个孩子从左向右入队。队列里此时是BC。B出队同时将B的左孩子D入队。此时队列里是CD。C出队,将C的两个孩子入队,此时队列里是DEF。没有更多的孩子节点了,所以全部出队。所以遍历顺序是ABCDEF。下面给出大致伪代码:void BinaryTreeLevelOrder(BTNode* ro...原创 2019-03-24 16:05:43 · 473 阅读 · 0 评论 -
萌新谈STL(下) set,map和pair
前一篇的连接:https://blog.youkuaiyun.com/qq_41938259/article/details/86508174自以为前一篇在算法比赛中比较常用吧,这一篇仅供科普,用于非常规的情况下。set的常见用法:1)set的定义:set<typename> name;2)set数组的定义:set<typename>arrayname[array...原创 2019-06-23 20:54:05 · 256 阅读 · 0 评论 -
归并排序代码注释以及示例(递归和非递归两种)
#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>using namespace std;//归并排序的非递归算法(示例用的是下面的)void merge(int a[], int l, int r, int mid){ int temp =...原创 2019-06-29 09:55:49 · 348 阅读 · 0 评论 -
数据结构__dijkstra算法
注释很详尽了:#include<iostream>#include<vector>#define maxn 1000//最大节点数#define inf 1000000000//模拟距离无限大int G[maxn][maxn];//邻接阵,用于比较时提取G[u][v]using namespace std;struct node{ int adjve...原创 2019-01-21 09:30:03 · 2118 阅读 · 0 评论 -
两个链表交集操作(考试用)
基于之前给出的是使用散列标记的优化算法,适合编程不适合考试。所以接着给出暴力法的代码供诸位应付考试:这是之前用散列优化过的:https://blog.youkuaiyun.com/qq_41938259/article/details/83820352void intersection(lnode *ha, lnode *hb, lnode *&hc){ //下面两行用于初始化hc链...原创 2019-01-09 22:07:34 · 577 阅读 · 2 评论 -
数据结构__广度优先遍历(BFS)用STL的vector与queue实现
给出代码:#include<iostream>#include<vector>#include<queue>#define maxn 1000bool inq[maxn] = { false };using namespace std;struct node{ int adjvex; char data; int weight; i...原创 2019-01-19 19:47:27 · 863 阅读 · 0 评论 -
数据结构上机题(10.24)———二叉树的遍历(递归)
10.24号周三的上机题,先别急,源代码在后面呢!!!首先附上三张图,是关于什么是二叉树的先序遍历,中序遍历,后序遍历。(1)先序遍历按照“根节点,左支,右支”的顺序遍历,如图:(2)中序遍历按照“左支,根节点,右支”的顺序遍历,如图:(2)后序遍历按照“左支,右支,根节点”的顺序遍历,如图:接着,交代一下大致的上机题内容:实现创建一棵二叉树,计算树叶数,计...原创 2018-10-19 20:15:57 · 450 阅读 · 0 评论 -
数据结构上机题(周三)——分裂一个链表(以奇偶数分开为例)
周三,19号的上机题。题目,如图:不多废话,直接源代码:#include<iostream>#include<stdlib.h>int a[100];using namespace std;class node {public: node * next; int data; node() { next = NULL; data = 0; }...原创 2018-09-16 11:09:33 · 681 阅读 · 0 评论 -
数据结构课后练习——初识单链表(单链表的创建,查找并删除)
就保平布置的那个必做题。。。题目:在一个按值递增的链表中删除值等于x的节点,成功返回1,失败返回0.源代码如下:#include<iostream>#include<stdlib.h>using namespace std;class node { node* next; int data;public: node() {} ~node() {...原创 2018-09-13 12:43:07 · 1129 阅读 · 0 评论 -
数据结构__两个多项式乘法运算
这个,也是第一次数据结构课程设计的题目一共四个文件,分别命名为main.cpp head.h list.h cal.h。作用分别是main函数主程序,基本头文件卷入,单链表和其基本操作的定义,计算并合并同类项目操作注释就不写了,因为没啥好写的,我也不知道该写些什么。main.cpp#include"cal.h"int main(void){ cal();...原创 2018-10-29 13:32:50 · 4747 阅读 · 5 评论 -
数据结构__非递归的二叉树后续遍历
首先,这篇文章讲解关于二叉树的三种遍历十分不错的https://www.cnblogs.com/SHERO-Vae/p/5800363.html特别鸣谢 @烟雨迷离半世觞 提供 一共写了四个文件main.cpp自然是main函数的文件hand.h这个头文件不仅仅是卷入了一些必要的头文件,主要是写了两个基本的结构体定义,box是用来表示散列的结构体,bi...原创 2018-10-27 23:25:39 · 306 阅读 · 0 评论 -
最后一次数据结构上机(11.7)——两个集合取交集
第一题单链表1)创建n个元素的单链表 void create()2)计算链表中大于x的节点个数int countx(int x)3)创建两个链表,然后取交集以下源代码:head.h#pragma once#include<iostream>#include<stdlib.h>using namespace std;list.h...原创 2018-11-07 11:24:17 · 401 阅读 · 0 评论 -
数据结构——邻接表的创建与打印输出
老样子,三个文件head.h#pragma once#include<iostream>#include<stdlib.h>#include<cstring>using namespace std;adj.h#pragma once#include"head.h"typedef struct edge{ int adjvex;...原创 2018-12-14 11:17:59 · 2556 阅读 · 0 评论 -
数据结构__图论初步(带权有向图计算某节点总度数)
节点度数:即某一结点入度与出度之和。头文件 ,算法核心文件 ,I/O测试文件如下:head.h#pragma once#include<iostream>#include<stdlib.h>using namespace std;adj.h#pragma once#include"head.h"typedef struct arcnode...原创 2018-12-09 12:11:32 · 2996 阅读 · 0 评论 -
数据结构_堆的定义与基本操作(以数组结构,大顶堆为例)
1)建堆操作时,需要向下调整操作。具体思路是这样的:总是将当前节点v与他的左右孩子比较。若孩子中存在权值比比V大的,就将最大的那个孩子节点与其双亲节点交换以达到上移的目的。交换完毕后继续以v为根节点比较第二轮(这是递归),经过若干轮后直到节点v的孩子节点权值都比v节点权值小,或者v节点无左右孩子时,递归结束。 2)添加元素时,需要向上调整操作,以下是具体思路:新加入节点记为x,将x放在数组...原创 2019-01-11 09:37:40 · 617 阅读 · 0 评论 -
数据结构__Python实现队列和栈
注:以栈为例,因为队列只要修改popit()函数处代码,和修改相关提示语句即可。#Python的栈定义与计基本操作#队列只是改下提示语句和popit()函数stack=[]def pushit(): stack.append(input('输入新的元素并入栈:').strip())#若是队列只要将第14行改为repr(stack.pop[0])即可def popit(...原创 2019-01-11 14:16:24 · 237 阅读 · 0 评论 -
数据结构__堆排序(接着上回的代码)
上回漏写了堆排序算法。所以接着上一趟的补充吧,这是原来的地址:https://blog.youkuaiyun.com/qq_41938259/article/details/86287000void heapSort(){ createHeap();//建堆 for (int i = n; i > 1; i--)//倒着枚举,直到堆中只有一个元素 { //交换heap[i]与堆顶...原创 2019-01-11 17:55:39 · 147 阅读 · 0 评论 -
数据结构——哈夫曼树求最小WPL(树的带权路径长度)
给出代码与注释#include<queue>#include<iostream>using namespace std;//代表小堆顶的优先队列priority_queue<long long, vector<long long>, greater<long long>>q;int main(void){ int ...原创 2019-01-11 18:21:30 · 4591 阅读 · 0 评论 -
数据结构——STL实现邻接表输入与打印
按照之前没用STL的那个改了一下,直接给出代码:#include<iostream>#include<vector>#define maxn 1000using namespace std;struct node{ int adjvex; char data; int weight;};vector<node> adj[maxn];...原创 2019-01-17 20:10:53 · 562 阅读 · 0 评论 -
AVL树的创建和返回AVL树的根节点
三个文件,注释已经很清楚了:main.cpp#include"tree.h"int main(void){ bitt A; int n, v; cin >> n; for (int i = 0; i < n; i++) { cin >> v; A.insert(A.root, v); } cout<<A.get()&l...原创 2019-01-08 16:58:15 · 575 阅读 · 0 评论 -
数据结构__vetor邻接表实现图的DFS(深度优先遍历)
用的是上一会STL创立的邻接表。代码给出:#include<iostream>#include<vector>#define maxn 1000bool vis[maxn] = { false };using namespace std;struct node{ int adjvex; char data; int weight;};ve...原创 2019-01-19 09:00:10 · 301 阅读 · 0 评论 -
数据结构__不含括号的加减乘除法混合运算
这个程序我一共写了5个文件,4个是头文件,最后1个则是main函数的cpp文件。第一个文件名为head.h用于包含一些基本的头文件,如下所示:#pragma once#include<iostream>#include<stdlib.h>#include<string>using namespace std;第二个文件名为stack.h...原创 2018-10-27 23:26:38 · 1892 阅读 · 0 评论