- 博客(25)
- 收藏
- 关注
原创 线索二叉树
线索:指示前驱和后继的指针对于前序、中序、后序遍历来说,除了相应序列的第一个和最后一个,二叉树的每个结点都存在**前序前驱/后继、中序前驱/后继、后序前驱/后继。**为了做到快速找到某一结点的前驱和后继,又不希望将二叉树遍历一遍,就需要将信息保存下来。可以在二叉链表中增加前驱指针域(pred)和后继指针域(succ)...
2022-01-13 11:03:56 244
原创 二叉树遍历及其应用
二叉树的三种遍历算法的递归实现特别说明:函数形参中的 void(*visit)(BinTreeNode *p) 代表:采用一个visit的指针指向某个函数,该函数的形参为BinTreeNode *p,该函数的实现体中可以对结点进行处理,传参时将外部函数名传入即可前、中、后的差别仅在于 visit(subTree) 该语句的位置不同1、前序遍历template<class T>void PreOrder(BinTreeNode<T> *subTree, void(*visit
2022-01-10 10:55:45 1686
原创 二叉树的存储表示
二叉树的数组存储表示在数据处理过程中二叉树的大小、形态不发生剧烈的动态变化的场合,适宜采用数组方式来表示二叉树的抽象数据类型1、完全二叉树的数组存储表示设有一棵完全二叉树,将其所有结点按照层次自顶向下、同一层自左向右进行按序编号1 - n,得到一个结点的顺序(线性)序列。在数组下标为 i 的位置,存放编号为 i 的完全二叉树的结点。这种存储表示是存储完全二叉树最简单、最省存储的方式,因为可以从一个结点的编号推算出它的父结点、子女、兄弟等结点的编号数组存储的缺陷:对待一般二叉树来说,有可能导致浪费大量
2022-01-04 19:32:48 2114
原创 二叉树定义、性质
1、二叉树定义一棵二叉树是节点的一个有限集合,该集合或者为空,或者是由一个根结点加上两棵分别称为左子树和右子树的、互不相交的二叉树组成。2、二叉树性质(1)在二叉树的第i(i ≥ 1)层最多有2^(i - 1)个结点(2)深度为k(k ≥ 0)的二叉树最少有k个结点,最多有2^k - 1个结点...
2021-10-25 21:40:38 1061
原创 字符串的模式匹配
字符串的模式匹配描述:在字符串T中查找是否有跟另一字符串pat相等的子串。朴素的模式匹配-----BF算法:利用pat中的字符依次与T中字符依次比较int Find(string T, string pat, int k){ //在T中从K个字符开始寻找模式串pat在串中的位置,找不到返回-1,找到返回第一次匹配的位置 int i, j; for(i = k; i <= T.size() - pat.size(); ++i){ for(j = 0; j < pat.size();
2021-10-22 21:06:53 364
原创 C++字符串的相关库函数
字符串:是一串文字和符号的序列。其基本组成元素是单个字符(char),字符串长度可变。字符串长度不包括分解符的引号,也不包括串结束符’\0’。空串:长度为0,除串结束符外,不包含任何其他字符。空白串:长度不为0,除串结束符外,包含的其他字符均为空格。字符串相关的库函数1、strcpy-----字符串复制:将string2的内容复制到string1中int strcpy(char *string1, char *string2)2、strncpy-----字符串部分复制:将string2的前n个
2021-10-19 09:47:43 1157
原创 字符串相关习题
541.按一定规则翻转字符串给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。如果剩余字符少于 k 个,则将剩余字符全部反转。如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reverse-string-iiclass Solution {public: string reverse
2021-10-12 10:23:05 117
原创 力扣哈希表习题
454.四数相加给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0class Solution {public: int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& num
2021-10-08 15:37:59 112
原创 哈希相关习题
242.有效的字母异位词若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词class Solution {public: bool isAnagram(string s, string t) { int record[26] = {0}; for(int i =0;i<s.size();++i){ record[s[i]-'a']++; } for(int i =0;i&l
2021-10-07 20:18:37 147
原创 链表相关题目
链表的一大问题就是操作当前节点必须要找前一个节点才能操作。这就造成了,头结点的尴尬,因为头结点没有前一个节点了。每次对应头结点的情况都要单独处理,所以使用虚拟头结点的技巧,就可以解决这个问题有环链表的环入口地址计算class Solution {public: ListNode *detectCycle(ListNode *head) { ListNode *slow = head; ListNode *fast = head; while(f
2021-10-06 22:35:05 87
原创 基于数组的(最小)优先队列的实现
使用数组作为存储方式的最小优先级队列。Insert()操作直接把元素item加入到优先级队列的队尾,然后进行调整,把插入元素按它的优先权调整到适当位置,使得队列中所有元素都按照其优先权大小,从小到大形成一个有序序列。最好情况是新插入元素优先权最大,一个元素都不用移动;最差情况是新插入元素的优先权最小, 所有元素都要移动,移动次数达到n+1次,其时间复杂度为O(n);RemoveMin()操作在删除队头元素后,为保持队列有序,需要把所有后续n-1个元素前移,时间复杂度为O(n)#pragma once
2021-10-02 11:09:19 164
原创 队列应用------打印二项展开式(杨辉三角)和电路布线
将二项式(a + b)^ n 展开,其系数构成杨辉三角,下面利用队列将展开式的系数的前n行打印出来void YANGVI(int n){ LinkedQueue<int> q; int i=1,s=0,k=0,t,u; q.EnQueue(i); //预先放入第一行系数 q.EnQueue(i); for(i = 1; i <= n; ++i){ cout << endl; q.EnQueue(k); for(j = 1; j
2021-10-01 22:49:19 742
原创 先进先出的数据结构-----队列(基于链表)
用单链表表示的链式队列特别适合数据元素变动比较大的情形,而且不存在队列满而产生溢出的情况队列的队头指针指向第一个结点,队尾指针指向单链表的最后一个结点链式队列的模板类定义及实现:#pragma onceconst int maxSize = 50;template<class T>class Queue{public: Queue() {}; ~Queue() {}; virtual bool EnQueue(const T& x) = 0; //新元素进队列
2021-10-01 10:23:44 389
原创 先进先出的数据结构--------队列(基于数组)
队列是一种限定存取位置的线性表,只允许在表的一段插入,在另一端删除队列的存储表示也有两种,一种是基于数组,一种是基于链表1、基于数组的队列会出现假溢出的情况,由于队列特性会导致数组前端可能还有空位置。使用循环队列解决上述问题使用基于数组的循环队列,首尾相接,当队头指针front和队尾指针rear进到maxSize-1后,再前进一个一个位置就自动到0。这可以利用除法求余的运算来实现:队头的指针进1:front = (front + 1)% maxSize;队尾的指针进1:rear = (rear
2021-09-30 22:40:24 686
原创 回溯法解决走迷宫问题
给定一个二维数组maze[m+2][p+2]表示迷宫,1表示墙壁,0表示通路,数组第0行、第m+1列、第0列、第p+1列是迷墙的围墙。路线可以有8个方向,定义一个表包括这8个方向。struct offset //方向结构体,a代表x的偏移量,b代表y的偏移量{ int a, b; char *dir;};const int m = 12, p = 15;int Maze[m + 2][p + 2] = { {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
2021-09-30 19:49:19 239
原创 递归与栈的关系
递归的定义:若一个对象部分地包含它自己,或用它自己给自己定义,则称这个对象时递归的若一个过程直接的或间接的调用自己,则这个过程是递归的用到递归的三种情况:1、定义是递归的:比如数学上的阶乘函数、幂函数、斐波那契数列,定义和计算都是递归的2、数据结构是递归的:链表就是一个递归的数据结构,树形结构也是一种递归的结构,因为其基于多重链表实现3、问题的解法是递归的:汉诺塔问题若设盘子总数为n,在算法中盘子的移动次数为:(1)n=0, moves(n)=0;(2)n>0, 2moves(n-1
2021-09-30 15:46:58 4504
原创 基于MFC的匿名管道实践
父进程实例一、添加两个私有成员、析构函数class CfatherDlg : public CDialogEx{public: ~CfatherDlg() { if (hRead) { CloseHandle(hRead); } if (hWrite) { CloseHandle(hWrite); }; }private: HANDLE hRead; HANDLE hWrite;};二、构造函数中初始化私有成员CfatherDlg::CfatherDl
2021-09-28 22:31:03 404
原创 栈的应用----表达式的计算
表达式分类(1)中缀表达式:<操作数><操作符><操作数>,例如A+B(2)前缀表达式:<操作符><操作数><操作数>,例如+AB(3)后缀表达式:<操作数><操作数><操作符>,例如AB+在计算机中,编译程序一般使用后缀表达式求解表达式的值,所以我们得先了解如何将中缀表达式转换成后缀表达式中缀表达式转后缀表达式为了实现各种转换,需要考虑个操作符的优先级:操作符#(*,/,
2021-09-27 20:52:52 1069
原创 栈的应用-------括号匹配
栈应用之括号匹配将左括号入栈,每遇到一个右括号,将它与栈顶的左括号(如果存在)相匹配,同时删除在栈顶的该左括号。使用链式栈进行设计: LinkedStack s; string str = "(ft()jgghggh)(r4i)"; int j = 0, length = str.length(); for (int i = 0; i < length; ++i) { if (str[i] == '(') { s.push(i); } else if (str[i] ==
2021-09-26 16:31:45 94
原创 特殊的线性表------栈(2)
上一篇介绍了基于数组的栈实现,本节介绍一下基于链表的栈实现链式栈的栈顶在链表的表头,新节点的插入和删除都在表头进行,即栈顶进行栈的抽象定义class Mystack{public: Mystack() {} virtual void push(int &x) = 0; virtual bool pop(int &x) = 0; virtual bool Top(int &x) const = 0; virtual bool IsEmpty()const = 0;
2021-09-26 16:18:02 68
原创 特殊线性表----------栈(1)
栈是先进后出的特殊线性表,只允许在表的末端进行插入和删除,后面将介绍两种实现栈的方式,分别是基于数组的实现、基于链表的实现。栈的抽象定义class Mystack{public: Mystack() {} virtual void push(int &x) = 0; virtual bool pop(int &x) = 0; virtual bool Top(int &x) const = 0; virtual bool IsEmpty()const = 0; v
2021-09-25 22:40:48 140
原创 线性表(2)---双向链表和静态链表
双向链表------解决在链表中访问直接前驱和直接后继的问题类定义:#include <iostream>using namespace std;struct DblNode{ int data; DblNode *lLink, *rLink; DblNode(DblNode *left = nullptr, DblNode *right = nullptr):lLink(left), rLink(right){} DblNode(int value, DblNode *le
2021-09-23 20:04:11 70
原创 线性表(1)
写博客的目的,纯属自己学习过程记录,不喜勿喷。基本概念线性表是一个有限序列,各个表项是相继排列的,且相邻之间都有直接前驱和直接后继的关系。第一个表项无前驱,最后一个表项无后继。线性表存储表示有两种:①顺序存储方式,②链表存储方式线性表的存储方式有:①基于数组的存储表示,②基于链表的存储表示,③散列的存储表示。。。。。顺序存储方式实现的线性表称为顺序表用数组作为表的存储结构搜索算法的时间代价用数据比较次数来衡量分析顺序表的插入和删除的时间代价主要是看循环内的数据移动次数单链表----
2021-09-21 21:20:07 86
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人