- 博客(25)
- 资源 (1)
- 收藏
- 关注
原创 二叉排序树与平衡二叉树(BST&AVLT)
平衡二叉树的一些操作平衡二叉树相对于二叉排序树来说是二叉排序树的一个优化版,避免了二叉排序树中的极端情况。想更好的理解还是要结合图片自己动手做做QwQ这里写的是双平衡+双旋转版,并非LL、RR、LR、RL四种特殊情况单独处理平衡二叉树的插入(跟二叉排序树差不多几乎相同)传入参数:待插入的树T,插入参数e,判断是否平衡的taller思路:每一次递归先判断是否是空树,再判断插入位置,每次插入完成判断平衡条件taller,调整树的形态插入元素:如果是空树,创建新的BitNode,初始data为
2021-01-27 23:07:23 527
原创 二叉排序树与平衡二叉树(BST&AVLT)
二叉排序树的一些操作Note:不会贴图QwQ,为了更好的理解最好是找图片并结合给出的思路和代码,自己动手做做OvO…二叉排序树的查找:传入参数:待查找的BST,关键字,指向双亲的指针f,指向查找结点的指针p思路:递归遍历BST查找成功->指针p指向该元素结点查找失败->指针p指向该路径上访问的上一个结点递归出口:1.结点空时停;2.找到时停二叉排序树的插入传入参数:待操作的BST,待插入的关键字思路:遍历BST->找到->返回false表示BST中有该元
2021-01-27 22:53:45 553
原创 建立二叉堆(STL练习)
二叉堆的建立算是对STL的一道练习题思想:1.建立向量a,输入测试数据2.基于数组下标,判断当前堆顶是否已满足要求Code:#include <cstdio>#include <vector>#include <algorithm>#include <functional>using namespace std;// 传入数组a和下标i,i的左右子树都满足最大堆的性质,函数将a整体调整为最大堆 void heap_down(std::
2021-01-10 00:01:30 255
原创 二叉树基本操作
二叉树基础操作求二叉树的建立、遍历、叶子结点个数、树的深度// 先序序列ABC##DE#G##F####include <iostream>#include <cstdlib>using namespace std;typedef char ElemType;typedef struct BitNode{ ElemType data; struct BitNode *lchild, *rchild;}BitNode,*BitTree;void
2020-12-14 14:47:09 218
原创 单链表查询倒数第N个数据三种思路
单向非循环链表查询倒数第N个数据思路1:先从头到尾遍历一遍链表记录元素总数,用总数–要查询位数,重新循环遍历表即可(效率不高就不写代码了)思路2:利用快慢指针,定义两个指针(fast&slow),因为查询的是倒数第N个位置的数据,快指针先走N步;随后快慢指针一起走,只要快指针到尾了,慢指针所指的位置就是要查询的位置bool SearchListTail(LinkList L,int sealoc){ if(!L->next || sealoc < 0) { cerr
2020-10-20 23:48:29 3586 1
原创 数据结构:单链表实现多项式加法
多项式加法要求:有两组多项式,每组随机输入N组数,每组数输入两个值a,b,a代表系数,b代表指数,输入数据无任何限制(只要是数字即可)思路:1.建立两个链表L1,L2分别存放两组多项式2.比较每组多项式,如果指数相同就把他们系数相加(详解在下面)3.打印输出比较的详解:在存放多项式的时候对存入数据进行排序,按指数从大到小或者从小到大都可,我是按从大到小排的。然后建立三个指针分别是指向L1的指针,指向L2的指针和指向L1的工作指针,工作指针指向L1是借助L1来存放加完之后的多项式链表。接着比
2020-10-15 23:17:57 955
原创 链表查重(递归实现)
链表查重(递归实现)最开始想到的递归方法,初步估计效率不会太高,但是代码比较容易理解思路现在有一个无序的链表,在不清楚元素个数的情况下,无法常规的迭代实现查重(迭代也可以做,且效率较高),我首先想到是否可用递归实现。递归的思路是:从表头元素开始比较直到表尾结束,如果出现和表头重复的元素就删除,然后表头后移一位,继续递归;直到表空为止,返回查重后的链表待修改效率肯定不会太高,因为里面出现了多次重复查询操作,后期可以考虑做一个备忘录来解决问题,目前暂时没做代码#include <iostr
2020-10-12 23:11:52 1432
原创 简易通讯录系统(链表实现)
简易通讯录系统(链表实现)承接上一个debug practise这个是我修改完的版本,可以运行但是健壮性不强,因为是练习程序所以无需多做修改,大家参照即可#include <iostream>#include <cctype>#include <cstdlib>#include <fstream>#include <cstring>using namespace std;const int MaxSize = 50; //电话簿
2020-10-04 01:06:59 336
原创 链表实现简易通讯录(debug练习)
Debug Practise这是我最开始编写的一个小程序,目的是用来练习链表的存储结构,但是在执行的过程在发现很多处错误,于是就开始一个个的修改错误,我发现这个过程非常适合刚刚接触链表且对链表存储结构了解不是很透彻的同学,通过对这个程序的Debug来更透彻的了解链表的存储结构在当前这个阶段只实现了从文件.txt(cpp程序所在文件夹)读入数据、对数据合法性进行简单的判断,以及显示链表中的数据。这两个函数,其他函数暂时还没有做(因为最开始的目的就是练习存储结构)文件格式:名字回车电话回车#incl
2020-10-03 23:12:24 147
原创 C++模板重载
C++模板重载产生背景:需要多个对不同类型使用同一种算法函数时可以使用模板,但是并非所有的类型都使用同一种算法,为了解决这个问题,产生了模板重载。Tips:1.如同函数的重载一样,模板重载函数的特征标必须不同2.并非所有的模板参数都必须是模板参数类型显示具体化(explicit specialization):提供一个具体化函数定义基于(ISO/ANSI C++标准)C++98标准选择的方法:1.对于给定的函数名,可以有非模板函数、模板函数和显示具体化模板函数以及它们的重载版本2.显示具体
2020-09-15 22:27:23 1382 2
原创 递归实现二分查找
递归实现二分查找二分查找的前提是这个序列必须有序,否则不能使用二分查找大体思路:1.通过中间值比对来确定想要查找的数据所在范围,每次缩小当前大小的一半2.如果找打返回数组下标,没找到返回-1#include <iostream>using namespace std;const int MaxSize = 5;int search(int *arr,int left,int right,int e);int main(){ int arr[MaxSize]; cout
2020-08-24 21:07:23 482
原创 八皇后问题(递归实现)
八皇后问题(递归实现)八皇后问题是回溯法的典型例题,就同一问题有许多不同种解法,这里只通过递归解决八皇后问题所谓八皇后问题是由高斯先生提出的一个关于国际象棋的数学问题,其要求在8x8的棋盘上放置8个皇后,每个皇后之间不能互相攻击到对方(皇后的攻击方式是米字型),高斯先生穷其一生发现了76钟解法,在没有计算机的年代已经非常了不起了。大体思路:1.建立一个8x8的二维数组来当做棋盘2.通过循环一列一列来摆放皇后3.每放完8列输出一次面临的问题:1.如何确定皇后所在位置是否安全2.从哪递归解决
2020-08-24 20:04:49 511
原创 逆波兰计算器
逆波兰计算器所谓的逆波兰计算器,就是将我们常见的中缀表达式,转换为后缀表达式,来供计算机运算的计算器。适合栈刚入门做练习#include <iostream>#include <cstdlib>#include <cctype>using namespace std;const int MaxSize = 30;const int Stack_Init_Size = 30;const int StackIncrement = 10;typedef
2020-08-21 20:08:35 250
原创 数据结构基础:栈实现二进制转十六进制
栈实现二进制转十六进制相对于二进制转八进制而言,二进制转十六进制需要多判断一下sum求出来的数是否大于10,如果大于10就转成A,以此类推#include <iostream>#include <cstdlib>#include <cmath>using namespace std;typedef char ElemType;typedef struct{ ElemType *top; ElemType *base; int StackSize;}
2020-08-14 21:56:09 1206
原创 数据结构基础:栈实现二进制转八进制
栈实现二进制转八进制数据结构基础:进制转换相比于二进制转十进制而言,二进制转八进制仅多了一个内层循环用来给新栈填充数值#include <iostream>#include <cstdlib>#include <cmath>using namespace std;const int Stack_Inti_Size = 20;const int StackIncrement = 10;typedef char ElemType;typedef stru
2020-08-13 21:22:15 979
原创 数据结构基础:栈实现二进制转十进制
栈基础(二进制转十进制)#include <iostream>#include <cstdlib>#include <cmath>using namespace std;const int Stack_Init_Size = 20;const int StackIncrement = 10;typedef char ElemType;typedef struct{ ElemType *top; ElemType *base; int stackSi
2020-08-12 21:57:48 361
原创 入栈初体验
入栈初体验#include <iostream>#include <cstdlib>using namespace std;//注意top指针的移动 const int Stack_Init_Size = 20;const int StackIncrement = 10;const int MaxSize = 5;typedef int ElemType;typedef struct { ElemType *top; ElemType *base; int
2020-08-11 20:56:59 163
原创 26英文字母左右移动(双链表实现)
26英文字母左右移动双链表基础程序,很简单看代码就能懂,没什么难点这里没写小会链表操作,正常来说执行完毕系统会自行销毁,但应该写出销毁步骤#include <iostream>#include <cstdlib>using namespace std;const int MaxSize = 26;typedef char ElemType;typedef struct DCLNode{ ElemType data; struct DCLNode *prior;
2020-08-10 20:45:33 237
原创 魔术师发牌问题
魔术师发牌问题**核心算法思路:总共翻牌13次,每次拿出一张牌,链表中一共13个元素1st:第一个是1 --> 2nd:第三个是2 – > 3rd:第六个是3…外层循环13次(代码中12次,第一个直接赋值)内层循环负责向循环链表中填入数值,注意已经赋值的地方需要跳过**#include <iostream>#include <cstdlib>using namespace std;const int MaxSize = 13;typedef in
2020-08-10 19:22:22 248
原创 约瑟夫环问题(单循环链表实现)
用单循环链表解决约瑟夫环问题大致思路:1.利用尾插法建立一个循环链表(建表成功后删除头结点)2.核心算法:生成一个work指针,每走到约定的step-1的位置时停止,利用pdel指针标记后继结点,循环释放pdel,直到work==work->next停止#include <iostream>#include <ctime>#include <cstdlib>using namespace std;typedef int ElemType;typ
2020-08-09 17:52:27 1504
原创 单向循环链表(C实现)
单向循环链表(C实现)#include <iostream>#include <cstdlib>using namespace std;typedef int ElemType;typedef struct CLNode{ ElemType data; struct CLNode *next;}CLNode,*CLinkList;bool InitCreateList(CLinkList *list);bool InsertList(CLinkList li
2020-08-07 17:29:24 242
原创 双向循环链表(C实现)
双向循环链表(C实现)#include <iostream>#include <cstdlib>using namespace std;typedef int ElemType;const int MaxSize=5; typedef struct DCLNode{ struct DCLNode *prior; ElemType data; struct DCLNode *next;}DCLNode,*DCLinkList;bool InitDCList(D
2020-08-07 17:00:52 165
转载 C++函数默认参数
函数的默认参数默认参数是指当函数调用中省略了实参时自动使用的一个值。例如,如果将void wow(int n)设置成n有默认值为1,则函数调用wow()相当于wow(1)。如何设置默认值必须通过函数原型。由于编译器通过查看原型来了解函数所使用的参数数目,因此函数原型也必须将可能的默认参数告知程序。方法是将值赋给原型中的参数Notes:————————————————————————————————————————————1.对于带参数列表的函数,必须从右向左添加默认值。也就是说,如果想给某个参数设
2020-07-31 23:30:12 348
原创 C++函数传递参数类型选择条件
使用引用参数的主要原因1.能够修改调用函数中的数据对象2.通过传递引用而不是整个数据对象,可以提高程序的运行速度对于使用传递的值而不做修改的函数1.如果数据对象很小,如内置数据类型或者小型结构,按值传递2.如果数据对象是数组,则使用指针,并将指针声明为const的指针3.如果数据对象是较大的结构,则使用const指针或者const引用,以提高程序的效率,节省复制结构所占用的时间复杂度和空间复杂度4.如果数据对象是类对象的话,则使用const引用对于修改调用函数中数据的函数1.如果数据对象是
2020-07-30 22:25:24 593
转载 C++对象、继承和引用
对象、继承和引用#include <iostream>#include <fstream>#include <cstdlib>using namespace std;void file_it(ostream &os,double fo,const double fe[],int n);const int Limit=5;int main(){ ofstream fout; const char *fn="ep-data.txt"; fou
2020-07-29 22:51:56 315
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人