![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
微凉的墨-楠楠
一直是个学生党,努力活出我自己。
展开
-
数据结构中的常用查找
查找:静态查找(顺序查找、折半查找、分块查找)+动态查找(二叉排序树、平衡二叉树、B-树查找) 一、静态查找:不改变原结构的顺序。 1、顺序查找 逐个的与关键字进行比较。若找到相等的,则查找成功;反之,失败。 更适合顺序存储结构和链式存储结构的查找表 2、折半查找 给定的序列是一个有序序列。 把序列分成左中右,左 把给定值与中间值进行比较,确定下次查找是在左还是右; 继续原创 2015-09-18 11:46:44 · 863 阅读 · 0 评论 -
字符串匹配的KMP算法
摘自:http://kb.cnblogs.com/page/176818/ 字符串匹配是计算机的基本任务之一。 举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"? 许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命转载 2016-04-21 09:55:46 · 421 阅读 · 0 评论 -
队列
/* 队列:分配一块连续的存储单元存放队列中的元素,并附设两个指针,分别指示队头元素,和队尾元素的存储位置,分别称为队头指针和队尾指针。 判断是否为空的条件:Q.front==Q.rear==0; 但是不能用Q.rear==maxSize来作为判断队列为空的条件。 有可能出现假溢出, 栈的应用:括号匹配,进制转换,迷宫求解 递归中的栈: 程序每一个递归调用自己的时候,原创 2015-09-02 10:44:22 · 368 阅读 · 0 评论 -
用非递归的方式对于树的各种实现
//非递归的实现一些关于树的东西 #include #include using namespace std; typedef struct BiNode{ int data; BiNode *lChild, *rChild; }BiNode,BiTree; //非递归实现前序遍历 void preOrder(BiTree原创 2015-09-07 10:55:55 · 546 阅读 · 0 评论 -
数据结构中的排序
排序就是将一个元素的任意序列重排成一个按关键字有序的序列。 如果使用某一排序算法排序后,Ri和Rj的相对位置并未发生变化,则称这个排序算法是稳定的。否则就称这个算法是不稳定的。 内部排序:在排序期间,元素全部存放在内存中的排序; 外部排序:在排序期间元素无法全部同时存放在内存中,必须在排序的过程中根据要求不断的在内外存之间移动的排序。 插入排序:每一次将一个待排序的记录,按其关键字的大小插原创 2015-09-19 10:23:01 · 411 阅读 · 0 评论 -
树 前序中序后序 递归 遍历
void qianxubianli(Node *pRoot){ if (pRoot == NULL){ return; } cout data qianxubianli( pRoot->pLeft); qianxubianli( pRoot->pRight); } void zhongxubianli(Node *pRoot){ if (pRoot == NULL)原创 2015-09-04 20:36:18 · 474 阅读 · 0 评论 -
用递归的方式对于树的各种实现(前序、中序、后序、层次、节点、深度、交换左右子树)
/* 关于树的一些实现方法,此处都是通过递归遍历实现的。 递归实现树的建立,递归前序中序后序(stack),层次遍历树(queue),递归求树的节点,递归求深度,递归的交换左右子树,\ stack 和 queue使用的时候,都是尖括号 stack queue 等等 */ #include #include #include #include #include原创 2015-09-06 21:06:00 · 559 阅读 · 0 评论 -
判断单向链表中是否有环
//判断单链表中是否有环 /* 基本思想:用两个指针,pSlow和pFast,一个快一个慢。 慢的跳一次,快的跳两次。当快的追上慢的的时候就表示有环了 */ struct listtype { int data; struct listtype* next; }list; int find_circle(list *head){ li原创 2015-09-21 15:41:40 · 363 阅读 · 0 评论 -
字符反转
#include #include using namespace std; int main(){ string s = "abcdefghijklm"; //cout cout int len = s.length(); char tmp = 'a'; for (int i = 0; i tmp = s[i]; s[i] = s[len原创 2015-09-21 19:23:00 · 362 阅读 · 0 评论 -
前序中序非递归遍历树
如果只需要前序中序,则Node中是不需要flag的。但是如果是在后序中,则需要。 #include #include #include #include using namespace std; class Node{ public: int data; Node *pLeft = NULL; Node *pRight = NULL; };原创 2015-09-05 16:10:09 · 344 阅读 · 0 评论 -
《数据结构与算法分析C++》 维斯 第一章 笔记
指数,对数,级数,模运算,证明方法。 递归的简单介绍:递归并不是循环逻辑。因为他是从f(5)到f(4),一直下去,而非,从f(5)还在f(5). 所以,递归并不是循环。 当编写递归历程的时候,关键是呀牢记递归的四条基本法则: (1)基准情形:某些基准情形不用递归就能求解 (2)不断推进:对于那些需要递归求解的情形,总能朝着基准情形方向靠近 (3)设计法则:假设所有的递归调用都能运行原创 2015-07-01 19:39:16 · 1272 阅读 · 0 评论 -
栈
//栈的顺序存储 /* 栈顶指针:S.top, 初始时:S.top=-1; 栈顶元素:S.data[S.top] 进栈操作:栈非空的时候,先将栈顶指针减1,再将栈顶元素进去 出栈操作:栈非空的时候,先取栈顶元素,再将栈顶指针减1。 栈空条件:S.top==-1;栈满条件:S.top==MaxSize-1;栈长:S.top+1; 所以,S.top为当前指针所在的位置 S.data[原创 2015-09-02 09:21:30 · 389 阅读 · 0 评论 -
线性表
/* 线性表是有相同数据类型的n个数据元素的优先序列, 三个特征:(1)所有的数据的类型相同 (2)由有限个数据元素构成 (3)数据元素与位置相关 */ //静态分配 #include using namespace std; #define MaxSize 50 typedef int ElemType; typedef原创 2015-08-26 17:00:34 · 259 阅读 · 0 评论 -
查找算法的实现 顺序和折半
#include #include using namespace std; //对于数组的顺序查找 //int search(int a[],int key,int count ){ // int x = 0; // // for (int i = 0; i // // if (a[i] == key) // { // ++x; // cout //原创 2015-09-18 11:52:18 · 460 阅读 · 0 评论 -
字符串匹配算法以及实现 转载
摘自: http://blog.csdn.net/airfer/article/details/8951802/ 字符串匹配(string match)是在实际工程中经常会碰到的问题,通常其输入是原字符串(String)和子串(又称模式,Pattern)组成,输出为子串在原字符串中的首次出现的位置。通常精确的字符串搜索算法包括暴力搜索(Brute force),KMP, BM(Bo转载 2016-04-21 10:37:07 · 404 阅读 · 0 评论