
数据结构
文章平均质量分 80
XHfight
心向阳光, 绚丽绽放
展开
-
动态顺序表
一、动态顺序表: 动态顺序表也是顺序表,不过它是动态的,也就是说它的容量是可以改变的,这就克服了静态顺序表容量不能改变的缺点。当顺序表的容量存满以后,我们可以对它进行扩容,概念就简单介绍到这里了。二、动态顺序表的数据结构:typedef struct SeqList_D{ DataType* array; //指向数据块的指针 size_t size原创 2016-06-01 13:32:35 · 769 阅读 · 0 评论 -
排序算法总结
1.原创 2016-11-28 13:36:25 · 675 阅读 · 0 评论 -
STL中map和set详解
在STL中有这两个容器set和map,它们的特性都是:所有元素都会根据元素的键值自动被排序。下面来介绍一下这两个容器和与之相关的几个容器。一、set和map1.set和map的区别和联系:联系:它们的底层实现都是红黑树。区别:set是key形式的,set元素的键值(key)就是实值(value),实值就是键值。而map是key/value形式的,map的所有元素都是pair,同原创 2016-11-19 00:28:16 · 1744 阅读 · 0 评论 -
堆实现 及 堆排序
1.Heap.h#pragma once#include #include #include using namespace std;template struct CmpGreat //建大堆{ bool operator()(const T& data1, const T& data2) { return data1>data2; }};template原创 2016-11-01 15:55:10 · 447 阅读 · 0 评论 -
【平衡搜索树】AVL树
【前言】:之前学过了二叉搜索树,但是二叉搜索树有一个很大的缺陷,就是当当原本的数据有序或者接近有序的时候,这棵树的高度就为N(假设原本的数据个数为N),那么在搜索的时候它的时间复杂度(这里考虑最坏情况下的)就为O(N), 搜索的效率就比较低。那么,为了改进这个缺陷,我们就尽量让这棵搜索树变得比较平衡,降低它的高度,这样就可以提高它的搜索效率。AVL树一、定义:AVL树又称为高度平衡的二原创 2016-11-10 12:02:29 · 629 阅读 · 0 评论 -
【矩阵】对称矩阵及稀疏矩阵的压缩存储
1.稀疏矩阵//稀疏矩阵及其压缩存储#pragma once#include #include using namespace std;templatestruct Triple{ size_t _r; size_t _c; T _value; Triple(size_t row = 0, size_t col = 0, const T& value = T())原创 2016-10-17 22:40:24 · 1231 阅读 · 0 评论 -
【二叉树】线索化二叉树
#pragma once#include #include using namespace std; enum PointerTag{ LINK, THREAD,};templatestruct BinaryTreeNode_Thr{ T _data; BinaryTreeNode_Thr* _left; BinaryTreeNode_Thr* _right;原创 2016-10-26 19:34:26 · 472 阅读 · 0 评论 -
【搜索树】二叉搜索树
二叉搜索树的实现:BinarySearch.h#pragma once#include using namespace std;template struct SearchBinaryTreeNode{ K _key; // 关键字(唯一) V _value; SearchBinaryTreeNode* _left; SearchBinaryTreeNode* _rig原创 2016-11-06 22:41:21 · 443 阅读 · 0 评论 -
【二叉树】二叉树遍历及基本功能实现
二叉树的基本操作及前,中,后,层序遍历的实现#pragma once#include #include #include using namespace std;template struct BinaryTreeNode{ T _data; BinaryTreeNode* _left; BinaryTreeNode* _right; BinaryTreeNode(c原创 2016-10-24 17:35:01 · 632 阅读 · 0 评论 -
【栈应用】迷宫问题
迷宫问题:给定一个迷宫的入口,找出迷宫的一条通路。【解决办法】1.迷宫放在一个文件里,我们将迷宫读取出来存储在一个二维数组中, 用'0'来表示通路,'1'表示不通。2.每次探测当前位置的上下左右,如果是通路,压栈,继续探测;如果不是通路,从栈中弹出,回溯到上一个走过位置。3.利用二维数组下标的界限来判断是否找到出口。【代码】1.Maze.h#pragma onc原创 2016-10-22 13:49:25 · 1196 阅读 · 0 评论 -
【数据结构】广义表的实现
【前言】学完了顺序表,链表这些线性的数据结构,现在开始进入非线性的数据结构了。难度也比线性结构更大,本篇文章对广义表这种数据结构进行介绍并附上其实现的代码,广义表的实现主要应用递归,通过广义表可以更加理解和灵活使用递归,希望能给学习这块知识的朋友们带来帮助。一、广义表概念广义表是线性表的推广,是一种非线性的数据结构,也有人称其为列表。举几个例子:(1)A=() //A是一原创 2016-09-24 15:25:22 · 2361 阅读 · 0 评论 -
【栈和队列】一个数组实现两个栈
学习了栈和队列的基本知识后,我们要利用这些基本知识实现出更多情况的栈和队列,下面通过一些面试题使我们更灵活的设计和使用栈和队列。1.利用一个数组实现两个栈思路:我们已经学过了栈和数组,数组是一块固定大小的存储空间,栈的栈底是固定的,通过栈顶来push,pop元素。(栈顶top指向栈顶元素)通过上面的图片,就能很清晰的看到,我们要用一个数组实现两个栈的话,数组的两原创 2016-09-17 12:31:53 · 1396 阅读 · 0 评论 -
链表面试题:判断链表是否相交(c语言)
一、问题描述:判断两个链表是否相交,若相交返回交点,否则返回空。由上图我们可以得出链表相交的两个结论:1.两链表相交,第一个相同的结点为链表的交点;2.两链表相交,从交点向后的所有结点都相同(合二为一)。二、解决思路方法一:直观法思路:依次判断第一个链表中的每个结点是否在第二个链表中出现。时间复杂度:O(Length(List1)*Length(List2))原创 2016-06-13 14:58:00 · 3465 阅读 · 2 评论 -
[c语言]单链表的实现
一、基础知识:链表(线性表的链式存储结构)(1)特点:逻辑关系相邻,物理位置不一定相邻。(2)分类: a.不带头节点650) this.width=650;" width="983" height="135" title="$KI3SY_AD]I]G(@$7H6]8DV.png" style="width:707px;height:86px;" alt="wKioL1cd_omg3yZ-A原创 2016-06-01 00:05:27 · 945 阅读 · 0 评论 -
二叉树练习题
1.将搜索二叉树转换成有序的双向链表思路:由搜索二叉树的特点(左 中序递归,记录前一个结点(初始为空),前一个结点的右指向当前结点,当前结点的左指向前一个结点。Node* ToOrderedDoubleList() //将搜索二叉树转换成有序的双向链表(递归){ Node* prev = NULL; Node* head = _root; while(head &&原创 2017-01-03 21:26:09 · 2270 阅读 · 1 评论