数据结构
数据结构常见问题
秋生@
我学习理解比较差,没有什么天赋,所以安利了保姆式教学,在这里做个笔记,还请大神们多多指教。谢谢了
展开
-
7-3 jmu-ds-顺序表区间元素删除
注:区间元素删除,我们可以将在这个区间之外所有的元素存放到另一个数组中去,然后将这个数组输出,就得到了删除后的结果7-3 jmu-ds-顺序表区间元素删除 (25 分)若一个线性表L采用顺序存储结构存储,其中所有的元素为整数。设计一个算法,删除元素值在[x,y]之间的所有元素,要求算法的时间复杂度为O(n),空间复杂度为O(1)。输入格式:三行数据,第一行是顺序表的元素个数,第二行是顺序表的元素,第三行是x和y。输出格式:删除元素值在[x,y]之间的所有元素后的顺序表。输入样例:原创 2022-01-01 15:56:41 · 2478 阅读 · 2 评论 -
折半查找。
注:源码来自与严蔚敏的算法与数据结构,在这边做个笔记int search_Bin(SSTable ST, KeyType key){low=1,high=ST.length;while(low<=high){mid=(low+high)/2;//折半if(key==ST.R[mid].key)//找到了return mid;else if (key<ST.R[mid].key)在mid的左边return high=mid-1;elsereturn low=mid+1;原创 2022-01-01 15:40:06 · 223 阅读 · 0 评论 -
PTA-逆序数字
6-4 逆序数字 (10 分)输入一个正整数n,计算n的逆序数m,输出m与n的和。 请你定义一个inverse()函数接收一个整数值,返回这个数逆序后的结果值。例如,给定数7631,函数返回1367 。只需要提交函数定义部分。函数接口定义:在这里描述函数接口。例如:int inverse(int n);int inverse(int n){ int sum=0; while(n) { sum=sum*10+n%10; n=n/..原创 2021-12-31 21:23:21 · 993 阅读 · 0 评论 -
计算二叉树中叶子的个数
int count(BiTree T){ if(T==NULL||(T->lchild==NULL&&T->rchild==NULL)) return 1; else return count(T->lchild)+count(T->rchild); }注:从根节点出发,都有一个左孩子和右孩子,称为它的叶子原创 2021-12-31 00:31:35 · 910 阅读 · 0 评论 -
PTA-整数进制转换
#include<stdio.h>int change(int n,int k){ int i,j,a[10000]; while(n!=0) { a[i]=n%k;//得到余数 n=n/k;//得到商 i++; } j=i-1; for(i=j-2;j>=0;j--) printf("%d",a[j]); printf("\n");}int main(){ int n,k; scanf("%d %d",&n,&k); ch.原创 2021-12-20 19:22:47 · 957 阅读 · 0 评论 -
PTA-7-2 度为2的结点个数 (20 分)
7-2 度为2的结点个数 (20 分)设有一棵二叉树,其结点值为字符型并假设各值互不相等,采用二叉链表存储表示。现输入其扩展二叉树的前序遍历序列,要求建立该二叉树,并求其度为2的结点个数。输入格式:第一行为一个整数n,表示以下有n组数据,每组输入一行字符串(字符串长度小于等于20),这个字符串为扩展二叉树的前序遍历序列。输出格式:每组输出占一行,输出该二叉树中度为2的结点个数。输入样例:在这里给出一组输入。例如:2AB#D##C##ABD##E##C#F##结尾无空行输.原创 2021-12-15 19:30:34 · 679 阅读 · 0 评论 -
7-35 求中序遍历序列的第一个结点值 (20 分)
7-35 求中序遍历序列的第一个结点值 (20 分)设有一棵二叉树,其节点值为字符型并假设各值互不相等,采用二叉链表存储表示。现输入其扩展二叉树的前序遍历序列,要求建立该二叉树,并输出其中序遍历序列的第一个结点值。输入格式:第一行为一个整数n,表示以下有n组数据,每组数据占一行,为扩展二叉树的前序遍历序列。输出格式:输出该二叉树中序遍历序列的第一个结点值,若该点不存在则输出"null"。输入样例:在这里给出一组输入。例如:2AB#D##C##ABD##E##C#F##结尾无.原创 2021-12-11 18:55:05 · 906 阅读 · 0 评论 -
PTA-7-26 查找单链表中的值 (25 分)
7-26 查找单链表中的值 (25 分)从非空单链表中查找其值在[s,t]之间(含s和t)的所有元素,要求输出值在[s,t]之间的元素个数。输入格式:输入的第一行为一个数字n,表示下面有n组数据,每组数据包括3行:第1行包含两个数字s和t,第2行为单链表的表长len(0<len<=20),第3行为单链表的数据元素。输出格式:每组输出为一行,对于每组输入数据,输出值在[s,t]之间的元素个数。输入样例:在这里给出一组输入。例如:18 18711 3 15 10 1.原创 2021-12-10 22:37:52 · 876 阅读 · 0 评论 -
7-3 简化的插入排序 (20 分)
思路:1 根据题目要求输入相关的数据 2 将要插入的数据放入另一个数组中(空数组) 3 将a中的所有元素放到b数组中 4 进行排序 5 输出本题要求编写程序,将一个给定的整数插到原本有序的整数序列中,使结果序列仍然有序。输入格式:输入在第一行先给出非负整数N(<10);第二行给出N个从小到大排好顺序的整数;第三行给出一个整数X。输出格式:在一行内输出将X插入后仍然从小到大有序的整数序列,每个数字后面有一...原创 2021-12-08 19:54:59 · 390 阅读 · 0 评论 -
7-4 求二叉树的叶子结点个数 (25 分)
7-4 求二叉树的叶子结点个数 (25 分)以二叉链表作为二叉树的存储结构,求二叉树的叶子结点个数。输入格式:输入二叉树的先序序列。提示:一棵二叉树的先序序列是一个字符串,若字符是‘#’,表示该二叉树是空树,否则该字符是相应结点的数据元素。输出格式:输出有两行:第一行是二叉树的中序遍历序列;第二行是二叉树的叶子结点个数。输入样例:ABC##DE#G##F###输出样例:CBEGDFA3#include<stdio.h>#include<.原创 2021-12-08 19:49:07 · 205 阅读 · 0 评论 -
7-2 查找矩阵最大值位置 (30 分)
思路:1 首先建立一个矩阵,通过二维数组建立 2 将第一个元素命为最小值,然后将其和各行的数字比较,如果后面的数字比它大,那么交换两个值,得到其遍历到的这个值·为最大值 3 输出7-2 查找矩阵最大值位置 (30 分)有一个M×N矩阵,编程序求出其中最大的那个元素的值及其所在的行、列位置。输入格式:输入数据有多组,每组测试数据第一行包括2个整数M、N(0<M、N<100),接下来是M×N矩阵。输出格式:对每一组数据,输出一行“...原创 2021-12-08 19:45:13 · 2016 阅读 · 0 评论 -
7-5 出栈序列的合法性 (30 分)
7-5 出栈序列的合法性 (30 分)给定一个最大容量为 M 的堆栈,将 N 个数字按 1, 2, 3, ..., N 的顺序入栈,允许按任何顺序出栈,则哪些数字序列是不可能得到的?例如给定 M=5、N=7,则我们有可能得到{ 1, 2, 3, 4, 5, 6, 7 },但不可能得到{ 3, 2, 1, 7, 5, 6, 4 }。输入格式:输入第一行给出 3 个不超过 1000 的正整数:M(堆栈最大容量)、N(入栈元素个数)、K(待检查的出栈序列个数)。最后 K 行,每行给出 N 个数字的出栈.原创 2021-12-04 20:21:00 · 1015 阅读 · 0 评论 -
PTA-7-6 最大与次小 (45 分)
7-6 最大与次小 (45 分)给你一个由n个不同整数组成的序列,请你从中找出最大的数字和次小的数字。输入格式:输入的第一行为一个正整数T(T<=100),表示接下来有T组测试数据,每组的第一行为一个整数n(2<=n<=100),表示序列的长度,接下来有n个不同整数,表示序列的各个值。输出格式:对于每组测试数据,输出最大的数字和次小的数字,数字之间用一个空格分隔,每组输出占一行。输入样例:在这里给出一组输入。例如:233 1 222 1结尾无空.原创 2021-12-03 20:57:56 · 225 阅读 · 0 评论 -
7-2 线性表的合并 (20 分)
求解一般集合的并集问题。 已知两个集合A和B,现要求一个新的集合A=AUB。例如,设 A=(7,5,3,11) B=(2,6,3) 合并后 A=(7,5,3,11,2,6)输入格式:第一行输入集合A的元素个数,第二行输入集合A的各元素值。 第三行输入集合B的元素个数,第四行输入集合B的各元素值。输出格式:输出完成合并后的集合A。输入样例:在这里给出一组输入。例如:47 5 3 1132 6 3结尾无空行输出样例:在这里给出相应的输出。例如:7 5 3 11 2 6.原创 2021-12-03 18:50:19 · 3263 阅读 · 0 评论 -
7-1 顺序表(删除) (15 分)
7-1 顺序表(删除) (15 分)已知一组数据,采用顺序存储结构存储,其中所有的元素为整数。设计一个算法,删除元素值在[x,y]之间的所有元素输入格式:输入包含三行数据,第一行是表中元素个数,第二行是顺序表的各个元素,第三行是区间x和y。输出格式:删除元素值在[x,y]之间的所有元素后,输出新的顺序表。(最后无空格)输入样例:在这里给出一组输入。例如:1055 11 9 15 67 12 18 33 6 2210 20结尾无空行输出样例:在这里给出相应的输出。例如.原创 2021-12-01 20:11:42 · 4176 阅读 · 0 评论 -
PTA-按值删除
7-6 单链表按值删除 (10 分)有一字符型单链表List,假设表中无重复值,现要删除指定字符x。删除成功时输出新单链表,否则输出“not found”。输入格式:有多组数据,每组数据占两行,代表一次删除操作。 每组第一行有两个数,第一个为表长n(0<n<50),第二个为值x; 第二行为单链表的各元素值。输出格式:每组数据的输出占一行,输出如题。输入样例:在这里给出一组输入。例如:5 d abcde结尾无空行输出样例:在这里给出相应的输出。例如:ab.原创 2021-11-20 17:34:00 · 767 阅读 · 0 评论 -
PTA-单链表按位删除
7-5 单链表按位删除 (10 分)有一字符型单链表List,假设表中无重复值,现要在指定位置i执行删除操作。删除成功时输出新单链表,否则输出“location error”。输入格式:有多组数据,每组数据占两行,代表一次删除操作。 每组第一行有两个整数,第一个为表长n(0<n<50),第二个为位置i; 第二行为单链表的各元素值。输出格式:每组数据的输出占一行,输出如题。输入样例:在这里给出一组输入。例如:5 4 abcde结尾无空行输出样例:在这里给出相.原创 2021-12-04 20:22:46 · 416 阅读 · 0 评论 -
PTA-7-12 ABC (30 分)
7-12 ABC (30 分)读入一个字符串,字符串中包含ABC三个字符,个数不一定相等,按ABC的顺序输出,当某个字符用完时,剩下的仍然按照ABC的顺序输出。输入格式:题目包含多组用例,每组用例占一行,包含ABC三个字符,当输入“E”时表示输入结束。 1<=length<=100。输出格式:对于每组输入,请输出一行,表示按照要求处理后的字符串。 具体可见样例。输入样例:在这里给出一组输入。例如:AABBBCCCAAAABBBBBCCCABBBCCE结尾无空行.原创 2021-11-19 15:13:06 · 963 阅读 · 0 评论 -
PTA-合并顺序表
7-3 合并顺序表 (25 分)假设有两个由小到大有序的有序顺序表A和B,现要求将表A和表B并入表C中,且表C仍保持由小到大的有序性。若合并后的顺序表表长超过总容量20,则输出“not enough”。输入格式:第一行为一个数字n,表示下面有n组数据,每组数据包括4行;每组数据中的第一行表示表A的表长,第二行表示表A的数据元素,第三行表示表B的表长,第四行表示表B的数据元素。输出格式:若合并成功,输出两行信息,第一行表示合并后表C的表长,第二行表示合并后表C的数据元素,每两个元素之间用一个.原创 2021-11-19 14:35:54 · 931 阅读 · 0 评论 -
PTA-7-2 递增有序顺序表的插入 (20 分)
7-2 递增有序顺序表的插入 (20 分)实验目的:1、掌握线性表的基本知识 2、深入理解、掌握并灵活运用线性表。3、熟练掌握线性表的存储结构及主要运算的实现 已知顺序表L递增有序,将X插入到线性表的适当位置上,保证线性表有序。。输入格式:第1行输入顺序表长度,第2行输入递增有序的顺序表,第3行输入要插入的数据元素X。输出格式:对每一组输入,在一行中输出插入X后的递增的顺序表。输入样例:在这里给出一组输入。例如:51 3 5 7 96结尾无空行输出样例:在这里给出相.翻译 2021-11-16 20:24:21 · 3683 阅读 · 0 评论 -
日常笔记(哈弗曼编码)
一 哈夫曼树的构造方法·1 根据给定的n个权值{w1,w2,w3...wn},构造n颗只有根节点的二叉树,这n个二叉树构成一个人森林F。2 在森林F中选取根节点的权值最小的构成一个二叉树原创 2021-11-16 17:45:29 · 370 阅读 · 0 评论 -
反转链表(C语言)
本题要求实现一个反转链表1 2 3 4 5 66 5 4 3 2 1#include<stdio.h>#include<malloc.h>#include<stdlib.h>typedef struct st{ int data; struct st * Next;}NODE,*PNODE; PNODE creat_list();void traverse_list1(PNODE pHead);void traverse_list2(PN.原创 2021-11-09 17:20:16 · 833 阅读 · 0 评论 -
PTA-7-4 单链表按值插入 (10 分)
有一字符型单链表List,假设表中无重复值,现要在指定值y之前插入值x。插入成功时输出新表,否则输出“not found y”。输入格式:有多组数据,每组数据占两行,代表一次插入操作。 每组第一行有三个数,第一个为表长n(0<n<50),第二个为值y,第三个为值x;第二行为单链表的各元素值。输出格式:每组数据的输出占一行,输出如题。输入样例:在这里给出一组输入。例如:5 d fabcde结尾无空行输出样例:在这里给出相应的输出。例如:abcfde结尾无空.原创 2021-11-07 20:07:10 · 917 阅读 · 0 评论 -
PTA-7-3 单链表按位插入 (10 分)
7-3 单链表按位插入 (10 分)有一字符型单链表List,假设表中无重复值,现要在指定位置i执行插入x操作。插入成功时输出新表,否者输出“location error”。输入格式:有多组数据,每组数据占两行,代表一次插入操作。 每组第一行有三个数,第一个为表长n(0<n<50),第二个为位置i,第三个为值x; 第二行为单链表的各元素值。输出格式:每组数据的输出占一行,输出如题。输入样例:在这里给出一组输入。例如:5 4 fabcde结尾无空行输出样例:.原创 2021-11-07 19:18:43 · 324 阅读 · 0 评论 -
7-4 二叉树的建立及中后序遍历
7-4 二叉树的建立及中后序遍历 (20 分)按照给定的扩展二叉树前序遍历序列建立相应的非空二叉树,要求采用二叉链表进行存储表示,并对其进行中序和后序遍历,输出中后序遍历序列后请销毁二叉链表以释放内存。输入格式:第一行为一个整数n,表示以下有n组数据,每组数据占一行,为扩展二叉树的前序遍历序列。输出格式:输出该二叉树的中序和后序遍历序列,每个序列占一行,每两组输出之间有一换行。输入样例:在这里给出一组输入。例如:3AB#D##C##AB##C#D##ABD##E##C#F#.原创 2021-10-30 16:12:18 · 451 阅读 · 0 评论 -
PTA-7-2 二叉树的节点个数 (20 分)
7-2 二叉树的节点个数 (20 分)设有一棵二叉树,其节点值为字符型并假设各值互不相等,采用二叉链表存储表示。现输入其扩展二叉树的前序遍历序列,要求建立该二叉树,并求其节点个数。输入格式:第一行为一个整数n,表示以下有n组数据,每组输入一行字符串(字符串长度小于等于50),这个字符串为扩展二叉树的前序遍历序列。输出格式:输出该二叉树的结点个数。输入样例:在这里给出一组输入。例如:2AB#D##C##ABD##E##C#F##结尾无空行输出样例:在这里给出相应的输出.原创 2021-10-30 17:08:52 · 847 阅读 · 0 评论 -
栈的有关知识
初始化栈void init(PSTACK pS){ pS->pTop=(PNODE)malloc(sizeof(NODE)); if(NULL==pS->pTop) { printf("动态内存分配失败"); exit(-1); } else{ pS->pBottom=pS->pTop; pS->pTop->pNext=NULL;//pS->Bottom->pNext=NULL; } }开始.原创 2021-10-31 12:03:34 · 123 阅读 · 0 评论 -
PTA-7-3 求二叉树的高度 (20 分)
7-3 求二叉树的高度 (20 分)设有一棵二叉树,其结点值为字符型并假设各值互不相等,采用二叉链表存储表示。现输入其扩展二叉树的前序遍历序列,要求建立该二叉树,并求其高度。输入格式:第一行为一个整数n,表示以下有n组数据,每组数据为扩展二叉树的前序遍历序列。输出格式:每组输出占一行,输出该二叉树的高度。输入样例:在这里给出一组输入。例如:2AB#D##C##ABD##E##C#F##结尾无空行输出样例:在这里给出相应的输出。例如:33结尾无空行#in.原创 2021-11-01 22:24:41 · 840 阅读 · 0 评论 -
PTA 7-1 顺序存储的前序遍历 (20 分)
7-1 顺序存储的前序遍历 (20 分)给你一个采用顺序存储结构的非空二叉树,请你设计一个算法求出它的前序遍历。输入格式:输入数据有多组,每组的第一行为一个正数n,表示该二叉树的节点个数。 接下来有n个字符,表示各个位置上的元素,当字符为'#'时表示当前节点为空。输出格式:输出该二叉树的前序遍历输入样例:在这里给出一组输入。例如:6ABCDEF6ABC#DE结尾无空行输出样例:在这里给出相应的输出。例如:ABDECFABDCE#include<s.原创 2021-11-03 18:06:06 · 479 阅读 · 0 评论 -
PTA-7-5 求中序遍历序列的第一个结点值 (20 分)
7-5 求中序遍历序列的第一个结点值 (20 分)设有一棵二叉树,其节点值为字符型并假设各值互不相等,采用二叉链表存储表示。现输入其扩展二叉树的前序遍历序列,要求建立该二叉树,并输出其中序遍历序列的第一个结点值。输入格式:第一行为一个整数n,表示以下有n组数据,每组数据占一行,为扩展二叉树的前序遍历序列。输出格式:输出该二叉树中序遍历序列的第一个结点值,若该点不存在则输出"null"。输入样例:在这里给出一组输入。例如:2AB#D##C##ABD##E##C#F##结尾无空.原创 2021-11-03 18:09:10 · 315 阅读 · 0 评论 -
PTA-链表按值查找
#include<stdio.h>#include<malloc.h>#include<stdlib.h>typedef struct st { char data; struct st* next;}NODE,*PNODE;PNODE creat_list(int length){ PNODE pHead=(PNODE)malloc(sizeof(NODE)*1); pHead->next=NULL; if(NULL==pHea...原创 2021-10-29 17:04:04 · 603 阅读 · 0 评论 -
PTA7-13 单链表的建立和遍历 (30 分)
输入N个整数,按照输入的顺序建立单链表存储,并遍历所建立的单链表,输出这些数据。输入格式:输入数据有多组,每组数据占两行;每组第一行为一个数字N(0<N<=50);第二行有N个整数。输出格式:每组输出占一行,输出这组整数,每两个数字之间用一个空格分隔。输入样例:在这里给出一组输入。例如:512 32 45 78 54结尾无空行输出样例:在这里给出相应的输出。例如:12 32 45 78 54结尾无空行#include<stdio.h&g..原创 2021-10-26 15:31:22 · 1855 阅读 · 0 评论 -
7-1 二叉树的建立及前序遍历 (50 分)
按照给定的扩展二叉树前序遍历序列建立相应的非空二叉树,要求采用二叉链表进行存储,并对其进行前序遍历,输出前序遍历序列后请销毁二叉链表以释放内存。输入格式:第一行为一个整数n,表示以下有n组数据,每组数据占一行,为扩展二叉树的前序遍历序列。输出格式:在一行里输出该二叉树的前序遍历序列。输入样例:在这里给出一组输入。例如:3AB#D##C##AB##C#D##ABD##E##C#F##结尾无空行输出样例:在这里给出相应的输出。例如:ABDCABCDABDECF结.原创 2021-10-27 19:05:54 · 566 阅读 · 0 评论 -
7-2 求二叉树的叶子结点个数
7-2 求二叉树的叶子结点个数 (50 分)以二叉链表作为二叉树的存储结构,求二叉树的叶子结点个数。输入格式:输入二叉树的先序序列。提示:一棵二叉树的先序序列是一个字符串,若字符是‘#’,表示该二叉树是空树,否则该字符是相应结点的数据元素。输出格式:输出有两行:第一行是二叉树的中序遍历序列;第二行是二叉树的叶子结点个数。输入样例:ABC##DE#G##F###输出样例:CBEGDFA3#include<stdio.h>#include<.原创 2021-10-27 21:47:54 · 2502 阅读 · 2 评论 -
链表常用函数总结
//创建单链表 PNODE creat_list(){ int len; int i; int val; PNODE pHead=NULL; pHead=(PNODE)malloc(sizeof(NODE)); if(NULL==pHead) { printf("分配内存失败,请重新输入"); } PNODE pTail=pHead; pTail->Next=NULL; printf("请您输入需要链表的的个数%d",len); scanf("%d",&.原创 2021-10-28 16:13:20 · 2546 阅读 · 0 评论 -
创建一个非循环单链表,并对其进行遍历然后数出
#include<stdio.h>#include<malloc.h>//动态分配内存#include<stdlib.h>//exit(-1)函数使用typedef struct Node{ int data; int len; struct Node *pNext;}NODE,*PNODE;//NODE等价于struct NODE PNODE等价于struct PNode* PNODE creat_list(void)//创建...原创 2021-10-17 15:24:46 · 104 阅读 · 0 评论