数据结构
qingdou_aixuexi
小白学习中。。。。
展开
-
二叉树的创建及遍历
一,树的相关概念 1,树是n(n>=0)个有限个数组的元素的集合,形状像一棵倒过来的树。 2, 3,结点:结点包含数据和指向其他结点的指针。根结点:树第一个结点称为根结点。结点的度:结点拥有的子结点个数。叶结点:没有子结点的结点。父子结点:一个结点father指向另一个结点child,则child为孩子结点,father原创 2016-04-20 08:40:58 · 602 阅读 · 0 评论 -
C++实现并查集
将N个不同的元素分成一组不相交的集合。开始时,每个元素就是一个集合,然后按规律将两个集合进行合并。假如已知有n个人和m对好友关系(存于数组r),如果两个人是直接的或间接的好友关系(好友的好友的好友....),则认为他们属于同一好友圈,请求出这n个人中有几个好友圈。例如:n=5,m=3,r={{1,2},{2,3},{4,5}},表示有5个人,1和2是好友,2和3是好友,原创 2016-09-28 23:46:38 · 2933 阅读 · 0 评论 -
C++实现平衡搜索树
AVL树左子树和右子树的高度之差不超过1左子树和右子树都是AVL树平衡因子=右子树个数-左子树#define _CRT_SECURE_NO_WARNINGS 1#include#includeusing namespace std;templatestruct AVLTreeNode{ K _key; V _value; AVLT原创 2016-09-21 15:25:28 · 1881 阅读 · 0 评论 -
C++实现栈的基本操作
#define _CRT_SECURE_NO_WARNINGS 1#pragma once#include#include#include#includeusing namespace std;templateclass Stack{public:Stack();//构造~Stack();//析构Stack(const Stack原创 2016-09-08 14:11:54 · 1283 阅读 · 0 评论 -
比较排序总结——直接插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序
一,直接插入排序插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。步骤:从第一个原创 2016-09-18 20:06:51 · 1286 阅读 · 0 评论 -
非比较排序——计数排序和基数排序
计数排序基数排序代码实现:#pragma once#include#includeusing namespace std;int GetMaxDigit(int *a, size_t n)//最大有多少位{int digit = 1;//位数int max = 10;for (int i = 0; i {if (a[i]原创 2016-09-17 23:41:20 · 313 阅读 · 0 评论 -
堆的实现
堆数据结构是一种数组对象,它可以被视为一棵完全二叉树结构。堆结构的二叉树存储是最大堆:每个父节点的都大于孩子节点。最小堆:每个父节点的都小于孩子节点调整后:代码实现:#define _CRT_SECURE_NO_WARNINGS 1#include#include#include#includeusing namespac原创 2016-09-16 23:58:35 · 210 阅读 · 0 评论 -
二叉树的线索化
二叉树是一种非线性结构,遍历二叉树几乎都是通过递归或者用栈辅助实现非递归的遍历。用二叉树作为存储结构时,取到一个节点,只能获取节点的左孩子和右孩子,不能直接得到节点的任一遍历序列的前驱或者后继。为了保存这种在遍历中需要的信息,我们利用二叉树中指向左右子树的空指针来存放节点的前驱和后继信息。enum PointerTag {THREAD, LINK};temp原创 2016-09-15 23:48:42 · 360 阅读 · 0 评论 -
矩阵问题总结
一,对称矩阵的压缩存储:1,设一个N*N的方阵A,A中任意元素Aij,当且仅当Aij == Aji(0 它存储时只要存储上三角或者下三角,所以只需要存储n(n+1)/2个数据。一般采用下三角储存:i>=j。a[i][j]=array[i*(i+1)/2+j]。2,3,#pragma once#includeusing namespace std;原创 2016-04-16 11:47:35 · 893 阅读 · 0 评论 -
C++一个数组实现两个栈
方案一:将数组的下标为0的位置当做第一个栈的栈底,下标为1的位置当做第二个栈的栈底,将数组的偶数位置看做第一个栈的存储空间,奇数位置看做第二个栈的存储空间。方案二:从中间分别向两边压栈将数组的中间位置看做两个栈的栈底,压栈时栈顶指针分别向两边移动,当任何一边到达数组的起始位置或是数组尾部,则开始扩容。方案三:从两边向中间压栈将数组的起始位置看原创 2016-09-10 22:14:36 · 1184 阅读 · 0 评论 -
元素出栈、入栈顺序的合法性
如入栈的序列(1,2,3,4,5),出栈序列为(4,5,3,2,1)先把1,2,3,4压入栈,再把4弹出,再把5压入,最后依次弹出5,3,2,1#define _CRT_SECURE_NO_WARNINGS 1#include#include#include#includeusing namespace std;templatebool CheckSta原创 2016-09-10 21:50:49 · 413 阅读 · 0 评论 -
C++面试题:两个队列实现一个栈
队列的特点是“先进先出”,而栈的特点是“先入后出”。方案一:我们用一个队列作为主要维护栈的队列,该队列用来插入元素和弹出元素。插入元素时,将元素直接插入到第一个队列的尾部。弹出元素时:(1)将第一个队列的除队尾元素以外的所有元素依次弹出并且插入到第二个队列中(2)将第一个队列中剩下的那个元素弹出(3)将第二个队列中的所有元素依次倒回到原创 2016-09-10 21:25:08 · 400 阅读 · 0 评论 -
C++实现队列
队列的定义队列值允许在表的队尾进行插入,在表对头进行删除。队列具有先进先出的特性。(FIFO,first In First Out)#define _CRT_SECURE_NO_WARNINGS 1//队列先进先出#include#include#includeusing namespace std;templat原创 2016-09-10 20:56:34 · 303 阅读 · 0 评论 -
两个栈实现队列
实现一思路 s1是入栈的,s2是出栈的。入队列,直接压到s1是就行了出队列,先把s1中的元素全部出栈压入到s2中,弹出s2中的栈顶元素;再把s2的所有元素全部压回s1中实现二思路 s1是入栈的,s2是出栈的。保证所有元素都在一个栈里面入队列时:如果s1为空,把s2中所有的元素倒出压到s1中;否则直接压入s1出队列时:如果s2不为空,把s2原创 2016-09-10 13:21:01 · 195 阅读 · 0 评论 -
复杂链表的复制
一,题目实现ComplexListNodeClone函数,复制一个复杂链表;复杂链表为二,编程思路方案一:1,复制每个结点N,然后把创建出来的每个结点N用m_pnext连接起来。同时保存它们的配对信息。2,设置复制链表的信息m_psibling。以空间换取时间。方案二:给每个原始结点后面链接一个结点。是前一个结点的复制。所以配对时直接原创 2016-04-13 12:21:38 · 340 阅读 · 0 评论 -
广义表及其实现
一,定义广义表是一种非线性的结构,是线性表的一种扩展,是有n个元素组成的一种有限序列。它是递归的,因为在表的描述中有得到表,允许表中有表。二,实例 A = () B = (a,b) C = (a,b,(c,d)) D = (a,b,(c,d),(e,(f),h)) E = (((),()))三,图解四,代码实现原创 2016-04-19 14:11:16 · 790 阅读 · 0 评论 -
C++实现搜索二叉树
二叉搜索树的性质:每个节点都有一个作为搜索依据的关键码(key),所有节点的关键码互不相同。左子树上所有节点的关键码(key)都小于根节点的关键码(key)。右子树上所有节点的关键码(key)都大于根节点的关键码(key)。左右子树都是二叉搜索树。#define _CRT_SECURE_NO_WARNINGS 1#include#includeusin原创 2016-09-21 00:46:55 · 2557 阅读 · 2 评论