
数据结构与算法基础知识
分享各种数据结构以及算法,还有相关题目解法
碧海潮声按玉箫
小白一个,新手上路,多多指教!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
7-14 电话聊天狂人 (25 分) ,c++stl里面的map法
给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人。输入格式:输入首先给出正整数N(≤105),为通话记录条数。随后N行,每行给出一条通话记录。简单起见,这里只列出拨出方和接收方的11位数字构成的手机号码,其中以空格分隔。输出格式:在一行中给出聊天狂人的手机号码及其通话次数,其间以空格分隔。如果这样的人不唯一,则输出狂人中最小的号码及其通话次数,并且附加给出并列狂人的人数。输入样例:413005711862 1358862583213505711862 1308862583213原创 2022-03-25 20:35:31 · 207 阅读 · 0 评论 -
哈希表基础知识
那么哈希表能解决什么问题呢,一般哈希表都是用来快速判断一个元素是否出现集合里。例如要查询一个名字是否在这所学校里。要枚举的话时间复杂度是O ( n ) O(n)O(n),但如果使用哈希表的话, 只需要O ( 1 ) O(1)O(1)就可以做到。我们只需要初始化把这所学校里学生的名字都存在哈希表里,在查询的时候通过索引直接就可以知道这位同学在不在这所学校里了。将学生姓名映射到哈希表上就涉及到了hash function ,也就是哈希函数。#哈希函数哈希函数,把学生的姓名直接映射为哈希表上的索引,然原创 2022-03-25 20:25:46 · 269 阅读 · 1 评论 -
7-12 How Long Does It Take (25 分) 拓扑排序的变形
Given the relations of all the activities of a project, you are supposed to find the earliest completion time of the project.Input Specification:Each input file contains one test case. Each case starts with a line containing two positive integers N (≤100原创 2022-03-19 16:08:22 · 768 阅读 · 0 评论 -
拓扑排序,基础知识及代码实习
拓扑排序是对一个有向图构造拓扑序列,解决工程是否能顺利进行的问题。构造时有 2 种结果:此图全部顶点被输出:说明说明图中无「环」存在, 是 AOV 网没有输出全部顶点:说明图中有「环」存在,不是 AOV 网AOV(Activity On Vertex Network) :一种 有向 无回路 的图代码实现如下:首先建立图的邻接表类型(当然邻接矩阵也行):const int MAXV = 1000;typedef struct ANode { int adjvex;//该边结点的编号 stru原创 2022-03-19 14:10:32 · 659 阅读 · 0 评论 -
各种排序算法汇总(内排序)
1.直接插入排序,时间复杂度n^2void InsertSort(int R[], int n)//对含n个元素的数组R排序{ int i,j, temp; for (int i = 1;i < n;i++)//初始时有序区只有R[0]一个元素 { if (R[i] < R[i - 1])//从最靠近有序区那个元素开始找,找到比有序区最大元素 //也就是最右边元素更小的元素,然后插入有序区 { temp = R[i]; j = i - 1; while原创 2021-12-24 14:41:30 · 767 阅读 · 0 评论 -
7-13 Insert or Merge (25 分),直接插入排序与归并排序的简单应用
According to Wikipedia:Insertion sort iterates, consuming one input element each repetition, and growing a sorted output list. Each iteration, insertion sort removes one element from the input data, finds the location it belongs within the sorted list, an原创 2021-12-19 15:29:14 · 175 阅读 · 0 评论 -
7-9 旅游规划 (25 分)Dijkstra算法,单源最短路径算法
有了一张自驾旅游路线图,你会知道城市间的高速公路长度、以及该公路要收取的过路费。现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径。如果有若干条路径都是最短的,那么需要输出最便宜的一条路径。输入格式:输入说明:输入数据的第1行给出4个正整数N、M、S、D,其中N(2≤N≤500)是城市的个数,顺便假设城市的编号为0~(N−1);M是高速公路的条数;S是出发地的城市编号;D是目的地的城市编号。随后的M行中,每行给出一条高速公路的信息,分别是:城市1、城市2、高速公路长度、收费额,中原创 2021-12-17 11:22:28 · 655 阅读 · 0 评论 -
最小生成树Prim算法的简单应用-----08-图7 公路村村通 (30 分)
现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。输入格式:输入数据包括城镇数目正整数N(≤1000)和候选道路数目M(≤3N);随后的M行对应M条道路,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号以及该道路改建的预算成本。为简单起见,城镇从1到N编号。输出格式:输出村村通需要的最低成本。如果输入数据不足以保证畅通,则输出−1,表示需要建设更多公路。输入样例:6 151 2 51 3 31 4 71 5 4原创 2021-12-12 13:34:06 · 307 阅读 · 0 评论 -
最短路径算法,Dijkstra算法,floyd算法 07-图4 哈利·波特的考试 (25 分)
07-图4 哈利·波特的考试 (25 分)哈利·波特要考试了,他需要你的帮助。这门课学的是用魔咒将一种动物变成另一种动物的本事。例如将猫变成老鼠的魔咒是haha,将老鼠变成鱼的魔咒是hehe等等。反方向变化的魔咒就是简单地将原来的魔咒倒过来念,例如ahah可以将老鼠变成猫。另外,如果想把猫变成鱼,可以通过念一个直接魔咒lalala,也可以将猫变老鼠、老鼠变鱼的魔咒连起来念:hahahehe。现在哈利·波特的手里有一本教材,里面列出了所有的变形魔咒和能变的动物。老师允许他自己带一只动物去考场,要考察他把这原创 2021-12-05 16:40:03 · 157 阅读 · 0 评论 -
哈夫曼树的构造,堆的基本使用,05-树9 Huffman Codes (30 分)
In 1953, David A. Huffman published his paper “A Method for the Construction of Minimum-Redundancy Codes”, and hence printed his name in the history of computer science. As a professor who gives the final exam problem on Huffman codes, I am encountering a原创 2021-11-22 20:13:18 · 453 阅读 · 0 评论 -
05-树7 堆中的路径 (25 分) ,堆的建立,插入和删除等操作
将一系列给定数字插入一个初始为空的小顶堆H[]。随后对任意给定的下标i,打印从H[i]到根结点的路径。输入格式:每组测试第1行包含2个正整数N和M(≤1000),分别是插入元素的个数、以及需要打印的路径条数。下一行给出区间[-10000, 10000]内的N个要被插入一个初始为空的小顶堆的整数。最后一行给出M个下标。输出格式:对输入中给出的每个下标i,在一行中输出从H[i]到根结点的路径上的数据。数字间以1个空格分隔,行末不得有多余空格。输入样例:5 346 23 26 24 105 4 3原创 2021-10-28 12:14:12 · 122 阅读 · 0 评论 -
串的基本知识,顺序串和链串的基本操作
顺序串的基本操作#include<iostream>using namespace std;const int MaxSize = 50;typedef struct { char data[MaxSize] = {"\n"};//在这里把串初始化为换行结束符,结尾就不会出现很多烫字了 int length;//讲实话为什么这样初始化一个“\n''还是不太清楚}SqString;//输入字符串生成串void StrAssign(SqString& s, char cst原创 2021-10-22 10:59:08 · 386 阅读 · 0 评论 -
04-树4 是否同一棵二叉搜索树 (25 分)(考察二叉搜索树的基本操作)
给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果。于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树。输入格式:输入包含若干组测试数据。每组数据的第1行给出两个正整数N (≤10)和L,分别是每个序列插入元素的个数和需要检查的序列个数。第2行给出N个以空格分隔的正整数,作为初始插入序列。随后L行,每行给出N个插入的元素,属于L个需要检查原创 2021-10-17 11:05:47 · 191 阅读 · 0 评论 -
树与二叉树的基本概念,遍历与使用
1.树的一些基本术语2.二叉树的创建与遍历原创 2021-10-11 19:05:06 · 181 阅读 · 0 评论 -
栈和队列的基本操作
1.顺序栈的基本操作typedef struct { //顺序栈的数据类型 ElemType data[MaxSize]; int top;}SqStack;void InitStack(SqStack*& s)//初始化顺序栈{ s = new SqStack; s->top = -1;}bool StackEmpty(SqStack* s)//判断栈是否为空{ return(s->top == -1);}void Desto原创 2021-10-05 10:46:54 · 158 阅读 · 0 评论 -
双链表的定义与使用
1.建立双链表结点#include<iostream>using namespace std;typedef int ElemType;typedef struct DNode { //双链表结点 ElemType data; DNode* prior; DNode* next;}DLinkNode;2.建立双链表oid CreateListF(DLinkNode*& L, ElemType a[], int n)//采用尾插法建立双链表{ DLin原创 2021-09-24 18:47:46 · 165 阅读 · 0 评论 -
单链表基础知识
1.建立单链表结点#include<iostream>using namespace std;typedef int ElemType;typedef struct LNode //建立结点{ ElemType data; struct LNode* next;}LinkNode;2.建立单链表;void CreateListF(LinkNode*& L, ElemType a[], int n) //头插法创建单链表{ Lin原创 2021-09-24 18:29:15 · 173 阅读 · 0 评论