
数据结构与算法
数据结构小记
「已注销」
这个作者很懒,什么都没留下…
展开
-
Java数据结构小结
PDF完整版https://wwc.lanzouo.com/i3ZkWyc2ejg密码:69miJava数据结构总结TitleJava数据结构总结AuthorYchhh_文章目录**Java**数据结构总结@[toc]线性结构线性结构特点稀疏数组队列数组的队列模拟数组循环队列链表链表注意点链表Question双向链表循环链表栈数组模拟栈使用栈完成计算器前缀 / 中缀 / 后缀表达式前缀表达式(波兰表达式)中缀表达式后缀表达式(逆波兰表达式)递归(Recursion)迷.原创 2022-01-03 21:48:43 · 432 阅读 · 0 评论 -
7-9 目录树 (30分)
在ZIP归档文件中,保留着所有压缩文件和目录的相对路径和名称。当使用WinZIP等GUI软件打开ZIP归档文件时,可以从这些信息中重建目录的树状结构。请编写程序实现目录的树状结构的重建工作。输入格式:输入首先给出正整数N(≤104),表示ZIP归档文件中的文件和目录的数量。随后N行,每行有如下格式的文件或目录的相对路径和名称(每行不超过260个字符):路径和名称中的字符仅包括英文字母(区分大小写); 符号“\”仅作为路径分隔符出现; 目录以符号“\”结束; 不存在重复的输入项目;原创 2020-11-19 13:13:28 · 1849 阅读 · 0 评论 -
7-15 字符串关键字的散列映射 (25分)
#include<bits/stdc++.h>using namespace std;int m[10010];map<string,int> mp;int sort(string s,int p){ int len = s.size() - 1; stack<int> stk; if(len == 0) return (s[0] - 'A') % p; if(len == 1) return ((s[0] - 'A')*32+(s[1] - 'A')).原创 2020-11-17 14:36:05 · 429 阅读 · 0 评论 -
7-2 是否完全二叉搜索树 (30分)
#include<iostream>#include<queue>using namespace std;typedef struct Node{ int data; int level = 0; struct Node *left; struct Node *right;}Node,*Root;queue<Node*> last_judge;int Level_Sum[20];int Max = 0;void Creat(Root &r.原创 2020-11-07 17:17:12 · 221 阅读 · 0 评论 -
7-1 是否同一棵二叉搜索树 (25分)
#include<iostream>using namespace std;class Node{ public: Node(){ left = right = -1; } int left; int right;};void Creat(Node *s,int n){ int root = -1; while(n--){ int t; cin>>t; if(root == -1)root = t; else{ int te.原创 2020-11-07 15:27:11 · 349 阅读 · 0 评论 -
拓扑排序 + 关键路径(邻接矩阵实现)
#include<iostream>#include<stack>#define INF 65535using namespace std;int map[110][110]; //构建邻接表 int ear[110],in[110],late[110]; //构建最早出发表和最晚完成表 int n,m,MAX;stack<int>Turn; //存放拓扑排序的顺序,最晚完成的在栈顶,最早完成的在栈底 void init(){ for(.原创 2020-11-01 11:40:21 · 1255 阅读 · 2 评论 -
7-5 关键活动 (30分)PTA【关键路径 + 拓扑排序】
7-5 关键活动 (30分)假定一个工程项目由一组子任务构成,子任务之间有的可以并行执行,有的必须在完成了其它一些子任务后才能执行。“任务调度”包括一组子任务、以及每个子任务可以执行所依赖的子任务集。比如完成一个专业的所有课程学习和毕业设计可以看成一个本科生要完成的一项工程,各门课程可以看成是子任务。有些课程可以同时开设,比如英语和C程序设计,它们没有必须先修哪门的约束;有些课程则不可以同时开设,因为它们有先后的依赖关系,比如C程序设计和数据结构两门课,必须先学习前者。但是需要注意的是,对一组子任务,原创 2020-10-26 20:03:26 · 1602 阅读 · 0 评论 -
7-4 天梯地图 (30分)PTA_Dijkstra
7-4 天梯地图 (30分)本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线;一条是最短距离的路线。题目保证对任意的查询请求,地图上都至少存在一条可达路线。输入格式:输入在第一行给出两个正整数N(2 ≤ N ≤ 500)和M,分别为地图中所有标记地点的个数和连接地点的道路条数。随后M行,每行按如下格式给出一条道路的信息:V1 V2 one-way length time其中V1和V2是道路的两个端点的编号(从0到N-1);如果该道原创 2020-10-25 11:14:48 · 1474 阅读 · 2 评论 -
7-3 城市间紧急救援 (25分) PTA
作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候,你的任务是带领你的救援队尽快赶往事发地,同时,一路上召集尽可能多的救援队。输入格式:输入第一行给出4个正整数N、M、S、D,其中N(2≤N≤500)是城市的个数,顺便假设城市的编号为0 ~ (N−1);M是快速道路的条数;S是出发地的城市编号;D是目的地的城市编号。第二行给出N个正整数,原创 2020-10-25 08:51:21 · 1644 阅读 · 2 评论 -
迷宫问题BFS(图的广度优先遍历)求最短路径
S为入口E为出口#为障碍-为可通过路径思路:通过BFS进行广搜,若搜到即为最短路径,若搜不到则不存在(当节点队列为空时)代码:#include<iostream>#include<queue>#include<cstring>using namespace std;class Point{ public: Point(){ vis = 0; }; Point(const Point& p){ x = p.原创 2020-10-20 22:30:55 · 795 阅读 · 0 评论 -
BFS问题及其讲解(迷宫)
广度/宽度优先搜索(BFS)【算法入门】郭志伟@SYSU:raphealguo(at)qq.com2012/04/271.前言广度优先搜索(也称宽度优先搜索,缩写BFS,以下采用广度来描述)是连通图的一种遍历策略。因为它的思想是从一个顶点V0开始,辐射状地优先遍历其周围较广的区域,故得名。一般可以用它做什么呢?一个最直观经典的例子就是走迷宫,我们从起点开始,找出到终点的最短路程,很多最短路径算法就是基于广度优先的思想成立的。算法导论里边会给出不少严格的证明,我想尽量写得通俗一点,因此采用一些直转载 2020-10-20 16:41:10 · 3381 阅读 · 0 评论 -
二叉树非递归遍历(先序,中序,后续)
#include<bits/stdc++.h>using namespace std;typedef struct TNode{ char data; struct TNode *Left; struct TNode *Right;}TNode,*Tree;void Precreat(Tree &T){ //如果不加引用则会产生临时变量T,而不是原来的地址 char c; scanf("%c" , &c); if(c == '#')T = NULL; e.原创 2020-10-13 18:31:15 · 150 阅读 · 0 评论 -
7-6 银行排队问题之单队列多窗口加VIP服务
解题思路:基本原理为一队多窗口问题,利用模拟队列进行操作step:①通过每个人来到的时间与窗口结束上一个工作的时间的关系来进行插入预备队列:每次插入一个人,进行一次预备队列的刷新,即获得结束时间最小的窗口的时间,将所有输入中由头至尾将客户的到达时间小于该结束时间的客户进行入队(预备队列即排队)②对预备队列进行操作:1.若队列中有VIP且此时VIP窗口结束则将VIP客户安排到VIP窗口2.获得最早结束的窗口时间,若该时间与VIP窗口同时结束,且队伍中有VIP客户,则先...原创 2020-10-04 18:59:17 · 2827 阅读 · 0 评论 -
稀疏矩阵的转置(三元组的快速转置法)
#include<iostream>#include<cstdio>using namespace std;class Turple{ //构建三元组 public: int i; int j; int elem;};int main(){ Turple matrix[12]; //原矩阵 Turple rematrix[12]; //转置矩阵 for(int i = 1;i <= 8;i++){ int x,y,e; cin&g.原创 2020-10-02 08:35:44 · 3675 阅读 · 0 评论 -
PTA旅游规划(迪杰斯特拉算法)
思路:迪杰斯特拉算法求最短路径,只是需要考虑花费钱的最小值进行刷新(当路径相同时)PS:迪杰斯特拉算法求有起点和终点的最短路径区分最小生成树.#include<iostream>#include<cstdio>#define MIN 65535using namespace std;int map[1100][1100];int key[1100];int len[1100];int lenmap[1100][1100];int cost[1100];..原创 2020-09-28 20:32:29 · 587 阅读 · 0 评论 -
中缀表达式转后缀表达式(利用栈)
感谢大佬博客的启发:https://blog.youkuaiyun.com/weixin_43906799/article/details/104561353/*core: 1.只要是数字直接输出 2.若为符号: ①若栈顶的符号优先级高于或等于此时所需判断的符号优先级则循环弹出栈顶的元素 直到栈为空或栈顶的元素的优先级小于该符号的优先级 ②若为'(' 则将该符号入栈,若为')'则将'()'之间的所有元素进行弹出 弹出时遵循①中的规则 ,且当为第一个'('后的第一个元素时,直接入栈 从第原创 2020-09-27 19:51:55 · 259 阅读 · 0 评论 -
最长子序列(DP算法)
#include <bits/stdc++.h>#define MAX 100000+10#define INF 100000000using namespace std;int a[MAX],c[MAX],len;int main(){ int n,j; while(scanf("%d",&n)!=EOF) { for(int i=0; i<n; i++) scanf("%d",..原创 2020-09-20 15:50:13 · 371 阅读 · 0 评论 -
链表的逆置(不另开辟空间)
//库函数头文件包含#include<stdio.h>#include<malloc.h>#include<stdlib.h>//函数状态码定义#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status;typed.原创 2020-09-13 21:49:15 · 472 阅读 · 0 评论 -
链表求交集(时间复杂度O(n))
#include<iostream>#include<malloc.h>#include<cstdio>using namespace std;typedef struct LNode{ int data; int sum = 0; struct LNode *next;}LNode,*List;void creat_list(List &L){ L = (LNode *)malloc(sizeof(LNode)); L->next .原创 2020-09-12 21:56:44 · 1250 阅读 · 0 评论 -
链表合并(时间复杂度O(n))
#include<iostream>#include<malloc.h>#include<cstdio>using namespace std;typedef struct LNode{ int data; int sum = 0; struct LNode *next;}LNode,*List;void creat_list(List &L){ L = (LNode *)malloc(sizeof(LNode)); L->next .原创 2020-09-12 21:55:57 · 1611 阅读 · 1 评论 -
最小生成树(普利姆算法邻接表实现)C++
#include<iostream>#include<cstdio>#include<queue>#include<cstring>#define max_sum 30#define INFINITY 65535using namespace std;typedef struct Arcnode{ int adjvex; struct Arcnode *nextarc;}Arcnode;typedef struct Vexnode{ .原创 2020-09-03 21:02:23 · 823 阅读 · 1 评论 -
BFS广度优先算法 C/C++
#include<iostream>#include<cstdio>#include<queue>#include<cstring>#define max_sum 30using namespace std;typedef struct Arcnode{ int adjvex; struct Arcnode *nextarc;}Arcnode;typedef struct Vexnode{ char data; struct Arcn.原创 2020-09-01 16:55:29 · 177 阅读 · 0 评论 -
马踏棋盘算法(骑士周游问题)C++
#include<iostream>#include<cstdio>using namespace std;#define X 8 //定义棋盘#define Y 8int chess[X+1][Y+1]; int nextxy(int &x,int &y,int count){ //判断该棋盘格是否可以插入棋子 switch (count) { case 1: if(x + 2 <= X && y - 1 &.原创 2020-08-31 21:18:30 · 1014 阅读 · 0 评论 -
DFS(深度优先遍历算法)C++
void matrix_make(Graph &g){ //由邻接表构造邻接矩阵 Arcnode *p = new Arcnode; memset(g.arc_matrix,0,sizeof(g.arc_matrix)); for(int i = 1;i <= g.vex_sum;i++) { p = g.vexlist[i].firstarc; while(p){ g.arc_matrix[i][p->adjvex] = 1; p = p->nex.原创 2020-08-30 08:21:44 · 993 阅读 · 0 评论 -
邻接表(逆邻接表)创建
#include<cstdio>#include<iostream>#include<malloc.h>#define max_sum 30 using namespace std;typedef struct Arcnode{ int adjvex; struct Arcnode *nextarc;}Arcnode;typedef struct Vexnode{ char data; struct Arcnode *firstarc;}Vnod.原创 2020-08-29 09:01:52 · 2623 阅读 · 0 评论 -
二叉树的创建和遍历 C/C++
#include<cstdio>#include<malloc.h>#include<iostream>using namespace std;typedef char Elemtype;typedef struct BiTnode{ char data; struct BiTnode* lchild; struct BiTnode* rchild;}BiTnode,*BiTree;//前序创建二叉树 void BiTree_creat(BiTre.原创 2020-08-20 15:08:49 · 331 阅读 · 0 评论 -
双向循环链表创建
#include<iostream>#include<malloc.h>#include<cstdio>using namespace std;struct List{ int data; List* next; List* prior;}*list,*end;int len = 0;void List_made(){ int t; list = new List; list->next = NULL; list->prior =.原创 2020-08-18 14:34:48 · 361 阅读 · 0 评论 -
链表创建(尾插法)
#include<iostream>#include<malloc.h>#include<cstdio>using namespace std;struct List{ int data; List* next;}*list,*end;int len = 0;void List_made(){ int t; list = new List; list->next = NULL; List *p; List *head = new Lis.原创 2020-08-18 14:23:24 · 222 阅读 · 1 评论 -
链表创建(头插法)
#include<iostream>#include<malloc.h>#include<cstdio>using namespace std;struct List{ int data; List* next;}*list;void List_made(){ int t; list = new List; list->next = NULL; List *p; List *head = new List; head = list; .原创 2020-08-18 14:11:21 · 156 阅读 · 0 评论