数据结构
SuperZXin
生命不息,奔流不止
展开
-
练习二叉树(day04)
满二叉树中,已知先序序列,求后序一般的二叉树,仅有先序或者后序是无法唯一确定一棵二叉树的,但对于满二叉树,任意一个结点都有结点数相同的左右子树,并且先序的第一个节点为后序的最后一个结点int pre[MAX],post[MAX];void preToPost(int l1,int h1,int l2,int h2){ int half; if(l1<=h1){ post[h2]=pre[l1]; half=(h1-l1)/2; .原创 2021-11-05 17:28:14 · 74 阅读 · 0 评论 -
练习二叉树(day03)
二叉树的深度//递归版本(dfs) int treeDepth(TreeNode* root) { if(!root)return 0; int ld=treeDepth(root->left); int rd=treeDepth(root->right); if(ld>rd)return ld+1; else return rd+1; }//简化: int treeDepth(TreeNo.原创 2021-11-04 17:25:45 · 70 阅读 · 0 评论 -
练习二叉树(day02)
分行从上往下打印二叉树样例:输入如下图所示二叉树[8, 12, 2, null, null, 6, null, 4, null, null, null] 8 / \ 12 2 / 6 / 4输出:[[8], [12, 2], [6], [4]] vector<int>get_val(vector<TreeNode*>level){ vector<int>ans; for(aut.原创 2021-11-02 17:18:51 · 63 阅读 · 0 评论 -
练习二叉树(day01)
二叉树的镜像/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ //递归交换二叉树的左右子树,当结点为空时,递归结束 void mirror(TreeNode* .原创 2021-11-01 19:27:51 · 76 阅读 · 0 评论 -
快速排序的不同轴值选取(首位,平均数,随机)
参考严蔚敏 《数据结构》根据数组中首位数作为轴值是最为普遍的int Partition(int a[],int low,int high)//一趟划分{ int k=a[low];//选取表中第一个元素作为枢纽值 while(low<high) { while(low<high&&k<=a[high])high--; a[low]=a[high]; while(low<high&&am原创 2021-10-22 17:37:21 · 1239 阅读 · 1 评论 -
单链表实现简单选择排序
不是所有的排序算法都可以用单链表来实现,比如快速排序和堆排序,由于单链表不具有随机访问的特性,所以也受限制本题中的简单选择排序,在单链表中实现的思路:每次遍历链表中的剩余部分,每一趟将剩余部分中最大结点插到表头,最后即可得一条由小到大的单链表,思路很简单,具体还得落实到代码上,你会了,不代表你的手也会了#include<iostream>using namespace std;typedef struct Node{ int val; Node*next;}Node,*原创 2021-10-21 20:08:54 · 4072 阅读 · 0 评论 -
第k小的数
要求第k小的数,直接做法就是先通过从小到大排序,取第k个数就可以了,但是这样的平均复杂度至少为O(nlogn),但是我们可以基于快速排序的划分来处理这个问题,平均时间为O(n)#include<iostream>using namespace std;const int N = 100010;int n,k;int a[N];void visit(){ for(int i=0;i<n;i++) cout<<a[i]<<" ";原创 2021-10-21 18:31:45 · 97 阅读 · 0 评论 -
二叉树的遍历与应用
很多与二叉树相关的算法都是二叉树遍历算法的扩展,所以要熟练掌握对二叉树的各种遍历算法,包括前中后序,层序的递归和非递归算法实现#include<iostream>#include<queue>#include<stack>#define ElemType int#define MaxSize 50using namespace std;int widths[MaxSize];typedef struct BiTNode{ ElemType data原创 2021-09-23 19:31:26 · 635 阅读 · 0 评论 -
排序算法总结
文章目录一 、排序的基本概念二、插入排序1.直接插入排序2.折半插入排序3.希尔排序三.交换排序1.冒泡排序2.快速排序【考纲内容】排序的基本概念插入排序:直接插入排序;折半插入排序;希尔排序交换排序:冒泡排序;快速排序选择排序:简单选择排序;堆排序2路归并排序基数排序外部排序各种排序算法的比较排序算法的应用一 、排序的基本概念根据数据元素是否完全在内存中,可以将排序算法分为两类:内部排序:排序期间元素全部存放在内存中的排序,包括插入排序,交换排序,选择排序,归并排序,基数排原创 2021-08-17 17:11:06 · 83 阅读 · 0 评论 -
数据结构考研复习-树与二叉树
文章目录一.树与二叉树1.1树的基本概念1.1.1树的定义1.1.2基本术语1.1.3树的性质1.2二叉树的概念1.2.1二叉树的定义及其主要特性1.2.2二叉树的存储结构一.树与二叉树1.1树的基本概念1.1.1树的定义树是由n个节点的有限集:有且仅有一个特定的称为根的结点当n>1时,其余的结点可以分为m(m>0)个互不相交的有限集,其中每个集合又是一棵树,称为根的子树树是一种递归的数据结构,它既作为一种逻辑结构,也是一种分层结构,具有如下特点:树的根结点没有前驱,除根结原创 2021-07-27 16:44:22 · 336 阅读 · 0 评论 -
数据结构之栈与队列
栈(stack)-栈是一种后进先出的数据结构(LIFO,last in/first out),在存储以及查找数据时只能访问栈的一端,基本方法包括如下:方法解释empty()判断栈是否为非空size()栈的大小push(el)将元素el放到栈的顶部pop()弹出栈顶元素clear()清空栈队列(queue)-队列是一种先进先出的数据结构(FIFO,first in/first out),它是一种使用两端的结构,一端用来加入新元素,一端用来删除元原创 2021-03-26 09:36:47 · 89 阅读 · 0 评论 -
C++单链表的基本操作-创建,插入,查找,删除
废话不多,直接上菜#include<iostream>using namespace std;template <typename T>struct Node{ T data; Node<T> *next;};template <typename T>class LinkList{public: LinkList(T a[], int n);//创建单链表 ~LinkList(); void Insert(int i, T x);原创 2020-08-08 15:47:38 · 733 阅读 · 0 评论