![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
wms—天天
这个作者很懒,什么都没留下…
展开
-
PTA 最大子列和问题 (20分)+不定长数组定义
给定K个整数组成的序列{ N1, N2, …, NK },“连续子列”被定义为{ Ni, Ni+1, …, Nj },其中 1≤i≤j≤K。“最大子列和”则被定义为所有连续子列元素的和中最大者。例如给定序列{ -2, 11, -4, 13, -5, -2 },其连续子列{ 11, -4, 13 }有最大的和20。现要求你编写程序,计算给定整数序列的最大子列和。本题旨在测试各种不同的算法在各种数据情况下的表现。各组测试数据特点如下:数据1:与样例等价,测试基本正确性;原创 2020-08-13 19:06:07 · 170 阅读 · 0 评论 -
PTA单链表逆转
单链表逆转List Reverse( List L ){ //L1->Data=1,L2->Data=ALL; List L2,L1; L2=L; L=NULL; while(L2){ L1=L2; L2=L2->Next;//L2指向下一个元素 L1->Next=L;//L后移一个元素 L=L1;//下一个元素指向开头 } return L; }原创 2020-08-09 19:32:05 · 534 阅读 · 0 评论 -
PTA 求二叉树高度 (20分)
思路:二叉树的深度和它的左、右子树深度之间的关系。从二叉树深度的定义可知,二叉树的深度应为其左、右子树深度的最大值加1。由此,需先分别求得左、右子树的深度,求得左、右子树深度的最大值,然后加 1 即为二叉树的高度;可以递归的调用二叉树深度函数。int GetHeight(BinTree BT){ int high=0;//节点总数 int depthleft,depthright; if(BT==NULL){ return 0; }else{ ...原创 2020-08-05 23:07:59 · 2977 阅读 · 1 评论 -
PTA 二叉树的遍历 (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 BinTree;str原创 2020-08-05 19:50:28 · 2418 阅读 · 0 评论 -
PTA 二分查找 (20分)
按照题目要求我们采用非递归的方式进行:设置low、mid、high三个指针;low小于等于high作为while循环的结束条件(注意定要有等于号,我一开始在这个地方犯了错误)。例如数组1234中找到4,如下图:step1:step2:那么到此处,如果low=high我们不进一步做判断,会return Notfound,与实际结果不吻合。Position BinarySearch( List L, ElementType X ){ int low,mid,high; low=1;hi原创 2020-08-04 22:34:34 · 1716 阅读 · 0 评论 -
PTA 双端队列 (25分)
双端队列(deque,即double-ended queue的缩写)是一种具有队列和栈性质的数据结构,即可以(也只能)在线性表的两端进行插入和删除。若以顺序存储方式实现双端队列,请编写例程实现下列操作:Push(X,D):将元素X插入到双端队列D的头;Pop(D):删除双端队列D的头元素,并返回;Inject(X,D):将元素X插入到双端队列D的尾部;Eject(D):删除双端队列D的尾部元素,并返回。基本分析:1.双端队列必定是个循环队列,判断队空、队满、front和rear加减的时候,注意原创 2020-08-02 12:02:00 · 936 阅读 · 0 评论 -
各类排序算法及思想
这篇博文就是自己的一些学习记录,部分数据fromhttp://data.biancheng.net/view/65.html第一部分 插入排序1.直接排序基本思想:把数组分为两个部分,前一部分是有序序列;后一部分是无序序列;依次将无序序列中的第一个元素插入到有序序列当中去(从1到n-1),完成排序。void directsort(list &L){ int i,j,min; ...原创 2020-03-17 15:51:02 · 1090 阅读 · 0 评论 -
判定给定的树是不是排序二叉树
根据排序二叉树的定义我们知道,左子树节点值<根节点值<右子树节点值,所以判定给定的树是不是排序二叉树,我们只需要通过中序遍历,判断序列是否递增即可。 算法思想:1.判断左子树是不是排序二叉树。2.若是比较前驱节点于当前节点的值,若大于则返回0.若左子树不是排序二叉树同样返回0。3.判断右子树是不是排序二叉树,若是返回1则整个树都是排序二叉树,若不是返回0。#include &...原创 2020-03-15 14:41:42 · 244 阅读 · 0 评论 -
广度优先搜索
广度优先搜索类似于树的层次遍历。从图中的某一顶点出发,遍历每一个顶点时,依次遍历其所有的邻接点,然后再从这些邻接点出发,同样依次访问它们的邻接点。按照此过程,直到图中所有被访问过的顶点的邻接点都被访问到。最后还需要做的操作就是查看图中是否存在尚未被访问的顶点,若有,则以该顶点为起始点,重复上述遍历的过程。还拿图 1 中的无向图为例,假设 V1 作为起始点,遍历其所有的邻接点 V2 和 V3 ...原创 2020-03-08 11:19:57 · 244 阅读 · 0 评论 -
非递归后序遍历二叉树
本文主要分为两个部分:包括二叉树的构造和非递归后序遍历,都比较有参考价值,这里将思路整理出来。第一个部分主要是通过先序和中序构造二叉树,参考文章为https://blog.csdn.net/qq_35733751/article/details/80970664我觉得他的构造方式比较通用而且简洁,其实还有通过递归构造的方式我觉得比较麻烦,就没有采用。下为原理图:主要思想:1.找到pre数组中...原创 2020-03-07 09:35:27 · 1434 阅读 · 0 评论 -
算数表达式转换:中缀转后缀,利用栈来实现
算数表达式转换:中缀转后缀,利用栈来实现#include <stdio.h>#include <stdlib.h>#define max 50int push(char *a,int top,char elem);int pop(char *a,int top);int main(int argc, char *argv[]) {int top=0;char...原创 2019-12-04 14:30:39 · 244 阅读 · 0 评论