数据结构
此刻我在家里喂猪呢
2020 开启CS之路
展开
-
求最大值和次大值三种方法
#include<iostream>using namespace std;//第一个for循环遍历出最大值,以最大值为分割点 分别遍历左边最大值和右边最大值void max3(int a[], int lo, int hi, int &x1, int &x2){ int i; for (x1 = lo, i=lo+1; i < hi; i++) { if (a[x1] < a[i]) x1 = i; .原创 2021-03-18 21:09:50 · 5788 阅读 · 0 评论 -
pta7-5 堆中的路径 (25分)
将一系列给定数字插入一个初始为空的小顶堆H[]。随后对任意给定的下标i,打印从H[i]到根结点的路径。输入格式:每组测试第1行包含2个正整数N和M(≤1000),分别是插入元素的个数、以及需要打印的路径条数。下一行给出区间[-10000, 10000]内的N个要被插入一个初始为空的小顶堆的整数。最后一行给出M个下标。输出格式:对输入中给出的每个下标i,在一行中输出从H[i]到根结点的路径上的数据。数字间以1个空格分隔,行末不得有多余空格。输入样例:5 346 23 26 24 1原创 2020-07-06 20:28:43 · 278 阅读 · 0 评论 -
pta7-23 还原二叉树 (25分)
#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct TNode* BTree;typedef char ElementType;struct TNode{ ElementType Data; BTree Left; BTree Right;};char pre[100];char in[100];BTree Create(int preL,int preR,.原创 2020-07-06 15:32:04 · 234 阅读 · 0 评论 -
pta6-12 二叉搜索树的操作集 (30分)
本题要求实现给定二叉搜索树的5种常用操作。函数接口定义:BinTree Insert( BinTree BST, ElementType X );BinTree Delete( BinTree BST, ElementType X );Position Find( BinTree BST, ElementType X );Position FindMin( BinTree BST );Position FindMax( BinTree BST );其中BinTree结构定义如下:原创 2020-07-06 11:05:29 · 126 阅读 · 0 评论 -
pta7-4 是否同一棵二叉搜索树 (25分)
给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果。于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树。输入格式:输入包含若干组测试数据。每组数据的第1行给出两个正整数N(≤10)和L,分别是每个序列插入元素的个数和需要检查的序列个数。第2行给出N个以空格分隔的正整数,作为初始插入序列。最后L行,每行给出N个插入的元素,属于L个需要.原创 2020-07-03 19:59:06 · 616 阅读 · 0 评论 -
pta7-3 树的同构 (25分)
给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。图1图2现给定两棵树,请你判断它们是否是同构的。输入格式:输入给出2棵二叉树树的信息。对于每棵树,首先在一行中给出一个非负整数N(≤10),即该树的结点数(此时假设结点从0到N−1编号);随后N行,第i行对应编号第i个结点,给出该结点中存储的1...原创 2020-06-29 14:41:18 · 195 阅读 · 0 评论 -
pta6-11 先序输出叶结点 (15分)
本题要求按照先序遍历的顺序输出给定二叉树的叶结点。函数接口定义:void PreorderPrintLeaves( BinTree BT );其中BinTree结构定义如下:typedef struct TNode *Position;typedef Position BinTree;struct TNode{ ElementType Data; BinTree Left; BinTree Right;};函数PreorderPrintLeaves应原创 2020-06-28 19:46:00 · 222 阅读 · 0 评论 -
pta6-10 二分查找 (20分)
本题要求实现二分查找算法。函数接口定义:Position BinarySearch( List L, ElementType X );其中List结构定义如下:typedef int Position;typedef struct LNode *List;struct LNode { ElementType Data[MAXSIZE]; Position Last; /* 保存线性表中最后一个元素的位置 */};L是用户传入的一个线性表,其中ElementT原创 2020-06-28 19:39:27 · 484 阅读 · 0 评论 -
pta 6-9 二叉树的遍历 (25分)
本题要求给定二叉树的4种遍历。函数接口定义:void InorderTraversal( BinTree BT );void PreorderTraversal( BinTree BT );void PostorderTraversal( BinTree BT );void LevelorderTraversal( BinTree BT );其中BinTree结构定义如下:typedef struct TNode *Position;typedef Position BinTr原创 2020-06-28 16:52:42 · 279 阅读 · 2 评论 -
pta 6-8 求二叉树高度 (20分)
本题要求给定二叉树的高度。函数接口定义:int GetHeight( BinTree BT );其中BinTree结构定义如下:typedef struct TNode *Position;typedef Position BinTree;struct TNode{ ElementType Data; BinTree Left; BinTree Right;};要求函数返回给定二叉树BT的高度值。裁判测试程序样例:#include <原创 2020-06-28 16:02:01 · 260 阅读 · 0 评论 -
PAT 7-18 银行业务队列简单模拟 (25分)
设某银行有A、B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 —— 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客。给定到达银行的顾客序列,请按业务完成的顺序输出顾客序列。假定不考虑顾客先后到达的时间间隔,并且当不同窗口同时处理完2个顾客时,A窗口顾客优先输出。输入格式:输入为一行正整数,其中第1个数字N(≤1000)为顾客总数,后面跟着N位顾客的编号。编号为奇数的顾客需要到A窗口办理业务,为偶数的顾客则去B窗口。数字间以空格分隔。输出格式:按业务处理完成的顺序原创 2020-06-27 14:45:42 · 401 阅读 · 0 评论 -
PTA 6-1 单链表逆转 (20分)
本题要求实现一个函数,将给定的单链表逆转。函数接口定义:List Reverse( List L );其中List结构定义如下:typedef struct Node *PtrToNode;struct Node { ElementType Data; /* 存储结点数据 */ PtrToNode Next; /* 指向下一个结点的指针 */};typedef PtrToNode List; /* 定义单链表类型 */L是给定单链表,函数Reverse要原创 2020-06-26 22:28:57 · 409 阅读 · 0 评论 -
PTA 7-22 堆栈模拟队列 (25分)
设已知有两个堆栈S1和S2,请用这两个堆栈模拟出一个队列Q。所谓用堆栈模拟队列,实际上就是通过调用堆栈的下列操作函数:int IsFull(Stack S):判断堆栈S是否已满,返回1或0; int IsEmpty (Stack S ):判断堆栈S是否为空,返回1或0; void Push(Stack S, ElementType item ):将元素item压入堆栈S; ElementType Pop(Stack S ):删除并返回S的栈顶元素。实现队列的操作,即入队void AddQ(E原创 2020-06-26 15:43:03 · 488 阅读 · 0 评论 -
PTA 7-52 两个有序链表序列的交集 (20分)
已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。输入格式:输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。输出格式:在一行中输出两个输入序列的交集序列,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL。输入样例:1 2 5 -12 4 5 8 10 -1输出样例:2 5#include<stdio.h>#include<stdli原创 2020-06-24 23:53:19 · 691 阅读 · 1 评论 -
PTA 7-51 两个有序链表序列的合并 (20分)
已知两个非降序链表序列S1与S2,设计函数构造出S1与S2合并后的新的非降序链表S3。输入格式:输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。输出格式:在一行中输出合并后新的非降序链表,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL。输入样例:1 3 5 -12 4 6 8 10 -1输出样例:1 2 3 4 5 6 8 10#include<stdio.h>原创 2020-06-24 23:00:13 · 1200 阅读 · 0 评论 -
PTA7-21 求前缀表达式的值 (25分)
算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。前缀表达式指二元运算符位于两个运算数之前,例如2+3*(7-4)+8/4的前缀表达式是:+ + 2 * 3 - 7 4 / 8 4。请设计程序计算前缀表达式的结果值。输入格式:输入在一行内给出不超过30个字符的前缀表达式,只包含+、-、*、/以及运算数,不同对象(运算数、运算符号)之间以空格分隔。输出格式:输出前缀表达式的运算结果,保留小数点后1位,或错误信息ERROR。输入样例:+ + 2 * 3 - 7 4 / 8 4原创 2020-06-24 15:13:14 · 668 阅读 · 0 评论 -
PTA 7-20 表达式转换 (25分)
算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个运算数中间。请设计程序将中缀表达式转换为后缀表达式。输入格式:输入在一行中给出不含空格的中缀表达式,可包含+、-、*、\以及左右括号(),表达式不超过20个字符。输出格式:在一行中输出转换后的后缀表达式,要求不同对象(运算数、运算符号)之间以空格分隔,但结尾不得有多余空格。输入样例:2+3*(7-4)+8/4输出样例:2 3 7 4 - * + 8 4 / +原创 2020-06-23 21:53:44 · 1190 阅读 · 1 评论 -
PTA 6-7 在一个数组中实现两个堆栈 (20分)
本题要求在一个数组中实现两个堆栈。函数接口定义:Stack CreateStack( int MaxSize );bool Push( Stack S, ElementType X, int Tag );ElementType Pop( Stack S, int Tag );其中Tag是堆栈编号,取1或2;MaxSize堆栈数组的规模;Stack结构定义如下:typedef int Position;struct SNode { ElementType *Data; Po.原创 2020-06-22 20:04:34 · 287 阅读 · 0 评论 -
PTA7-19 求链式线性表的倒数第K项 (20分)
给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字。输入格式:输入首先给出一个正整数K,随后是若干非负整数,最后以一个负整数表示结尾(该负数不算在序列内,不要处理)。输出格式:输出倒数第K个位置上的数据。如果这个位置不存在,输出错误信息NULL。输入样例:4 1 2 3 4 5 6 7 8 9 0 -1输出样例:7我自己写的一种 超时 然后又参照网上写的两种 #include<stdio.h>#includ...原创 2020-06-21 23:37:10 · 696 阅读 · 0 评论 -
单链表的建立,节点的插入,删除,遍历(未完善版)
#include <stdio.h>#include <stdlib.h>#define OK 1#define ERROR 0typedef int ElemType;typedef int Status; typedef struct LinkNode{ ElemType data; struct LinkNode *next;}...原创 2018-11-26 10:32:23 · 243 阅读 · 0 评论 -
汉诺塔问题
#include<stdio.h> void move(int n,char x,char y,char z) { if(1==n) { printf("%c-->%c",x,z); } else { move(n-1,x,z,y); printf("%c-->%c",x,z); move(n-1,y,x,z); } } int ma...原创 2019-02-28 10:42:43 · 106 阅读 · 0 评论 -
用栈的方法将二进制转换成十进制
输入完数据后 以#jie结束#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<math.h>#define STACK_INIT_SIZE 20#define STACKINCREMENT 10typedef char ElemType;...原创 2019-02-20 09:33:23 · 520 阅读 · 0 评论 -
数据结构 斐波那契数列的迭代和递归
迭代#include<stdio.h> int main() { int i; int a[40]; a[0]=0; a[1]=1; printf("%d %d",a[0],a[1]); for(i=2;i<40;i++) { a[i]=a[i-1]+a[i-2]; printf("%d",a[i]); } return 0; }...原创 2019-02-26 15:15:42 · 219 阅读 · 0 评论 -
栈的方法逆波兰后缀表达式(来自小甲鱼数据结构系列)
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<ctype.h>#include<stdlib.h>#define STACK_INIT_SIZE 20#define STACKINCREMENT 10#define MAXBUFFER 10typedef ...原创 2019-02-21 09:58:19 · 367 阅读 · 0 评论 -
约瑟夫环C语言程序 day1
约瑟夫环问题,n个人围着一张桌子,从1开始报数,规定报道第k数的人自杀,接着下一给重新开始报数。这里n=41,k=3。#include<stdio.h>#include<stdlib.h>typedef int EleType;typedef struct LinkNode{ EleType data; struct LinkNode *next;}...原创 2018-11-22 15:19:53 · 588 阅读 · 0 评论