数据结构
文章平均质量分 73
头发茂盛有光泽
这个作者很懒,什么都没留下…
展开
-
输出月份英文名(函数)
函数接口定义:char *getmonth( int n );函数getmonth应返回存储了n对应的月份英文名称的字符串头指针。如果传入的参数n不是一个代表月份的数字,则返回空指针NULL。裁判测试程序样例:#include <stdio.h>char *getmonth( int n );int main(){int n;char *s;scanf("%d",...原创 2019-02-21 16:48:27 · 3092 阅读 · 2 评论 -
符号配对
请编写程序检查C语言源程序中下列符号是否配对:/与/、(与)、[与]、{与}。输入格式:输入为一个C语言源程序。当读到某一行中只有一个句点.和一个回车的时候,标志着输入结束。程序中需要检查配对的符号不超过100个。输出格式:首先,如果所有符号配对正确,则在第一行中输出YES,否则输出NO。然后在第二行中指出第一个不配对的符号:如果缺少左符号,则输出?-右符号;如果缺少右符号,则输出左符号-...原创 2019-04-16 21:36:34 · 361 阅读 · 0 评论 -
二叉树的三种遍历(C实现)
#include<stdio.h>#include<stdlib.h>typedef char ElemType;typedef struct BiTNode{ ElemType data; struct BiTNode *lchild, *rchild;}BiTNode, *BiTree;BiTree Create(){ ElemType ch; ...原创 2019-04-17 19:35:19 · 1196 阅读 · 1 评论 -
根据后序和中序遍历输出先序遍历
本题要求根据给定的一棵二叉树的后序遍历和中序遍历结果,输出该树的先序遍历结果。输***入格式:第一行给出正整数N(≤30),是树中结点的个数。随后两行,每行给出N个整数,分别对应后序遍历和中序遍历结果,数字间以空格分隔。题目保证输入正确对应一棵二叉树。***输出格式:在一行中输出Preorder:以及该树的先序遍历结果。数字间有1个空格,行末不得有多余空格。输入样例:72 3 1 5...原创 2019-04-24 21:17:22 · 313 阅读 · 2 评论 -
还原二叉树
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。输入格式:输入首先给出正整数N(≤50),为树中结点总数。下面两行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区别大小写)的字符串。输出格式:输出为一个整数,即该二叉树的高度。输入样例:9ABDFGHIECFDHGIBEAC输出样例:5#include <stdio.h>#in...原创 2019-04-24 21:18:11 · 288 阅读 · 0 评论 -
树的遍历
给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。输入格式:输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。输出格式:在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。输入样例:72 3 1 5 7 6 41 2 3 4 5 6...原创 2019-04-24 21:19:00 · 201 阅读 · 0 评论 -
7-4 路径判断
给定一个有N个顶点和E条边的无向图,请判断给定的两个顶点之间是否有路径存在。 假设顶点从0到N−1编号。输入格式:输入第1行给出2个整数N(0<N≤10)和E,分别是图的顶点数和边数。随后E行,每行给出一条边的两个端点。每行中的数字之间用1空格分隔。最后一行给出两个顶点编号i,j(0≤i,j<N),i和j之间用空格分隔。输出格式:如果i和j之间存在路径,则输出"There ...原创 2019-05-19 21:13:38 · 4693 阅读 · 3 评论 -
Gone Fishing
有n(2<=n<=25)个湖从左到右一字排开。从第i个湖走到第i+1个湖要耗时t[i]个时间片(每个时间片5分钟)。John有h(1<=h<=16)个小时可以用在这些湖钓鱼(包括湖间行走时间)。在每个湖待的时间必须是整数个时间片或0。就算钓不着鱼了,也可以在湖边呆着。对于湖i,John在那里的第一个时间片可以钓到鱼f[i]条,且后续的每个时间片,能钓到的鱼数量都比上一个...原创 2019-05-25 10:29:57 · 427 阅读 · 0 评论 -
Moving Tables
题意:在一个狭窄的走廊里将桌子从一个房间移动到另一个房间,走廊的宽度只能允许一个桌子通过。给出t,表示有t组测试数据。再给出n,表示要移动n个桌子。n下面有n行,每行两个数字,表示将桌子从a房间移到b房间。走廊的分布图如一图所示,每移动一个桌子到达目的地房间需要花10分钟,问移动n个桌子所需要的时间。输入:3410 2030 4050 6070 8021 32 20031...原创 2019-05-25 10:43:02 · 392 阅读 · 0 评论 -
带头结点的单链表就地逆置
本题要求实现一个函数,对带有头结点的单链表进行就地逆置。函数接口定义:void reverse ( LinkList L );L是带头结点的单链表的头指针。裁判测试程序样例:#include <stdio.h>#include <stdlib.h>typedef int ElemType;typedef struct LNode{ ElemType ...原创 2019-05-16 21:00:25 · 3775 阅读 · 0 评论 -
深搜 广搜 邻接矩阵 邻接表实现函数代码
//深搜 邻接矩阵void DFS(MGraph G, Vertex v){ visited[v] = 1; printf(" %d", v); for (int i = 0; i < G.vexnum; i++)//G的各个邻接点 { //判断有没有边 if (G.arcs[v][i] && !visited[i]); DFS(G, i); }}...原创 2019-05-13 11:42:31 · 219 阅读 · 0 评论 -
最短路径
第一种方法,是非常标准的用图这种数据结构做的。#include<stdlib.h>#define MaxVertexNum 10 int flag = 0;typedef enum { FALSE, TRUE } Boolean;Boolean visited[MaxVertexNum];typedef struct { int arcs[MaxVertexNum][M...原创 2019-05-27 10:44:18 · 302 阅读 · 0 评论 -
是否二叉搜索树(PTA) 三种实现
本题要求实现函数,判断给定二叉树是否二叉搜索树。函数接口定义:bool IsBST ( BinTree T );其中BinTree结构定义如下:typedef struct TNode *Position;typedef Position BinTree;struct TNode{ ElementType Data; BinTree Left; BinTree ...原创 2019-06-05 11:11:24 · 1286 阅读 · 0 评论 -
二叉排序树查找最小值最大值操作(PTA)两种实现
本题要求实现二叉排序树的两个基本操作。函数接口定义:BSTree FindMin( BSTree T);BSTree FindMax( BSTree T);函数FindMin返回二叉排序树T中最小元素结点的指针;函数FindMax返回二叉排序树T中最大元素结点的指针。其中BSTree结构定义如下:typedef int ElemType;typedef struct BSTNod...原创 2019-06-05 11:16:36 · 5454 阅读 · 2 评论 -
递增的整数序列链表的插入
本题要求实现一个函数,在递增的整数序列链表(带头结点)中插入一个新整数,并保持该序列的有序性。函数接口定义:List Insert( List L, ElementType X );其中List结构定义如下:typedef struct Node *PtrToNode;struct Node { ElementType Data; /* 存储结点数据 */ PtrToNo...原创 2019-05-28 19:44:31 · 5421 阅读 · 1 评论 -
查找的一些函数
1、二叉排序树的查找#include <stdio.h>#include <stdlib.h>typedef int ElemType;typedef struct BSTNode{ ElemType data; struct BSTNode *lchild,*rchild;}BSTNode,*BSTree;BSTree CreateBST();/ *二...原创 2019-06-18 20:15:21 · 966 阅读 · 0 评论 -
排序的一些函数
1、直接插入排序#include<stdio.h>#include<stdlib.h>typedef int KeyType;typedef struct { KeyType *elem; /*elem[0]一般作哨兵或缓冲区*/ int Length; ...原创 2019-06-18 20:20:01 · 772 阅读 · 0 评论 -
数组循环左移
#include<stdio.h>typedef struct{ int Date[105]; int length;}SqList;int main(){ int n, m,t=0; SqList L; scanf("%d %d\n", &n, &m); for (int i = 0; i < n; i++) { scanf("%d...原创 2019-04-16 21:00:09 · 187 阅读 · 0 评论 -
线性表元素的区间删除
给定一个顺序存储的线性表,请设计一个函数删除所有值大于min而且小于max的元素。删除后表中剩余元素保持顺序存储,并且相对位置不能改变。函数接口定义:List Delete( List L, ElementType minD, ElementType maxD );其中List结构定义如下:typedef int Position;typedef struct LNode *List;...原创 2019-04-16 20:58:27 · 833 阅读 · 0 评论 -
判断回文字符串(函数)
本题要求编写函数,判断给定的一串字符是否为“回文”。所谓“回文”是指顺读和倒读都一样的字符串。如“XYZYX”和“xyzzyx”都是回文。函数接口定义:bool palindrome( char *s );*函数palindrome判断输入字符串char s是否为回文。若是则返回true,否则返回false。裁判测试程序样例:#include <stdio.h>#incl...原创 2019-02-21 17:08:25 · 4750 阅读 · 0 评论 -
C++_STL简单应用
#include<cstdio>#include<iostream>#include<vector>//容器—— 数组的增强版#include<set>//去重,排序#include<map>//自动建立key--value对应#include<stack>//栈——先进后出#include<queue&g原创 2019-03-05 20:52:53 · 278 阅读 · 0 评论 -
C++ sort函数的使用(时间复杂度为n*log2(n))
调用函数时要有首地址,尾地址,若想表示从大到小或从小到大可以加第三个比较函数,如不,则默认从小到大。代码:#include<cstdio>#include<iostream>#include<algorithm>using namespace std;bool cmp(int a, int b){ return a > b;//若想从小到大...原创 2019-03-11 19:58:40 · 8683 阅读 · 0 评论 -
单链表的头插法和尾插法
先是尾插法(正序)需要一个尾指针同样指向头结点,注意最后应置空;#include <stdio.h>#include <stdlib.h>typedef struct LNode{ int data; struct LNode *next;}LNode, *LinkList;LinkList Create();void print(LinkList L)...原创 2019-03-24 19:54:39 · 251 阅读 · 0 评论 -
单链表的一些操作
//1、有头结点方便对首元数据元素的删除,插入操作。不带头结点要判断是不是作用在首元,是就得改变头指针指向。//2、头结点数据域可以存表长。(head->data-k+1)取倒数第k个元素。——两遍。//(走一遍,定义两个指针,先走一个,使两个之间相差k个位置,再一起移动,走得快的的走到空了,走得慢的的数据域就是指定元素。)//#include<stdio.h>#in...原创 2019-03-25 10:24:22 · 129 阅读 · 0 评论 -
名人堂与代金券(结构体排序)
对于在中国大学MOOC(http://www.icourse163.org/ )学习“数据结构”课程的学生,想要获得一张合格证书,总评成绩必须达到 60 分及以上,并且有另加福利:总评分在 [G, 100] 区间内者,可以得到 50 元 PAT 代金券;在 [60, G) 区间内者,可以得到 20 元PAT代金券。全国考点通用,一年有效。同时任课老师还会把总评成绩前 K 名的学生列入课程“名人堂”...原创 2019-03-25 11:29:00 · 660 阅读 · 0 评论 -
排列数(dfs)实现
不能重复访问,访问完整之后,记得访问记录删除。#include<stdio.h>int visited[10];int list[10];void dfs(int step, int n){ if (step == n+1) { for (int i = 1; i <= n; i++) printf("%d ", list[i]); printf("\n")...原创 2019-03-23 11:15:25 · 132 阅读 · 0 评论 -
链表逆置函数
本题要求实现一个函数,将给定单向链表逆置,即表头置为表尾,表尾置为表头。链表结点定义如下:struct ListNode { int data; struct ListNode *next;};函数接口定义:struct ListNode *reverse( struct ListNode *head );其中head是用户传入的链表的头指针;函数reverse将链表...原创 2019-04-10 19:49:08 · 2277 阅读 · 1 评论 -
7-1 整数分解为若干项之和 (20 分)
将一个正整数N分解成几个正整数相加,可以有多种分解方法,例如7=6+1,7=5+2,7=5+1+1,…。编程求出正整数N的所有整数分解式子。输入格式:每个输入包含一个测试用例,即正整数N (0<N≤30)。输出格式:按递增顺序输出N的所有整数分解式子。递增顺序是指:对于两个分解序列N1={n1 ,n2 ,⋯}和N2 ={m1 ,m2,⋯},若存在i使n1 =m1...原创 2019-04-08 13:03:39 · 3918 阅读 · 3 评论 -
【递归】放苹果
题目描述楚继光刚把油拿到厨房,老妈又大声喊道:“快去把苹果洗了放到盘子里去。”楚继光要把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5、1、1和1、5、1 是同一种分法。输入第1行为一个整数,表示测试数据的数目(测试数据的数目t(0 ≤ t ≤20),第2行为M和N(M和N,以空格分开。1≤M,N≤10)。输出输出有多少种不同分法。样...原创 2019-04-11 19:46:29 · 328 阅读 · 0 评论 -
【递归】数字三角形
如图所示,有一个层数为n(n≤1000)的数字三角形。现有一只蚂蚁从顶层开始向下走,每走下一级时,可向左下方向或右下方向走。求走到底层后它所经过数字的总和的最大值。输入第一个整数为n,以下n行为各层的数字。输出一个整数,即最大值,保证不超过整型的最大范围。样例输入516 38 2 62 1 6 53 2 4 7 6样例输出23提示最大值=1+3+6+6+7=23#...原创 2019-04-11 20:08:07 · 945 阅读 · 0 评论 -
【递归】拆分自然数
题目描述“天下熙熙,皆为利来;天下攘攘,皆为利往”,监狱里的暗势力划分地盘的目的无非是为了获取利益,他们分配利益的方式是基于这样一个准则:设总利益为自然数N,则任何一个大于1的N,总可以拆分成若干个小于N的自然数之和,求出N的所有拆分后选择最合适的一种进行分配,例如当N=3时,有两种划分,即3=1+2和3=1+1+1。试求出N的所有拆分。输入一个整数即N,N<100。输出输出每一种...原创 2019-04-11 20:47:53 · 1039 阅读 · 0 评论 -
顺序表(一些函数)
查找int LocateElem(SqList L, ElemType e){ for (int i=0; i < L.length; i++) if (L.elem[i] == e) return i + 1; return 0;}插入int ListInsert(SqList &L, int i, ElemType e){ if ((i < 1) || ...原创 2019-04-16 20:56:06 · 302 阅读 · 0 评论 -
字符串哈希(上)
一、我是入门的,先演示哈希过程,给你一个字符串,要求出其哈希值就会比较***容易查询和求子串O(1)***。求哈希值的时候我们会把它看作p进制(一般来说看作131或13331进制,据说这样重复会少一些),即使这样数也会很大,所以一般会对结果进行q取模(一般是2^64);下面是我们要求出每一位的前缀哈希值(假设只有小写字母az对应126);可以得到求前缀和的递推公式;下面是求前缀哈希值的...原创 2019-08-17 13:24:24 · 281 阅读 · 0 评论