
Datastructure
PGEva
芝兰生于深林,不以无人而不芳;君子修道立德,不谓困厄而改节.
展开
-
从头开始学数据结构----<链表>
链表 链表和数组作为算法中的两个基本数据结构,在程序设计过程中经常用到。尽管两种结构都可以用来存储一系列的数据,但又各有各的特点。 数组 VS 链表 1. 数组 所申请的内存空间,必须是线性连续,且申请的空间大小必须提前确定。 插入和删除操作代价比较大,需要该位置后面的数据都向后移动,留出一个空位进行插入,或者都向前移动,把该空位的数据进行覆盖(也就是删除)。 查询代价较小,数组是连续存储的,知道该数组名称,可根据下标直接查询; 不利于扩展,数组空间是提前申请的,当存储空间不够时,需要重新申请空间原创 2020-11-14 17:00:46 · 247 阅读 · 0 评论 -
KMP算法
点击传送门1 点击传送门2原创 2017-08-14 20:27:16 · 302 阅读 · 0 评论 -
遍历二叉树的各种操作(非递归遍历)
点击这里转载 2017-08-18 21:20:13 · 405 阅读 · 0 评论 -
RB树(红黑树)插入以及删除
红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。 它是在1972年由Rudolf Bayer发明的,当时被称为平衡二叉B树(symmetric binary B-trees)。后来,在1978年被 Leo J. Guibas 和 Robert Sedgewick 修改为如今的“红黑树”。 红黑树和AVL树类原创 2017-07-25 10:23:39 · 1561 阅读 · 0 评论 -
AVL树实现(插入删除)
在计算机科学中,AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(log n)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。AVL树得名于它的发明者 G.M. Adelson-Velsky 和 E.M. Landis,他们在 1962 年的论文 “An algorithm for t原创 2017-07-25 10:08:29 · 748 阅读 · 0 评论 -
BST(线索二叉树实现)
BST树是学习树结构中最基础的数据结构,也是通向AVL树和RB树的基础,用来学习非常的不错。好了废话不多说,直接代码实现: 项目地址:这里 BinarySearchTree.h 1 #ifndef _BINARYSEARCHTREE_H 2 #define _BINARYSEARCHTREE_H 3 4 #include<iostream> 5 #include<st原创 2017-07-25 09:49:56 · 628 阅读 · 0 评论 -
栈的压入、弹出序列
1 /* 2 题目:输入两个证书序列,第一个 序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压栈序列,序列4,5,3,2,1是该压栈序列对应的一个弹> 出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。 3 解决这个问题很直观的方法就是建立一个辅助栈,把输入的第一个序列中的数字原创 2017-07-16 19:47:31 · 292 阅读 · 0 评论 -
双向链表
list.h #include"utili.h" template class List; template class ListNode { friend class List; public: ListNode():data(Type()),prev(NULL),next(NULL) {} ListNode(const Type d,ListNode *p = NULL,ListN原创 2016-12-19 23:03:38 · 294 阅读 · 0 评论 -
双向循环链表
list.h #ifndef _LIST_H #define _LIST_H #include"utili.h" typedef int ElemType; template class List; template class ListNode { friend class List; public: ListNode():prev(NULL),next(NULL),data(Ty原创 2016-12-19 23:00:35 · 325 阅读 · 0 评论 -
单循环链表
list.h #ifndef _LIST_H #define _LIST_H #include"utili.h" typedef int ElemType; template class List; template class ListNode { friend class List; public: ListNode():data(Type()),next(NULL) {} L原创 2016-12-19 22:57:51 · 457 阅读 · 0 评论 -
单链表C语言
seqlist.h #ifndef _SEQLIST_H #define _SEQLIST_H #include"ututli.h" #define ElemType int #define DEFAULT_SIZE 8 //初始化时数组的长度 #define LIST_INCREMENT 2 //每次增加的长度 typedef struct SeqList { ElemType *b原创 2016-12-19 22:55:39 · 380 阅读 · 0 评论 -
表达式求值
utili.h #ifndef _UTILI_H #define _UTILI_H #include using namespace std; #include #endif stack.h #ifndef _STACK_H #define _STACK_H #include"utili.h" #define STACK_INCREMENT 2 template clas原创 2016-12-19 22:50:19 · 300 阅读 · 0 评论 -
一元多项式的求值问题
list.h #ifndef _LIST_H #define _LIST_H #include using namespace std; typedef struct Data { float coef; //系数 int expn; //指数 }Elemtype; class List; class ListNode { friend class List; public:原创 2016-12-19 22:48:22 · 1146 阅读 · 0 评论 -
栈的应用:四则运算表达式值:
栈的应用:四则运算表达式值: 四则运算的口诀是:先乘除,后加减,从左算到右,先括号内后括号外.那计算器是怎样实现这个功能的呢? 仔细观察后发现,括号都是成对出现的,有左括号就一定会有右括号,对于多重括号,最终也是完全嵌套匹配的.这和栈正好合适,只要碰到左括号,就将左括号入栈,不管表达式有多少重括号,反正遇到左括号就进栈,而后面出现右括号时,就让栈顶的左括号出栈,期间让数字运算,这样,最终有括号原创 2016-12-09 21:47:21 · 742 阅读 · 0 评论 -
数据结构中常用算法
排序常用的算法有:插入算法(直接插入算法、折半插入算法、希尔算法)、选择算法(简单选择算法、堆排序算法)、快速算法(冒泡排序、快速排序算法) 以下程序给出了各种算法的实现,其接口为void sort(int *array,int len),每个文件实现一个算法, 最后和main.c文件编译实现。 1、直接插入算法: //direct_insert_sort.c void sort(原创 2016-12-02 16:55:03 · 2393 阅读 · 0 评论 -
线性表之顺序表代码
#ifndef _SEQLIST_H #define _SEQLIST_H #include"ututli.h" #define ElemType int #define DEFAULT_SIZE 8 //初始化时数组的长度 #define LIST_INCREMENT 2 //每次增加的长度 typedef struct SeqList { ElemType *base; size_原创 2016-12-02 16:45:24 · 569 阅读 · 0 评论