
数据结构与算法
My classmates
QQ349561280
展开
-
动态数组_笔记
.htypedef struct DynamicArray{ int *pAddr; //数组首地址 int size; //当前元素数量 int Capacity; //最大容量}Darr;class Darray{public: Darr* array;public: //初始化 Darr* Ini...原创 2018-08-18 15:39:40 · 193 阅读 · 0 评论 -
快速排序
分置法,挖坑填数将第一个数作为基准数,所有数都和基准数比较 取完基准数后的坑必须填上才能前进 从右边向左开始找第一个小于基准数元素 9比基准数大continue(j要找比基准数小的),3比基准数小取出拿去填i指针的坑 3,2都比基准数小(i要找比基准数大的),到8将8取出填j指针的坑 (j要找比基准数小的)将1填i的坑 (i要找比基准数大的)到5将5拿出填j的坑...原创 2018-09-05 21:25:48 · 146 阅读 · 0 评论 -
二叉树非递归遍历
非递归遍历需要用到堆栈先将a压栈 弹出栈顶元素判断状态值,如果为false先不输出,将他的左右子树取出初始化状态为false 入栈将刚从栈中弹出的元素状态值改为true,因为我们前序遍历的是根左右,入栈的顺序为右左根 从栈顶弹出元素状态为true将他输出 先将栈顶弹出元素状态为false不输出,取出左右子树状态初始化为false 右左根顺序进行压栈,根压栈时状态改为t...原创 2018-09-03 08:57:30 · 160 阅读 · 0 评论 -
希尔排序
分组插入排序先分组然后对每一组进行插入排序在元素个数非常多的时候希尔排序效率比插入排序高 (10万个元素,仅需22毫秒,当然每个人电脑配置不一样)先分组 8跟4比,比8小不动 5跟8比比8小,8向前移动,5再跟4比比它大,5到8原来的位置 1跟8比8向前移动,1再跟5比5向前移动,1跟4比4向前移动,1到原4的位置 9跟8比,不动 2和0比较,2向前0...原创 2018-09-05 09:45:34 · 156 阅读 · 0 评论 -
插入排序
将无序序列插入到有序序列中 插入排序在序列基本有序情况或 插入排序时候元素个数较少时效率高从小到大进行排序将第一个元素视为有序 将它与下一个元素取出,此时1的位置为空 判断如果取出的元素比有序小,有序向前移动,取出的元素再插入到它的位置 2跟3比,3先前移,2到3的位置 3跟5比,3比5大,不动 5跟4比,5往前移,4到5的位置 代码#in...原创 2018-09-04 16:37:48 · 121 阅读 · 0 评论 -
递归算法分析
拿上一篇的二叉树释放做例子call指令会将此指令的下一行指令的地址进行压栈(调用完要返回) 然后修改eip跳到对应的地址 (其实就是跳会函数头部)第三次进call的时后root == 0了执行return; return 后要平衡堆栈,然后ret ret指令 == pop eip 因为刚才call 会将下一行地址压栈现在弹栈eip返回去 到右子树了 c...原创 2018-09-01 17:21:08 · 661 阅读 · 0 评论 -
栈_后缀表达式求解
对于数字:进栈进栈对于符号: 从栈中弹出右操作数 从栈中弹出左操作数 根据符号进行运算 将运算结果压入栈中例子:831-5*+8进栈3进栈1进栈遇到-了,从栈中弹出右操作数,再左操作数,相减结果压栈(2压栈)5进栈从栈中弹出右,左相乘结果压栈(10压栈)从栈中弹出右,左相加 结果为:18以下代码需要包含循环栈的类(我博客里有)main.cpp//...原创 2018-08-29 23:04:55 · 440 阅读 · 0 评论 -
二叉树
#include<iostream>using namespace std;//二叉树typedef struct BINARYNODE{ char ch; struct BINARYNODE* lchaild; //左子树 struct BINARYNODE* rchaild; //右子树}BinaryNode;//递归void Recurs...原创 2018-09-01 08:37:36 · 194 阅读 · 0 评论 -
栈的应用_中缀表达式转后缀表达式
中缀表达式就是我们习惯的表达式比如说1+2*3,后缀表达式是计算机习惯的表达式。 1+2*3转成后缀表达式后:123*+中缀转后缀算法:- 遍历中缀表达式中的数字和符号: - 对于符号: - 左括号:进栈 - 若栈顶符号优先级低:此符号进栈(默认栈顶若是左括号,左括号优先级最低)若栈顶符号优先级不低:将栈顶符号弹出并输出,之后进栈右括号:将栈顶符号弹出并输出,直到匹配...原创 2018-08-24 19:26:23 · 400 阅读 · 0 评论 -
栈的应用就进匹配_笔记
1+2+3 aaa)bbbbbb((cccc) 判断这段字符串中的括号是否对上如果没有对上是那一个没有对上判断他是否是括号不是就执行下一次匹配到左括号将它压入堆栈匹配到右括号判断栈是否为空,空表示右括号没有匹配的左括号不为空执行弹栈,如果是左就匹配判断此时的栈如果为空,左括号没有匹配的右括号.h//链式栈的节点typedef struct LINKNODE{ ...原创 2018-08-24 10:17:39 · 110 阅读 · 0 评论 -
队列_笔记
与栈类似但规则不一样,栈是先进后出只有一个口,队列是两个口规则先进先出一个口只能进,一个口只能出.h#define MAX_SIZE 1024//顺序队列结构体typedef struct SEQQUEUE{ void *data[MAX_SIZE]; int size;}SeqQueue;class Queue{public: Queu...原创 2018-08-23 21:12:56 · 175 阅读 · 0 评论 -
栈的链式存储_笔记
只允许容器往一个方向进出,先进后出为栈容器.h//链式栈的节点typedef struct LINKNODE{ struct LINKNODE*next;}LinkNode;//链式栈typedef struct LINKSTACK{ LinkNode head; int size;}LinkStack;class linkstack...原创 2018-08-23 16:11:39 · 183 阅读 · 0 评论 -
栈_笔记
.h#define MAX_SIZE 1024typedef struct SEQSTACK{ void *data[MAX_SIZE]; int size;}SeqStack;class stack{public: stack(); ~stack();public: SeqStack* Stack;public: /...原创 2018-08-23 10:16:56 · 127 阅读 · 0 评论 -
企业链表_笔记
.htypedef struct LINKNODE{ struct LINKNODE* next;//下一个节点}LinkNode;typedef struct LINKLIST{ LinkNode head; int size;}LinkList;//打印函数指针typedef void(*PRINTNODE)(LinkNode* Addres...原创 2018-08-20 12:20:33 · 252 阅读 · 0 评论 -
约瑟夫问题_笔记
此时m=8,n=3,每次数3次就将那个数进行输出,输出后的数将会被释放123输出3456输出6781输出1245输出5782输出2478输出8474输出4777输出7需要添加循环链表类,笔记里有! main.cpp#include"List.h"#define M 8#define N 3typedef struct MYNUM{ Circl...原创 2018-08-22 21:55:59 · 161 阅读 · 0 评论 -
循环链表_笔记
.htypedef struct CIRCLELINKNODE{ struct CIRCLELINKNODE* next;}CircleLinkNode;typedef struct CIRCLELINKLIST{ CircleLinkNode head; int size;}CircleLinkList;//比较回调typedef bool...原创 2018-08-22 16:38:27 · 196 阅读 · 0 评论 -
单向链表_笔记
.h//链表节点typedef struct LINKNODE{ void* data; //链表数据 struct LINKNODE* next; //节点}LinkNode;//链表结构体typedef struct LINKLIST{ LinkNode *head; //头节点 int size; ...原创 2018-08-19 14:42:30 · 190 阅读 · 0 评论 -
归并排序
将两个有序序列合并成一个有序序列将它拆开,如果还不是有序就继续拆 不是有序 不是有序 不是有序 有序(4跟2已经分开),连线 将有序元素进行比较,放到另一个容器中(因为我这是从大到小进行排序) 248已经有序放到头部 05有序也放到头 将俩个有序数组进行排序,两指针分别指向两数组的头 将两指针指向的值比较谁小谁进,进去的那个指针++ ...原创 2018-09-06 12:32:51 · 125 阅读 · 0 评论