数据结构
探索数据结构
Mae_strive
所有订阅都不要购买!!!所有订阅都不要购买!!!所有订阅都不要购买!!!需要直接私信!!!
展开
-
【数据结构】图的经典算法
图的经典算法:最小生成树(Prim,Kruscal),最短路径(Dijkstra,Floyd),拓扑排序原创 2021-12-01 20:22:49 · 447 阅读 · 7 评论 -
二维指针的使用方法
例如下代码:#include <iostream>using namespace std;void countBinary(char **num,char binary[],int n){ for(int j=0;j<n;j++){ binary=new char[5]; cout<<j+1<<"的二进制位:"<<endl; for(int i=0;i<4;i++){原创 2021-10-18 21:01:09 · 1980 阅读 · 0 评论 -
【数据结构】中缀表达式转前缀表达式求值
中缀表达式转前缀表达式求值首先将中缀表达式转换成前缀表达式前缀表达式中,操作符在前例如:1+2*(5-3)+4后缀表达式:++1*2-534一、转换思路转换思路为将输入的中缀表达式字符串从右往左扫描(字符前后加#号),遇到数字直接输出,遇到操作符比较优先级。栈顶优先级低,入栈;栈顶优先级高,出栈并且输出;优先级相等(即左右括号),出栈(不输出);当扫描的字符为#并且栈顶字符为#时,此时将输出的字符序列反转即为前缀表达式。注意:优先级顺序表与求中缀表达式和后缀表达式的优先级顺序表不同二原创 2021-10-14 21:54:03 · 3490 阅读 · 0 评论 -
【数据结构】字符串匹配——暴力算法(BF)
一、问题描述给定主串S,判断模式串F是否是S的子串,如果是则返回T在S中出现的第一个位置,否则返回0。二、算法思想使用暴力算法解题,从主串S的第一个字符开始和模式串T的第一个字符进行比较,若相等则比较二者后续字符,否则,主串回溯到第二个字符,模式串回溯到第一个字符;继续比较,不匹配,主串回溯到第三个字符,模式串回溯到第一个字符。重新上述过程,直到模式串T中的字符全部比较完毕,说明匹配成功;否则匹配失败。暴力算法将每一种情况都列举了出来,时间复杂度很高三、代码实现#include <iost原创 2021-10-14 07:35:08 · 987 阅读 · 0 评论 -
【数据结构】后缀表达式求值
一、题目描述描述输入一个后缀表达式,计算它的值。操作数和操作码之间都以空格分开。输入一行,后缀表达式输出一行,一个整数,为后缀表达式的值二、解题思路与上一篇中缀转后缀表达式差不多,只是优化了可以输入的不只是个位数因为每一个操作数和操作码之间都用空格隔开,这样就可以避免ASCII码只能转换0-9的数字的缺点了例如:初始化c=0 两位数 161符合操作数 c=c*10+1 保存 16符合操作数 c=c*10+6 保存 16再扫描到空格 然后前一位是数字则将c压栈三、代码实现#in原创 2021-10-13 12:51:26 · 6875 阅读 · 2 评论 -
【数据结构】n皇后问题
一、问题描述在n行n列的棋谱上,放n个棋子,保证:这n个棋子任意两个不在同一行,不在同一列,并且也不在对角线上,这样的摆法有多少种?二、解题思路使用递归回溯解题。定义一个一维数组,下标存放列,值存放行。n表示为n行n列的棋谱,n个棋子首先从第一列开始放,然后再放第二列,放第二列时需与第一列时比较,是否在同一行或者同一列或者对角线上。如果是,重新摆放第二列的位置;如果不是,继续下一列。摆放第k列时,需与前k-1列相比较是否符合规则,不符合重新摆放第k列的位置,若第k列所有行摆放都不符合规则,则回溯原创 2021-10-12 19:35:50 · 496 阅读 · 0 评论 -
【数据结构】中缀表达式转后缀表达式求值
后缀表达式求值首先需要将输入的中缀表达式转换成后缀表达式。后缀表达式中,操作符在后例如:1+2*(5-3)+4后缀表达式:1253-*+4+1、中缀表达式转换成后缀表达式方法:首先,需要定义一个操作符栈并且知道各运算符优先级,然后从左往右一次扫描字符(字符前后加#号),遇到数字直接输出,遇到操作符比较优先级。栈顶优先级低,入栈;栈顶优先级高,出栈并且输出;优先级相等(即左右括号),出栈(不输出);当扫描的字符为#并且栈顶字符为#时,此时输出的字符序列即为后缀表达式2、后缀表达式求值过程原创 2021-10-12 17:29:26 · 6091 阅读 · 0 评论 -
【数据结构】判断循环双链表是否对称
一、题目描述判断循环双链表是否对称二、解题思路解题思路很简单,跟判断回文数的方法类似,只不过换成了链表。首先需要写出循环双链表,第二,则判断是否对称判断是否对称,定义两个指针,p1指针指向头指针的后继(头遍历指针),p2指针指向头指针的前驱(尾遍历指针),判断当二者的数据域相等时,p1指向其后继,p2指向其前驱,一旦不相等则不对称。结束条件:当结点个数为奇数个时,中间会多出一个结点,当p1和p2指针都指向这个结点的时候结束,即p1指针等于p2指针时,结束;当结点个数为偶数个时,p2指针的后原创 2021-10-09 12:23:34 · 3410 阅读 · 0 评论 -
【数据结构】中缀表达式表达式求值
一、问题描述中缀表达式求值例如:2*(3+5)-7二、解题思路定义两个栈,一个操作数栈,一个运算符栈,首先需要定义运算符的优先级,如图。将表达式的前后都加上‘#’方便操作。#2*(3+5)-7#首先从前往后扫描字符串,当遇到操作数时,就将其压入操作数栈。当遇到运算符时,首先和运算符栈的栈顶元素比较,当小于,压栈(运算符),大于,出栈(运算符)并且从运算符栈出两个字符,先出做后件,后出做前件,运算完后将其压入操作数栈,注意并不继续扫描下一个字符,当等于时,若为括号弹出括号但不从操作数栈弹出两个操原创 2021-10-08 00:02:29 · 3264 阅读 · 1 评论 -
【数据结构】多括号匹配问题
一、问题描述:设计算法检测表达式的括号是否匹配注:包括 () [] {}二、解题思路:栈的应用例如:5*(3+6)-[5-4*2+(1-5)] 括号匹配!5*(3+6)-[5-4*2+(1-5) 括号不匹配!)3+5( 括号不匹配!({3+5}*2) 括号匹配!(小括号中可以嵌套方括号和大括号)我们可以使用栈来解决此类问题首先定义一个栈,栈初始化为空,当字符为左括号 ([{ 时,将字符进栈,当遇到右括号 )]} 时,将栈中的字符出栈并与此右括号比较,若此括号匹配,即 当右括号为[原创 2021-10-07 21:13:48 · 596 阅读 · 0 评论 -
【数据结构】单链表的应用——求倒数第K个的结点元素
求倒数第K个的结点元素假设 不知道链表的长度解题思路:方法很巧妙,定义两个指针,先将一个指针往前走K个结点,然后两个指针再一起走,当第一个指针走完末尾链表的时候,另一个指针恰好走到倒数第K个求倒数第K个元素的C++代码(链表省略)://求倒数第K个结点元素int LinkList::reciprocalK(int k){ Node *p=first; Node *rear=first; //先让一个指针走K个结点 for(int i=0;i<k;i++){原创 2021-10-03 00:03:13 · 173 阅读 · 0 评论 -
【数据结构】单链表逆置的详解
将单链表逆置:定义一个前指针和一个后指针用来辅助工作指针//头文件#ifndef LINKLIST_H_INCLUDED#define LINKLIST_H_INCLUDEDstruct Node{ int data; //数据域 Node *next; //指针域};class LinkList{public: LinkList(int *arr,int n); //构造函数 尾插法 ~LinkList(); //析构函数 void pr原创 2021-10-02 22:28:26 · 3713 阅读 · 0 评论 -
【数据结构】单链表保持顺序插入详解
单链表的顺序插入例如: 将 五个数据 (6 4 5 3 1) 插入到单链表使他们从小到大排列注意:先插入再排序//头文件#ifndef LINKLIST_H_INCLUDED#define LINKLIST_H_INCLUDEDstruct Node{ Node *next; int data;};class LinkList{public: LinkList(int *arr,int n); LinkList(); ~LinkList();原创 2021-10-02 22:27:29 · 2018 阅读 · 0 评论 -
【数据结构】使用顺序表解决约瑟夫环问题
约瑟夫环问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。采用顺序存储结构中的数组实现。每次出队了一个人,将这个位置后面的所有数往前移一个位置,将此数覆盖,数组的有效长度也相应的减1每次出队的人的下标为:len为每次循环中环的人数,m为数到m的人出队index=(index+m-1)%len为什么要取余len?当m>len时,可以保原创 2021-10-02 13:15:53 · 4956 阅读 · 0 评论 -
【归并排序】归并排序中的递归代码详解
今天下午学习了一下归并排序算法,感觉思想很简单就是采用分治法,先将所有数据拆分开,然后二路合并。但是当我看到实现代码的时候,在递归那有点不理解,经过苦思冥想后,终于清楚知道了递归的代码实现。//参考大佬的博客写了写:#include <iostream>using namespace std;int n;void mergeSort(int arr[],int l,int mid,int r){ int *temp=new int[n]; int p1=l;原创 2021-09-23 22:44:04 · 880 阅读 · 3 评论 -
【数据结构】栈的实现——顺序栈和链栈
一、栈的定义定义:限定只在表的一端(表尾)进行插入和删除的线性表特点:后进先出二、顺序栈基于数组实现C++实现代码://头文件#ifndef STACK_H_INCLUDED#define STACK_H_INCLUDED//栈的最大存储const int MAX_SIZE=100;//定义一个顺序栈类(使用模板) //使用模板 优点 可以用来实现多种数据类型的存储template <class DataType> class Stack{private:原创 2021-09-20 18:53:12 · 951 阅读 · 2 评论