PTA_数据结构
PTA数据结构题解
fftx_00
这个作者很懒,什么都没留下…
展开
-
【PTA】电话聊天狂人 (25 分)
//hash函数构造方法:除留余数法Hash()//冲突解决方法:平方探测法Find()#include <iostream>#include <string>#include <math.h>using namespace std;int HashTable_Size;struct cell{ int info;//0表示无效单元,1表示占用 string data;};//找到下一个素数值作为表长int Ne...原创 2021-09-05 18:35:47 · 243 阅读 · 0 评论 -
【PTA】PAT Judge (25 分)
每道题有四种状态:{- , -1 , 0 , >0 }因此一开始初始化每道题不能是0,要不然不好区分;最好不是-1,当然可以是-1;为了可读性,最好初始化为-2每个人的分数有显示和不显示两种状态提交过即使是0分,人少的时候也必须显示;所以总的score也不能初始化为0,防止提交过0分和没有提交过的混淆最好也定义成一个负数#include <iostream>#include <algorithm>using name...原创 2021-09-02 00:44:45 · 188 阅读 · 0 评论 -
【PTA】统计工龄 (20 分)
典型桶排序#include <iostream>using namespace std;int cnt[51];int main(){ int n; scanf("%d",&n); int tmp; for(int i=0;i<n;i++){ cin>>tmp; cnt[tmp]++; } for(int i=0;i<=50;i++){ ...原创 2021-09-01 23:26:18 · 221 阅读 · 0 评论 -
【PTA】Insertion or Heap Sort (25 分)
//跟上一题基本一样#include <iostream>#define MAXN 100001using namespace std;int a[MAXN];int res[MAXN];int Insert2[MAXN],Heap2[MAXN];int IsRight(int* A,int N){ int flag=1; for(int i=0;i<N;i++){ if(A[i]!=res[i]) flag=0; } ...原创 2021-08-28 22:45:02 · 140 阅读 · 0 评论 -
【PTA】Insert or Merge (25 分)
#include <iostream>#define MAXN 100001using namespace std;int a[MAXN];int res[MAXN];int Insert2[MAXN],Merge2[MAXN];int IsRight(int* A,int N){ int flag=1; for(int i=0;i<N;i++){ if(A[i]!=res[i]) flag=0; } retur...原创 2021-08-28 22:20:17 · 112 阅读 · 0 评论 -
【PTA】排序算法
一、冒泡排序//1:没有优化的冒泡排序#include <iostream>#define MAXN 100001using namespace std;int a[MAXN];void Bubble_Sort(int* a,int N){ //N-1趟 for(int k=N-1;k>0;k--){ for(int i=0;i<k;i++){ if(a[i]>a[i+1]){ .原创 2021-08-26 15:44:07 · 1477 阅读 · 0 评论 -
【PTA】关键活动 (30 分)
#include <iostream>#include <vector>#include <stack>#include <queue>#define MAXN 110using namespace std;struct Node{ int v; int weight; Node(int _v,int _weight):v(_v),weight(_weight){}};int N,M;vector...原创 2021-10-05 13:37:06 · 310 阅读 · 0 评论 -
【PTA】How Long Does It Take (25 分)
#include <iostream>#include <vector>#include <stack>#include <queue>#define MAXN 110using namespace std;struct Node{ int v; int weight; Node(int _v,int _weight):v(_v),weight(_weight){}};int N,M;vect...原创 2021-10-04 23:29:50 · 119 阅读 · 0 评论 -
【PTA】公路村村通 (30 分)
#include <iostream>#define MAXN 1010#define MAXDATA 1000000000using namespace std;int N,M;int G[MAXN][MAXN];int dis[MAXN];int vis[MAXN];int prim(){ int ans=0;//初始化最小边权之和ans fill(dis,dis+N,MAXDATA); dis[0]=0;//定义起始点为0 ...原创 2021-10-04 20:34:16 · 257 阅读 · 0 评论 -
【PTA】旅游规划 (25 分)
//有权图的单源最短路径:Dijkstra的变形#include <iostream>#define MAXN 520#define INFINITY 65535using namespace std;int G[MAXN][MAXN];int P[MAXN][MAXN];int N,M,S,D;void CreateG(){ cin>>N>>M>>S>>D; for(int i=0;i<N;...原创 2021-08-15 01:01:13 · 1685 阅读 · 0 评论 -
【PTA】Saving James Bond - Hard Version (30 分)
//由于第一跳的特殊性:起点有多个//由于结点不确定性:终点也有多个//多源最短路Floyd#include <iostream>#include <queue>#include <math.h>#include <algorithm>#define MAXN 110#define INFINITE 65535using namespace std;struct node{ int x; int y;...原创 2021-08-14 23:11:22 · 151 阅读 · 0 评论 -
【PTA】哈利·波特的考试 (25 分)
//事实上是多源最短路问题#include <iostream>#define INFINITY 200using namespace std;#define MAXN 110int G[MAXN][MAXN];int Nv,Ne;int CreateG(){ cin>>Nv>>Ne; for(int i=1;i<=Nv;i++){ for(int j=1;j<=Nv;j++){//对角元素设为...原创 2021-08-14 16:53:15 · 396 阅读 · 0 评论 -
【PTA】六度空间 (30 分)
//涉及层数的问题,不能使用DFS,因为要递归,不易记录每个结点的6层以内的个数#include <iostream>#include <queue>#define MAXN 1010using namespace std;//其实比较稀疏,且每个结点的邻接点已经给出,最好使用邻接表int N,M;int G[MAXN][MAXN];int visited[MAXN];//让BFS返回每个vetex的计数,就不用多开一个数组了int B...原创 2021-08-07 20:42:54 · 550 阅读 · 1 评论 -
【PTA】Saving James Bond - Easy Version (25 分)
#include <iostream>#include <algorithm>using namespace std;//存储每个点的x、y坐标struct Node{ int x; int y;};#define MAXN 110Node po[MAXN];int Nv;int D;int flag=0;int visited[MAXN];void FindEdge(int current){ visite...原创 2021-08-04 16:21:30 · 67 阅读 · 0 评论 -
【PTA】列出连通集(25分)——无向无权图邻接表存储
//因为要求编号递增访问邻接点,//因此如果使用邻接表,还需要对邻接表排序后再遍历//若不排序,则输出的顺序会有问题//本例暂时省略排序部分,重点在于熟悉邻接表的建立和遍历过程#include <iostream>#include <queue>using namespace std;struct AdjVNode{ int AdjV;//终点 int Weight;//边权 AdjVNode* next;//下一个结点指针};原创 2021-08-03 21:47:20 · 219 阅读 · 0 评论 -
【PTA】列出连通集 (25 分)——无向无权图邻接矩阵存储
#include <iostream>#include <algorithm>#include <queue>using namespace std;//无向无权图:邻接矩阵、结点数、边数#define MAXN 15int G[MAXN][MAXN],Nv,Ne;//读入图void BuildGraph(){ cin>>Nv>>Ne; int v1,v2; for(int i=0;i<Ne;i+...原创 2021-08-01 16:53:32 · 231 阅读 · 0 评论 -
【PTA】Huffman Codes (30 分)
最优编码不一定通过Huffman算法得到,比如交换该题等长编码元素的位置原创 2021-08-23 23:13:07 · 275 阅读 · 0 评论 -
【PTA】File Transfer (25 分)
//并查集#include <iostream>#define MAXN 1010using namespace std;int S[MAXN];int N;void CreateS(){ for(int i=1;i<=N;i++){ S[i]=-1; }}//路径压缩,提速int Findi(int i){ if(S[i]<0) return i; S[i]=Findi(S[i]);...原创 2021-08-23 15:37:39 · 128 阅读 · 0 评论 -
【PTA】堆中的路径 (25 分)
#include <iostream>#define MAXN 1010#define MINDATA -10001using namespace std;struct HeapStruct{ int *Elements; int Size; int Capicity;};typedef HeapStruct* MinHeap;MinHeap Create(int capicity){ MinHeap H=new HeapStruct;...原创 2021-07-28 14:06:04 · 437 阅读 · 0 评论 -
【PTA】Complete Binary Search Tree (30 分)
#include <iostream>#include <algorithm>#define MAXN 1010using namespace std;int tmp[MAXN];int a[MAXN];int nfang(int i){ int sum=1; for(int j=1;j<=i;j++){ sum*=2; } return sum;}int GetLeftHeight(int n)...原创 2021-07-26 13:10:24 · 175 阅读 · 0 评论 -
【PTA】二叉搜索树的操作集 (30 分)
Position Find( BinTree BST, ElementType X ){ if(!BST) return NULL;//不能像Delete一样递归查找,不然叶子结点会被清空 if(X<BST->Data) return Find(BST->Left,X); else if(X>BST->Data) return Find(BST->Right,X); else return BST;}Position Fi...原创 2021-07-25 00:51:52 · 434 阅读 · 0 评论 -
【PTA】Root of AVL Tree (25 分)
#include <iostream>using namespace std;struct node{ int data; node* lchild; node* rchild; int height;};int Max(int a,int b){ return a>b? a:b;}int GetHeight(node* root){//递归求树高 if(!root) return 0; e...原创 2021-07-24 23:33:25 · 151 阅读 · 0 评论 -
【PTA】是否同一棵二叉搜索树 (25 分)
#include <iostream>using namespace std;struct node{ int data; node* lchild; node* rchild;};node* Insert(node* root,int x){ if(!root){//注意不能对同一指针重复定义,会报错。//只需要赋地址即可 node* t=new node; t->data=x; ...原创 2021-07-24 13:27:38 · 284 阅读 · 0 评论 -
【PTA】Tree Traversals Again (25 分)
//由题可得先序和中序序列,还原原二叉树,再后序输出即可#include <iostream>#include <string>#include <stack>#include <vector>using namespace std;struct node{ node* lchild; node* rchild; int data;};stack<int> s;vector<int...原创 2021-07-20 22:42:15 · 171 阅读 · 0 评论 -
【PAT】List Leaves (25 分)
#include <iostream>#include <queue>#define MAXN 10using namespace std;struct node{ int id; int lchild; int rchild;}T[MAXN];int check[MAXN];queue<int> q;int tmp;//从上到下,从左到右,即层序输出void PrintT(int r){ if(r=...原创 2021-07-20 19:30:09 · 78 阅读 · 0 评论 -
【PTA】树的同构 (25 分)
#include <iostream>#include <algorithm>#define MAXN 10using namespace std;struct node{ char c; int lchild; int rchild;}T1[MAXN],T2[MAXN];int root1=-1,root2=-1;int check[MAXN];int Istonggou(int r1,int r2){ //...原创 2021-07-19 22:44:27 · 194 阅读 · 0 评论 -
【PTA】玩转二叉树 (8 分)——2021夏MOOC期末大题
#include <iostream>#include <queue>using namespace std;int N;int in[31],post[31];struct node{ int data; node* lchild; node* rchild;};node* ResetT(int pL,int pR,int iL,int iR){ if(pL>pR) return NULL; int c...原创 2021-09-04 17:06:32 · 231 阅读 · 0 评论 -
【PTA】Pop Sequence
#include <iostream>#include <stack>#define MAXN 1010using namespace std;//模拟栈和需要判定的序列stack<int> s;int a[MAXN];int main(){ int M,N,K; scanf("%d %d %d",&M,&N,&K);int index=0,flag=1;int tmp=1;for(int j...原创 2021-07-15 17:33:44 · 246 阅读 · 0 评论 -
【PTA】Reversing Linked List
#include <stdio.h>#include <stdlib.h>struct Node{ int Address; int Next_Address; Node* Next; int Data;};typedef Node* List;List Insert(List L,int address,int data,int next_address){ List tmp=new Node; tmp-&...原创 2021-07-14 20:41:36 · 330 阅读 · 0 评论 -
【PTA】一元多项式的乘法与加法运算
#include <stdio.h>#include <stdlib.h>struct Node{ int coef; int index; Node* Next;};typedef Node* List;List Insert(List L,int tmpc,int tmpi){ List tmp=new Node; tmp->coef=tmpc; tmp->index=tmpi; tmp->...原创 2021-07-14 14:51:07 · 486 阅读 · 0 评论 -
【PTA】两个有序链表序列的合并
List Insert(List L,ElementType x){//将值x插入在表L末尾的函数 List tmp=( PtrToNode )malloc(sizeof(struct Node)); tmp->Data=x; tmp->Next=NULL; List L1=L; while(L1->Next){ L1=L1->Next; } L1->Next=tmp;...原创 2021-07-14 12:24:26 · 2240 阅读 · 0 评论 -
【PTA】二分查找
Position BinarySearch( List L, ElementType X ){ int start=1,end=L->Last; int mid; while(start<=end){ mid=(start+end)/2; if(L->Data[mid]==X){ return mid; }else if(L->Data[...原创 2021-07-13 22:11:35 · 1427 阅读 · 0 评论 -
【PTA】Maximum Subsequence Sum
//与4法不同在于负数+0的处理,不能动>和<号,不然出大问题,只能单独判定这一种情况//负数+0应该开始和结尾都应输出0,也就是输出三个0#include <iostream>#define MAXN 100010using namespace std;int main(){ int N; cin>>N; int a[MAXN]; int cnt=-1; for(int i=0;i<N;i++){ ...原创 2021-07-13 22:09:15 · 89 阅读 · 0 评论