随笔分类 - 算法与数据结构
摘要:给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集。假设顶点从0到N−1编号。进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点。 输入格式: 输入第1行给出2个整数N(0<N≤10)和E,分别是图的顶点数和边数。随后E行,每行给出一条边的两个端点。每
阅读全文
摘要:给定一个整数序列,请按非递减序输出采用二路归并排序(递归法)的各趟排序后的结果(每完成一次归并操作就输出归并后的结果)。 输入格式: 测试数据有多组,处理到文件尾。每组测试数据第一行输入一个整数n(1≤n≤100),第二行输入n个整数。 输出格式: 对于每组测试,输出若干行,每行是一趟排序后的结果,
阅读全文
摘要:N个村庄,从1到N编号,现在请您兴建一些路使得任何两个村庄彼此连通。我们称村庄A和B是连通的,当且仅当在A和B之间存在一条路,或者存在一个存在C,使得A和C之间有一条路,并且C和B是连通的。已知在一些村庄之间已经有了一些路,您的工作是再兴建一些路,使得所有的村庄都是连通的,并且兴建的路的长度是最小的
阅读全文
摘要:本题目要求用先序序列和中序序列构造一棵二叉树(树中结点个数不超过10个),并输出其后序序列。 输入格式: 在第一行中输入元素个数。 第二行中输入先序序列,用空格分隔。 第三行中输入中序序列,用空格分隔。 输出格式: 输出此二叉树的后序序列,用空格分隔,最后也有一个空格。 输入样例: 5 10 20
阅读全文
摘要:本题要求实现二路归并排序中的归并操作,待排序列的长度1<=n<=1000。 函数接口定义: void Merge(SqList L,int low,int m,int high); 其中L是待排序表,使排序后的数据从小到大排列。###类型定义: #include<stdio.h> #include<
阅读全文
摘要:本题要求实现堆排序中的筛选函数,待排序列的长度1<=n<=1000。 函数接口定义: void HeapAdjust( HeapType H, int s, int m); 其中L是待排序表,使排序后的数据从小到大排列。###类型定义: typedef int KeyType; typedef st
阅读全文
摘要:本题要求实现快速排序的一趟划分函数,待排序列的长度1<=n<=1000。 函数接口定义: int Partition ( SqList L, int low, int high ); 其中L是待排序表,使排序后的数据从小到大排列。###类型定义: typedef int KeyType; typed
阅读全文
摘要:给定一系列整型关键字和素数P,用除留余数法定义的散列函数H(Key)=Key将关键字映射到长度为P的散列表中。用线性探测法解决冲突。 输入格式: 输入第一行首先给出两个正整数N(≤1000)和P(≥N的最小素数),分别为待插入的关键字总数、以及散列表的长度。第二行给出N个整型关键字。数字间以空格分隔
阅读全文
摘要:试实现线性探测法的查找函数。 函数接口定义: Position Find( HashTable H, ElementType Key ); 其中HashTable是开放地址散列表,定义如下: #define MAXTABLESIZE 100000 /* 允许开辟的最大散列表长度 */ typedef
阅读全文
摘要:用迪杰斯特拉算法实现有向网的最短路径 输入格式: 第一行输入有向网的顶点和边数,第二行输入各顶点值,用空格间隔,第三行开始输入各条边的 两个点的及边上的权值,用空格间隔。最后一行输入要求路径的两个顶点。 输出格式: 输出最短路径经过的各顶点,中间用-->连接。 输入样例: 在这里给出一组输入。例如:
阅读全文
摘要:编写程序,实现由邻接表存储实现无向图的深度优先搜索遍历的功能。顶点为字符型。 输入格式: 第一行输入顶点个数及边的个数,第二行依次输入各顶点,第三行开始依次输入边的两个顶点,用空格分开。最后输入深度优先遍历的起始点。 输出格式: 输出深度优先遍历结果,空格分开,若起始点不合理,则输出error。 输
阅读全文
摘要:输入一组整型权值,构建哈夫曼树,实现哈夫曼编码,并输出带权路径长度。 输入格式: 第一行输入叶子结点个数,接着依次输入权值。 输出格式: 输出哈夫曼编码,输出带权路径长度。 输入样例: 在这里给出一组输入。例如: 8 5 29 7 8 14 23 3 11 输出样例: 在这里给出相应的输出。例如:
阅读全文
摘要:已知p指向双向循环链表中的一个结点,其结点结构为data、prior、next三个域,实现交换p所指向的结点和它的前缀结点的顺序。 输入格式: 第一行输入元素个数,第二行输入元素值,第三行输入要交换的元素值,第四行输出结果。 输出格式: 输出交换后的结果,中间不用空格分隔,若要交换的值:4,不在数组
阅读全文
摘要:有两张非递增有序的线性表A,B,采用顺序存储结构,两张表合并用c表存,要求C为非递减有序的,然后删除C表中值相同的多余元素。元素类型为整型 输入格式: 第一行输入输入表A的各个元素,以-1结束,中间用空格分隔;第二行输入表B的各个元素,以-1结束,中间用空格分隔。 输出格式: 输出结果为表C的非递减
阅读全文
摘要:本题要求实现一个函数,将给定单向链表逆置,即表头置为表尾,表尾置为表头。链表结点定义如下: struct ListNode { int data; struct ListNode *next; }; 函数接口定义: struct ListNode *reverse( struct ListNode
阅读全文
摘要:#include <stdio.h> #include <queue> #include <cstring> #define MAXSIZE 100 using namespace std; int main() { queue <char>q; char a[MAXSIZE]; scanf("%s
阅读全文
摘要:#include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 //元素进栈 int push(char* zhan,int top,char elem){ zhan[top]=elem; top++; return top; } //元素出栈
阅读全文
摘要:裁判测试程序样例: #include <stdio.h> #include <stdlib.h> typedef int ElementType; typedef struct Node *PtrToNode; struct Node { ElementType Data; PtrToNode Ne
阅读全文
摘要:函数接口定义: 顺序表描述的结构体为 typedef struct { ElemType *elem; //存储空间的基地址 int length; //当前长度 } SqList; 需要实现函数的接口分别为: int GetElem(SqList L, int i, ElemType &e) 顺序
阅读全文