数据结构
文章平均质量分 59
思泽Elly
一名转码的底层测绘人
展开
-
常见的几种排序(C++)
排序经常需要用到交换函数,其代码为://交换函数void swap(int* a,int* b){ int temp=*a; *a=*b; *b=temp;}1、冒泡排序//冒泡排序void bubble_sort(int arr[],int length){ for (int i = 0; i < length-1; i++) { for (int j = 0; j < length-i-1; j++) { if (arr[j]>arr[原创 2021-08-24 11:05:03 · 858 阅读 · 2 评论 -
C++实现二叉树的非递归遍历
在前面C++实现二叉树的递归遍历(详细步骤与代码实现)我们实现二叉树通过递归遍历实现了先序、中序与后续遍历,那么如何通过非递归遍历实现先序、中序与后续遍历呢?我们先看看非递归遍历规则。还是同样的二叉树1、首先将二叉树根节点A放入栈中,并将节点是否打印标签设为false。2、再将节点A从栈中弹出,将其左右子树节点BF入栈,打印标签设为false,将A再次入栈,此时是否打印的标签设为true(注意这里三个节点入栈顺序与先序、中序与后续遍历方式有关,入栈顺序与遍历顺序正好相反,...原创 2021-08-23 12:05:24 · 1755 阅读 · 2 评论 -
C++栈的应用——后缀表达式求解
在前面“C++栈的应用——中缀转后缀”我们将我们所熟知的中缀表达式转为后缀表达式,那么如何通过后缀表达式获得原表达式的值呢?将后缀表达式:“2963/+5-*4+”从左往右逐个字符进行遍历获得操作符,同时建立一个空栈stack。一、当操作符为数字时,直接入栈。二、当操作符为运算符时,取栈顶数字做右计算数值并弹出,再取一个栈顶数字做左计算数值并弹出。其与运算符做四则运算,结果入栈。三、当遍历完成后,从栈中弹出唯一数字,该数字就是这个后缀表达式运算结果。下面提...原创 2021-08-22 19:32:10 · 1374 阅读 · 0 评论 -
求二叉树叶子数与高度(C++)
我们首先来看一看二叉树中叶子数与高度的定义:叶子数:对于一个二叉树的节点,若其既没有左子树又没有右子树,那它就是叶子节点。整个二叉树的叶子数为所有叶子节点个数。高度:二叉树高度又称深度,其为根节点到叶子节点路径的最大值。下面提供实现代码:#include <iostream>using namespace std;//定义二叉树节点class binarynode{public: char data; //节点数据域 binarynode* lchild原创 2021-08-22 10:17:08 · 3038 阅读 · 1 评论 -
C++实现二叉树的递归遍历(详细步骤与代码实现)
我们知道数据的存储结构分为线性与非线性。线性就是1对1的结构,像栈与队列都属于线性结构。那什么是非线性的结构呢?非线性即1对n的结构这更符合常规情况,线性结构本质上属于非线性结构中的一种特殊形式,像树就属于非线性结构。但是树并不适合编码操作,需要将其转为二叉树,既然二叉树是一种数据存储的结构,那就涉及到数据遍历的问题。有关二叉树的遍历有三种方式,即先序遍历、中序遍历与后续遍历。下面就根据上面的二叉树简单谈一下何为先序遍历、中序遍历与后序遍历:1、先序遍历(DLR) ...原创 2021-08-20 19:12:55 · 4541 阅读 · 1 评论 -
C++栈的应用——中缀转后缀
中缀表达式就是我们平时运算表达式,其特点是运算符总是处于两个运算对象之间。但是该表达式计算机处理起来较为麻烦,会将其转写成后缀表达式,后缀表达式也叫逆波兰表达式,后缀表达式的特点是每个运算符都置于两个运算对象之后。那么中缀表达式如何转为后缀表达式呢?将中缀表达式:“2*(9+6/3-5)+4”从左往右逐个字符进行遍历获得操作符,同时建立一个空栈stack。一、当操作符为数字时,直接打印输出二、当操作符为左括号时,将其存储到栈stack中成为元素符三、当操作...原创 2021-08-20 15:37:01 · 1126 阅读 · 0 评论 -
C++实现队列的顺序存储与链式存储
队列是一种特殊的数据存储结构,与栈不同的是(C++实现栈的顺序存储与链式存储),其数据存储与访问顺序为先进先出,形式如下:下面附上队列顺序存储与链式存储的实现代码:1、顺序存储#include <iostream>using namespace std;const int max_size=1024;//定义队列class seqqueue{public: void* data[max_size]; int size;};//初始化队列se...原创 2021-08-19 17:10:47 · 1210 阅读 · 0 评论 -
C++实现栈的顺序存储与链式存储
栈是一种特殊的数据结构,栈中数据先进后出,且栈中数据只能从头部出栈,能直接访问的数据也仅为栈的头部数据,要想访问下面的数据则需要将前面的数据逐个出栈后才可访问。下面通过一个word撤销的案例来解释:我们用word写paper时,首先需要创建一个空白文档(即一个空栈),然后对这个空白文档进行一系列操作每个操作都是一个新的version,即数据存储压栈的操作。但是paper写完后(version4),我们发现写的paper有问题需要修改,想要回到version1,这就...原创 2021-08-19 11:13:28 · 1327 阅读 · 0 评论 -
C++实现企业链表
企业链表是企业中经常使用的一种链表,因此被称为企业链表。我们首先来看看他的结构与传统结构有啥不同:对于一个类或结构体 ,其中包含我们需要存储的数据data与一个指针变量p_next,我们将p_next串起来便形成了企业链表,那它和普通链表有何区别呢?普通链表中p_next指向的是下一个p_next与data组成的类或结构体整体的地址,而企业链表p_next仅仅指向下一个p_next的地址。因此链表中并涉及任何data数据,企业链表实际存储的数据结构为:理论说...原创 2021-08-18 10:55:33 · 1156 阅读 · 2 评论 -
单向循环链表解决约瑟夫问题(C++)
在大厂面试时,经常会被提出实现约瑟夫问题。那么什么事约瑟夫问题呢?约瑟夫问题:n个人围成一个圆圈,分别编号1~n,从第一个人开始顺时针报数为1,报到第m的时候。令其出列,然后再从下一个人重新开始报数,当从1报到m时,报m的人继续出列,以此重复下去,直到所有人都出列为止,求出列的序号。当m=8,n=3时,删除序列如下所示:最终删除的序列为:3、6、1、5、2、8、4、7。C++中有一种数据存储结构与这种首尾相连的环形结构极为相似——单向...原创 2021-08-16 16:11:54 · 6667 阅读 · 3 评论 -
C++单向循环链表实现
单向循环链表与单向链表十分相似,具有关单向链表详细理论与实现过程可见上一篇文章https://blog.csdn.net/qq_41696018/article/details/119705003。实际上单向循环链表与单向链表仅仅有尾部node指针域指向不同的差别,对于单向链表尾部node由于没有后续node,其指针域需指向NULL。而单向循环链表将尾部node的指针域指向头部node,首位相连构成单向循环链表,具体形式为:具体实现代码为:1、链表定义//定义节点class...原创 2021-08-15 20:03:02 · 2820 阅读 · 1 评论 -
最详细的C++单向链表实现
链表是数据结构中常见的一种数据存储形式,其在物理存储单元上是非连续的存储结构,即其数据存储的空间并非连续的内存空间。这种存储方式的优点是可以动态分配内存空间,不会造成内存的浪费和溢出,同时链表对于执行插入、删除等操作十分简便,不需要移动大量元素,但是其相对于连续空间存储的数据相比,遍历速度较慢。1、那么链表到底长啥样呢?链表由多个node(节点)组成,每个节点中由两部分结构组成,data中存储需要存储的数据,next为一个指针,其指向下一个node的地址。当...原创 2021-08-15 10:27:05 · 14996 阅读 · 23 评论