C/C++数据结构
数据结构C/C++语言版
Mozart086
学习爱好者
展开
-
C++经典排序方法-冒泡排序-选择排序-插入排序
#include<iostream>#include<string>using namespace std;//三种排序算法//1. 冒泡排序void BubbleUp(string &str) { int length = str.length(); for (int i = 0; i < length-1; i++) { for (int j = length - 1; j > i; j--) { if (str[j] <.原创 2021-12-20 17:11:55 · 710 阅读 · 0 评论 -
C++二叉链表的层次遍历
二叉链表可以用递归算法实现先序遍历,中序遍历和后序遍历,也可以利用栈进行先序遍历,中序遍历和后序遍历。同时,二叉链表也可以借助队列实现层次遍历,基本思想如下:1. 创建二叉链表,创建对咧2. 将只想根节点的指针赋值给浮标指针3. 将根节点入队,同时开启循环4. 当队列不为空是,首先出栈,当左子树不为空时,将左结点的数值入栈;当右子树不为空时,将右结点入栈。重复步骤4...原创 2021-09-10 19:00:06 · 1060 阅读 · 0 评论 -
C++非递归算法遍历二叉链表
递归的二叉链表遍历基于类自身函数的自我调用,而二叉链表的非递归操作,基于栈的入栈与弹栈。将中序遍历作为例子:指针访问到结点后,应先记住结点数值入栈,再往左边便利。假如指针为空,弹栈,最后将指针赋值给右子树指针1. 建立浮标指针,指向根节点2. 假如指针不是空,入栈数值,将指针更新为左子树指针3. 当指针为空时,将栈顶元素赋值给新的变量,实现弹栈。4. 将指针赋值给右子树指针上述操作是循环,循环条件:指针不是空,或者栈不为空。...原创 2021-09-10 18:41:44 · 259 阅读 · 0 评论 -
C++二叉链表遍历理论基础
本节主要研究二叉树中二叉链表的先序遍历原理。基础理论知识有二叉链表的构造原理余递归的思想。根据递归的思想,我们首先应当建立二叉链表的结点类,包括成员变量data域,指向左右子树的指针,并对链表节点类的构造函数进行重载。其次,我们应当建立二叉链表类,包括成员变量指向根节点的头指针,代表二叉树属性的一些参数,和诸多类内函数。由于本节讲述的是先序遍历方法,因此类内函数应当由先序遍历方法函数。又如,本案例涉及对结点数据域数值的打印输出,因此应当另写函数对数据域的值进行打印操作。二叉链表建立好后,可以通过调用原创 2021-09-10 18:02:48 · 264 阅读 · 0 评论 -
C++二叉树的遍历
遍历:顺着某一条搜索路径,使得二叉树中的每一个结点有且仅有被访问一次,叫做遍历,或者周游。访问的含义非常广泛。可以认为在不破坏原来结构的基础上对结点数值进行取出和修改等。遍历的目的:在规定遍历顺序后,可以将二叉树这种非线性的数据结构转换为线性排列进行处理遍历的意义:二叉树的增删改查均需要遍历。遍历,是二叉树运算的核心。遍历方法:二叉树是一种典型的递归结构,每一个结点内部,均有两个与节点类型相同的指针。因此,我们只要依次遍历二叉树的左子树,根节点和右子树,即可完成整个遍历根据不同的遍历顺序原创 2021-09-09 11:50:50 · 921 阅读 · 0 评论 -
C++二叉树的链式存储结构_1
二叉树的链式存储结构物理模型:class Bnode {public: int data; Bnode* left_node; Bnode* right_node;};和双链表的定义非常类似。当链二叉树的结点个数为n时,一共有n-1个非空指针域,n+1个空指针域,一共有2n个指针域。链式三叉树,再指针域定义时,多加一个指向双亲结点的指针class TriBiTreenode {public: int data; TriBiTreenode* left_node; T原创 2021-09-07 20:11:02 · 276 阅读 · 0 评论 -
C++二叉树的存储结构_1
二叉树的顺序存储结构顺序存储即为在计算机内存中开辟一段连续的内存空间用于存放二叉树的信息。对于一个二叉树,将二叉树按照满二叉树的标号方式,从上到下、从左到右、从0开始,依次给二叉树的结点进行标号。标号完成后,按照下标于数据,将其存入数组中。当二叉树不是完全二叉树时,应该先将二叉树写成满二叉树的形式,空的位置不仅要保留空缺位置,还要依次编号。下图中,一共有7个数据,但是应当将上一层的结点和左子树补全,再编号,再存储。否则,无法区分满二叉树与非满二叉树,会混淆。二叉树类的定义//...原创 2021-09-07 19:54:17 · 421 阅读 · 0 评论 -
C++二叉树性质
性质4:对于一个完全二叉树,当已知其节点个数为n时,该完全二叉树的深度为等于结点个数n取以log2为底的取不大于它的最大整数值+1性质5:结点编号为i时,该节点的双亲编号一定是round(i/2),它的孩子结点的编号一定是2i以2i+1编号相差为1的结点一定位于同一层上。顺去存储二叉树时,可以直接根据下标关系对双亲结点和孩子结点进行操作。...原创 2021-09-07 19:26:23 · 300 阅读 · 0 评论 -
C++满二叉树和完全二叉树
满二叉树定义:深度为k的二叉树且结点个数为2^k-1的二叉树为满二叉树满二叉树的所有结点均存在。特点:1. 满二叉树中所有层的结点数都是满的2. 叶子结点必须在最低的层上出现满二叉树的标号规则:自根节点开始,自上而下,自左而右依次编号,每一层的结点均存在,并且个数均为最大个数A:该二叉树一共有4层,满二叉树应该具有15个结点,9<15因此不是满二叉树。除此之外,有且仅有数的最后一层等于叶子结点,并且叶子节点必须排列在同一层。因此不是满二叉树因此:在...原创 2021-09-07 19:18:18 · 762 阅读 · 0 评论 -
C++二分遍历
代码存档#include<iostream>using namespace std;//数组查找的二分遍历法//传入参数:数组本身arr,数组内寻找的元素K,数组长度nint binary(int* arr, int K, int n) { //头下标与尾下标 int front = -1; int rear = n; //当数组不是空的时候进行二分遍历 while (front + 1 != rear) { //找到数组中间下标(中间大) int i = (fr原创 2021-08-31 20:26:22 · 237 阅读 · 0 评论