
数据结构
xiangjie256
这个作者很懒,什么都没留下…
展开
-
数据结构概论
一些基本理论还是有必要知道的:数据:信息的载体,是描述客观事物的数,字符,以及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。数据结构:由某一数据元素的集合和该集合中数据元素之间的关系组成。分为两大类:线性结构,非线性结构(层次结构和群结构)数据结构的存储方法:1.顺序存储方法:把逻辑上相邻的元素存放到物理位置上相邻的存储单元中,数据元素之间的逻辑关系由存储单元的...原创 2011-05-11 09:00:35 · 80 阅读 · 0 评论 -
树基本概念
结点(node):包含数据项及指向其他结点的分支。结点的度(degree):是结点所拥有子树的棵数。叶结点(leaf):度为0的结点,又称终端结点。分支结点(branch):除叶结点外的其他结点,又称非终端结点。子女结点(child):若结点x有子树,则子树的根结点即为结点x的子女。父结点(parent):若结点x有子女,它即为子女的父结点。兄弟结点(sibling):同一...原创 2011-05-30 09:28:05 · 102 阅读 · 0 评论 -
二叉树基本概念
一棵二叉树的结点的一个有限集合:该集合或者为空,或者是由一个根结点加上两棵分别称为左子树和右子树的,互不相交的二叉树组成。相关性质:1.在二叉树的第i(i>=1)层最多有2的i-1次方个结点。2.深度为k(k>=0)的二叉树最少有k个结点,最多有2的k次方-1个结点。3.叶结点数等于度为2的非叶结点数加1:N0=N2+14.满二叉树:深度为k的满二叉树有2的k次方-1个结点...原创 2011-05-30 10:05:01 · 133 阅读 · 0 评论 -
二叉树的链式实现
binaryTree.h[code="c++"]#ifndef LINKEDBINARYTREE_H#define LINKEDBINARYTREE_H#includeusing namespace std;templateclass BinTreeNode{public: T data; BinTreeNode *leftChild,*...原创 2011-05-31 11:24:57 · 164 阅读 · 0 评论 -
森 林
森林与二叉树互转,主要是子结点转左子树,兄弟结点转右子树深度优先遍历:包括先根与后根,森林的先根次遍历和后根次遍历与二叉树的前序遍历和中序遍历对应广度优先遍历:层次序列,从第一层起,自顶向下,自左向右...原创 2011-06-01 11:09:14 · 147 阅读 · 0 评论 -
堆
在优先级队列的各种实现中,堆是最高效的一种数据结构关键码:在各个数据记录中存在一个能够标识数据记录(或元素)的数据项,并将依据该数据项对数据进行组织,这个数据项就是关键码最小堆:父结点总是小于等于子结点最大堆:父结点总是大于等于子结点MinHeap.h[code="c++"]#ifndef MINHEAP_H#define MINHEAP_H#inc...原创 2011-06-02 09:19:06 · 95 阅读 · 0 评论 -
Huffman树
Huffman树,又称最优二叉树,是一类加权路径长度最短的二叉树路径:从树中一个结点到另一个结点之间的分支构成该两结点之间的路径路径长度:路径上分支条数[code="c++"]#ifndef HUFFMAN_H#define HUFFMAN_H#include"MinHeap.h"class HuffmanNode{public: floa...原创 2011-06-02 11:06:10 · 105 阅读 · 0 评论 -
bitset
bitSet.h[code="c++"]#ifndef BITSET_H#define BITSET_H#include#includeusing namespace std;const int DefaultSize=50;/* 16位无符号短整数实现位映射 */templateclass bitSet{public: b...原创 2011-06-06 12:27:35 · 155 阅读 · 0 评论 -
LinkedSet
改了很久的bug :oops: [code="c++"]#ifndef LINKEDSET_H#define LINKEDSET_H#include#includeusing namespace std;templateclass SetNode{public: T data; SetNode* link; SetNode():...原创 2011-06-07 13:08:24 · 174 阅读 · 0 评论 -
字 典
字典:以集合为基础,并支持支持Member,Insert和Remove三种运算的抽象数据类型。字典是一些元素的集合,每个元素有一个称作关键码的域,不同元素的关键码互不相同组织方式:线性表,跳表(skip list),散列表(hash table)线性表[code="c++"]#includetemplateclass ChainNode{public: ...原创 2011-06-08 10:06:00 · 243 阅读 · 0 评论 -
跳 表
[code="c++"]#ifndef SKIPLIST_H#define SKIPLIST_H#include#includeconst int DefaultSize = 100;templateclass SkipNode{ E data; SkipNode **link; SkipNode(int size=DefaultS...原创 2011-06-08 11:12:56 · 104 阅读 · 0 评论 -
散列表(哈希表)
散列表(hash table):是表示集合和字典的另一种有效方法,它提供了一种完全不同的存储和搜索方式,通过将关键码映射到表中某个位置上来存储元素,然后根据关键码用同样的方式直接访问。需要注意两点:1.散列函数的定义域必须包括需要存储的全部关键码,而如果散列表允许有m个地址时,其值域必须在0到m-1之间。2.散列函数计算出来的地址应能均匀分布在整个地址空间中。散列函数中用的最多的是...原创 2011-06-09 09:55:48 · 107 阅读 · 0 评论 -
链表反转
[code="c++"]templatevoid disorderList::reverse(){ ListNode *node = first->link; //这里也许用2个指针就可以,但我没想到解决办法 ListNode *preNode = NULL; ListNode *currentNode = NULL; ListNode...原创 2011-06-12 18:03:30 · 93 阅读 · 0 评论 -
红黑树
红黑树:1.根结点和所有的叶结点都是黑色2.从根结点到叶结点没有连续两个结点的颜色是红色,如果结点为红,则子结点必为黑色3.所有从根到叶结点的路径上都有相同数目的黑色结点阶(结点的黑高度):从任一结点出发,到达叶结点的任一路径上的黑色结点的个数。...原创 2011-06-16 14:29:29 · 66 阅读 · 0 评论 -
图的基本概念
完全图:n个顶点,n*(n-1)/2个边的无向图,就是无向完全图,n个顶点,n*(n-1)个边的有向图就是有向完全图。权:在某些图中,边具有与之相关的数值,称为权重。邻接顶点:一条边上的两个点互为邻接顶点。度:与点v关联的边数,称为v的度,有向图中以v为终点的叫入度,以v为起点的叫出度。路径:从一个点到另一个点经过的所有的边(v1,v2),(v2,v3)......原创 2011-06-20 16:18:00 · 94 阅读 · 0 评论 -
排序概念
数据表:待排序数据元素的有很集合排序码:通常数据元素有多个个属性域,即多少个数据成员组成,其中有一个属性域可用来区分元素,作为排序依据。稳定性:2个元素R1,R2,它们的排序码K1=k2,在排序前R1在R2前,排序后R1仍在R2之前,则称这个排序方法是稳定的。内部排序:在排序期间数据元素全部存放在内存的排序。外部排序:在排序期间全部元素个数太多,不能同时存放内存,必...原创 2011-06-24 14:51:43 · 97 阅读 · 0 评论 -
数据结构概论2
数据元素:组成数据的,有一定意义的基本单位,在计算机中通常作为整体处理.也被称为记录.动物:牛,马,羊...就是动物的数据元素数据项:一个数据元素可以由若干个数据项组成.数据项是不可分割的最小单位比如人可以有眼,耳,鼻,手,脚这些数据项数据对象:是性质相同的数据元素的集合,是数据的子集如人有相同的姓名,生日,性别等相同的数据项数据结构:是相互之间存在一种或多...原创 2012-06-04 22:19:14 · 98 阅读 · 0 评论 -
广义表
广义表的定义是递归的,因为在表的描述中又用到了表,允许表中有表。list=(a,(b,c(d,e,f),(),g),h,(r,s,t))每一个表结点可由三个域组成:1.标志域:表头,元素,子表2.信息信:引用数,元素值,头指针3.尾指针域存储特点:1.广义表中的所有表,不论是哪一层的子表,都带有一个附加头结点,空表也不例外2.所有位于同一层的表元素,在其存储...原创 2011-05-27 10:57:26 · 156 阅读 · 0 评论 -
矩阵相关
矩阵:是一个具有m行n列的二维数组。上三角矩阵:只存储对角线及对角线(左上角到右下角)以上的元素。反之则称为下三角矩阵。稀疏矩阵:非0元素远远小于0元素个数,而且这些元素没有规律矩阵转置:把原矩阵的行,列对换,在原矩阵中[i][j]位置中的元素,交换到转置矩阵中[j][i]的位置上SparseMatrix.h[code="c++"]#include#incl...原创 2011-05-26 10:22:01 · 137 阅读 · 0 评论 -
线性表
在数据结构里最简单的是线性表,第一表项是表头,最后一项是表尾,线性表是一个有限序列linearList.h[code="c++"]#ifndef LINEARLIST_H#define LINEARLIST_Htemplateclass LinearList{public: virtual int Size()const=0;//表的分配的size(max...原创 2011-05-12 18:13:26 · 102 阅读 · 0 评论 -
线性表-顺序表
顺序表:把线性表中的所有表项按照其逻辑顺序依次存储到从计算机存储中指定存储位置开始的一块连续的存储空间SeqList.h[code="c++"]#ifndef SEQLIST_H#define SEQLIST_H#include"linearList.h"const int defaultSize = 100;templateclass SeqList:pu...原创 2011-05-12 18:18:39 · 105 阅读 · 0 评论 -
线性表-单链表
单链表(线性链表):它用指针表示结点间的逻辑关系。一个存储结点包含data(数据域),link(指针域,链域)。它的特点是长度可以很方便的进行扩充。数据元素的顺序与其链表表示中结点的物理顺序可能不一致,一般通过指针将各数据元素按逻辑顺序链接起来由于链接表的每个结点要带指针域,所以存储空间比顺序存储要付出较大的代价。LinkedList.h[code="c++"]#ifndef LI...原创 2011-05-12 18:27:15 · 162 阅读 · 0 评论 -
约瑟夫环
写一个基于数组的实现[code="c++"]#includeusing namespace std;/* size个人围成一圈,从start开始报数,报到m的出列 */void fun(int *a,int size,int start,int m){ if(m...原创 2011-05-13 10:51:58 · 74 阅读 · 0 评论 -
数据结构前言
刚把c++编程思想上的题做完了,感觉书是没怎么看懂,题基本做出来了,然后数据结构刚好相反,以前也学过,书貌似“看明白了”,题才第二章,花的时间比预算的多了不少,而且数量挺大的,计划又赶不上变化啦...但无论如何,我会把它们做完的 :wink: ...原创 2011-05-13 18:16:32 · 113 阅读 · 0 评论 -
双向链表
双向链表(double linked list)目的是为了解决在链表中访问直接前驱和直接后继的问题。一个直接前驱一个直接后继,向前后搜索的开销都是O(1)[code="c++"]#ifndef DOUBLELINKEDLIST_H#define DOUBLELINKEDLIST_H#include"linearList.h"#includetemplateclass...原创 2011-05-17 11:31:06 · 144 阅读 · 0 评论 -
多项式运算
polynomial.h[code="c++"]#ifndef POLYNOMAL_H#define POLYNOMAL_H#includeusing namespace std;class Term{//多项式结点public: float coef; //系数 int exp;//指数 Term *link; Term(f...原创 2011-05-17 11:38:24 · 125 阅读 · 0 评论 -
c++栈
栈可定义为只允许在表的末端进行插入和删除的线性表,只在栈顶插入和删除。没有元素则为空栈。Stack.h[code="c++"]#ifndef STACK_H#define STACK_Htemplateclass Stack{public: Stack(){}; virtual void Push(const T& x)=0; vi...原创 2011-05-19 17:20:15 · 114 阅读 · 0 评论 -
栈-顺序栈
SeqStack.h[code="c++"]#ifndef SEQSTACK_H#define SEQSTACK_H#include#include#include"Stack.h"using namespace std;const int stackIncrement = 20;templateclass SeqStack:public Stack...原创 2011-05-19 17:22:34 · 107 阅读 · 0 评论 -
栈-链栈
LinkedStack.h[code="c++"]#ifndef LINKEDSTACK_H#define LINKEDSTACK_H#include#include"../T2/LinkedList.h" //LinkNode#include"Stack.h"using namespace std;templateclass LinkedStack:p...原创 2011-05-19 17:27:03 · 120 阅读 · 0 评论 -
非递归斐波那契
[code="c++"]#include#includeusing namespace std;void fibnacci(int n){ assert(n>0); int n1=1,n2=1,num; for(int i=0;i原创 2011-05-19 17:30:11 · 117 阅读 · 0 评论 -
回溯走迷宫
[code="c++"]#include#include"LinkedStack.cpp"using namespace std;class Point{public: int x; int y;public: Point():x(0),y(0){} Point(int i,int j):x(i),y(j){}};te...原创 2011-05-19 17:33:44 · 137 阅读 · 0 评论 -
c++队列
队列是一种限定存取位置的线性表。只允许在表的一端插入,另一端删除。特性:先进先出[code="c++"]#ifndef QUEUE_H#define QUEUE_Hconst int maxSize = 50;templateclass Queue{public: virtual void EnQueue(const T& x)=0; virtu...原创 2011-05-20 09:45:14 · 124 阅读 · 0 评论 -
循环队列
这段代码存在内存泄漏,先mark一下!SeqQueue.h[code="c++"]#ifndef SEQQUEUE_H#define SEQQUEUE_H#include#include"Queue.h"using namespace std;templateclass SeqQueue:public Queue{public: SeqQu...原创 2011-05-20 12:03:58 · 112 阅读 · 0 评论 -
链式队列
LinkedQueue.h[code="c++"]#ifndef LINKEDQUEUE_H#define LINKEDQUEUE_H#include#include"../T2/LinkedList.h"#include"Queue.h"using namespace std;templateclass LinkedQueue:public Queue...原创 2011-05-20 12:05:25 · 111 阅读 · 0 评论 -
优先级队列
PQueue.h[code="c++"]#ifndef PQUEUE_H#define PQUEUE_H#include#include#includeusing namespace std;const int DefaultPQSize=50;templateclass PQueue{public: PQueue(int sz=Def...原创 2011-05-21 11:24:41 · 87 阅读 · 0 评论 -
时间复杂度推导
1.用常数1取代运行时间中的所有加法常数2.在修改后的运行次数函数中,只保留最高阶项3.如果最高阶项存在且不是1,则去除与这个项相乘的常数.原创 2012-06-05 22:57:44 · 122 阅读 · 0 评论