数据结构 C#语言版
文章平均质量分 81
xufei96
SDET .net C#
展开
-
第1章 绪论(1)
数据类型可分为两类:一类是非结构的原子类型,另一类是结构类型,结构类型的成分可以使非结构的也可以是结构的。数据结构(data structure)数据结构是相互之间存在一种或多种特定关系的数据元素的集合。在任何问题中,数据元素之间都不是孤立的,而是存在着一定的关系,这种关系称为结构(Structure)。根据数据元素之间关系的不同特性,通常有4类基本数据结构:(1)集合(Set):该结原创 2012-01-09 17:16:17 · 372 阅读 · 0 评论 -
第5章 树和二叉树(6)
5.4 哈夫曼树路径长度:从树中的一个结点到另一个结点之间的分支构成这两个结点之间的路径,路径上的分支数目称作路径长度。树的路径长度是从树根到每一个结点的路径长度之和。完全二叉树是这种路径长度最短的二叉树。结点的带权路径长度为从该结点到树根之间的路径长度与结点上权的乘积。树的带权路径长度为树中所有叶子节点的带权路径长度之和,通常记作WPL。赫夫曼树:带权路径长度WPL最小的二叉树称原创 2012-02-01 17:06:20 · 378 阅读 · 0 评论 -
第5章 树和二叉树(8)
例5-3 编写算法,求二叉树的深度Python Codes:class TreeNode: def __init__(self,left=0,right=0,value=0): self.Left=left self.Right=right self.Value=valueclass Tree: def __init__(原创 2012-02-02 14:22:23 · 334 阅读 · 0 评论 -
第5章 树和二叉树(10)
习题 5.10 编写算法,将二叉树中所有结点的左右子树相互交换。C++ Codes:templateclass TreeNode{public: T Value; TreeNode *Left; TreeNode *Right; TreeNode(TreeNode *left=0,TreeNode *right=0,T value=0) { Value=value;原创 2012-02-02 16:56:09 · 325 阅读 · 0 评论 -
第5章 树和二叉树(7)
例5-2 统计出二叉树中叶子结点的数目C++ Codes:templateclass TreeNode{public: T Value; TreeNode *Left; TreeNode *Right; TreeNode(TreeNode *left=0,TreeNode *right=0,T value=0) { Value=value; this->Left=l原创 2012-02-02 11:00:19 · 400 阅读 · 0 评论 -
第5章 树和二叉树(9)
习题 5.9 编写算法,求二叉树中分支结点的数目。C++ Codes:templateclass TreeNode{public: T Value; TreeNode *Left; TreeNode *Right; TreeNode(TreeNode *left=0,TreeNode *right=0,T value=0) { Value=value; this->原创 2012-02-02 16:30:52 · 311 阅读 · 0 评论 -
第7章 排序(1)
7.2简单排序方法7.2.1 直接插入排序C++ Codes:#pragma once#include "stdafx.h"templatevoid DirectInsertSort(T vec[], int length){ for(int i=0;i<length-1;++i) { for(int k=0;k<=i;++k) { if(vec原创 2012-02-06 13:16:23 · 313 阅读 · 0 评论 -
第7章 排序(2)
7.2.2 冒泡排序C++ Codes:templatevoid BubbleSort(T vec[], int length){ for(int i=0;i<length;++i) { for(int j=0;j<length-i-1;++j) { if(vec[j]>vec[j+1]) { T val=vec[j+1]; vec[j+原创 2012-02-06 13:41:31 · 326 阅读 · 0 评论 -
第7章 排序(3)
7.2.3 简单选择排序C++ Codes:templatevoid SimpleSelectSort(T vec[],int length){ for(int i=0;i<length;++i) { int mark=i; for(int j=i;j<length;++j) { if(vec[j]<vec[mark]) mark=j; }原创 2012-02-06 14:26:56 · 268 阅读 · 0 评论 -
第7章 排序(4)
7.3 快速排序C++ Codes:templatevoid QuickSort(T vec[],int low, int high){ int i=low; int j=high; int k=low; while(low<high) { while(k=vec[k]) --high; int val1=vec[k]; vec[k]=vec[high];原创 2012-02-06 16:04:38 · 308 阅读 · 0 评论 -
第7章 排序(5)
7.4 堆排序C++ Codes:templatevoid HeapSort(T vec[], int length){ for(int i=0;i<length;++i) { for(int j=length-1-i;j>0;--j) { if(vec[j]>vec[(j-1)/2]) { T val=vec[j]; vec[j]=vec[(j原创 2012-02-06 16:47:01 · 282 阅读 · 0 评论 -
第7章 排序(6)
7.5 归并排序归并排序主要是二路归并排序。二路归并排序的基本思想是:将两个有序表合并为一个有序表。假设顺序表中n个记录为n个长度为1的有序表,从第1个有序表开始,把相邻的两个有序表两两合并成一个有序表,得到n/2个长度为2的有序表。如此重复,最后得到一个长度为n的有序表。Python Codes:def __Merge(arr,start1,start2,end): wh原创 2012-02-07 14:49:16 · 361 阅读 · 0 评论 -
第8章 查找(1)
8.2.2 有序表的折半查找折半查找(Binary Search)又叫二分查找,其基本思想是:在有序表中,取中间的记录作为比较对象,如果要查找记录的关键码等于中间记录的关键码,则查找成功;若要查找记录的关键码小于中间记录的关键码,则在中间记录的左半区继续查找;若要查找记录的关键码大于中间记录的关键码,则在中间记录的右半区继续查找。不断重复上述查找过程,直到查找成功,或有序表中没有所要查找的记录原创 2012-02-07 15:28:26 · 349 阅读 · 0 评论 -
第8章 查找(2)
8.4 哈希表如果能构造一个查找表,使记录的存放位置与记录的关键码之间存在某种对应关系,则可以直接由记录的关键码得到记录的存放位置,则查找可以很快完成,这样查找的效率将得到极大的提高。哈希表(Hash Table)就是这样一种查找表,记录的关键码与存放位置之间的映射函数就是哈希函数。因此,哈希表就是通过哈希函数来确定记录存放位置的一种数据结构。8.4.1 哈希表的基本概念哈希表也叫散列原创 2012-02-07 15:54:24 · 322 阅读 · 0 评论 -
第7章 排序(7)
希尔排序代码实现就不多说了 分好段 排序就行了shellsort 的时间复杂度为O(N*(logN)2)原创 2012-02-07 16:53:56 · 538 阅读 · 1 评论 -
第6章 图
6.1.3 图的基本操作 //Graph node class public class GraphNode { public T Value { get; set; } public GraphNode(T value) { Value = value; } }原创 2013-09-04 14:48:11 · 638 阅读 · 0 评论 -
第6章 图
6.2.2 邻接表邻接表(Adjacency List)是图的一种顺序存储与链式存储相结合的存储结构,类似于与树的孩子链表表示法。顺序存储指的是图中的顶点信息用一个顶点数组来存储,一个顶点数组元素是一个顶点结点,顶点节点有两个域,一个是数据域,存放与结点相关的信息,一个是引用域firstAdj。顶点的邻接表示把所有邻接于某顶点的顶点构成一个表,它是采用链式存储结构。所以,我们说邻接表是图的一种原创 2013-09-05 11:06:16 · 743 阅读 · 0 评论 -
第5章 树和二叉树(5)
4. 层序遍历(Level Order)C++ Codes:templateclass Tree{public: TreeNode *Root; Tree(TreeNode *root) { this->Root=root; } void LevelOrder() { Tree::LevelOrder(this->Root); //Tree::LevelOrd原创 2012-02-01 15:43:23 · 420 阅读 · 0 评论 -
第5章 树和二叉树(3)
2. 中序遍历(LDR)C++ Codes:templateclass Tree{public: TreeNode *Root; Tree(TreeNode *root) { this->Root=root; } void InOrder() { //Tree::InOrder2(this->Root); Tree::InOrder1(this->Root);原创 2012-02-01 11:03:47 · 413 阅读 · 1 评论 -
第1章 绪论(2)
1.3 数学预备知识集合(Set)是由一些确定的,彼此不同的成员(Member)或者元素(Element)构成的一个整体。成员取自一个更大的范围,称为基类型(Base Type)。集合中成员的个数称为集合的基数(Cardinality)。集合的特性:1) 确定性:任何一个对象都能被确切地判断是集合中的元素或不是。2) 互异性:集合中的元素不能重复。3) 无序性:集合中元素与顺序原创 2012-01-11 13:05:09 · 278 阅读 · 0 评论 -
第2章 线性表(1)
2.2 顺序表2.2.1 顺序表的定义在计算机内,保存线性表最简单、最自然的方式,就是把表中的元素一个接一个地放进顺序的存储单元,这就是线性表的顺序存储(Sequence Storage)。线性表的顺序存储是指在内存中用一块地址连续的空间依次存放线性表的数据元素,用这种方式存储的线性表叫顺序表(Sequence List)。顺序表的特点是表中相邻的数据元素在内存中位置也相邻。C#语言中原创 2012-01-11 15:21:44 · 292 阅读 · 0 评论 -
第2章 线性表(2)
Python实现一个顺序表的基本功能:"Algri.py"class SeqList(object): def __init__(self, length): self.MaxLength=length self.__data=range(length) self.Last=-1; "索引器get" d原创 2012-01-11 17:20:36 · 370 阅读 · 0 评论 -
第2章 线性表(3)
C++实现一个顺序表//Algri.h#include "stdafx.h"#include #include using std::cout;using std::vector;namespace Jeffery{templateclass SeqList{public: int Maxsize;private: vector data; int Las原创 2012-01-12 16:05:13 · 348 阅读 · 0 评论 -
第2章 线性表(4)
C++实现一个单向链表://Node.h#pragma once#include "stdafx.h"namespace Alexsoft{ template class Node { public: T data; Node *next; Node(T val,Node *p){ data=val; next=p; } Node(T val原创 2012-01-17 15:45:01 · 410 阅读 · 0 评论 -
第2章 线性表(5)
Python实现一个单链表:"Node.py"class Node: """description of class""" def __init__(self, val, p=0): self.data=val; self.next=p;"LinkList.py"from Node import Nodeclass LinkList:原创 2012-01-18 15:05:35 · 314 阅读 · 0 评论 -
第3章 栈和队列(1)
栈的操作只能在表的一端进行,队列的插入操作在表的一端进行而其它操作在表的另一端进行,所以,把栈和队列称为操作受限的线性表。3.1 栈C++写一个利用数组实现栈的代码://MyStack.h#pragma once#include "stdafx.h";#include ;using std::cout;namespace Kingsoft{ template cla原创 2012-01-18 16:36:16 · 305 阅读 · 0 评论 -
第3章 栈和队列(2)
Python写一个利用列表[]实现栈的代码:class Stack: """Stack class in Stack.py""" def __init__(self,size): self.__maxsize=size self.__data=[] self.__top=-1 def __getitem__(self,in原创 2012-01-19 13:57:19 · 374 阅读 · 0 评论 -
第3章 栈和队列(3)
3.2 队列队列(Queue)是插入操作限定在表的尾部而其他操作限定在表的头部进行的线性表。队列又称为FIFO表或LILO表。C++利用数组实现一个循环顺序队列://Queue.h#pragma once#include "stdafx.h"#include using std::cout;namespace Andersoft{templateclass CSeqQ原创 2012-01-19 15:39:39 · 322 阅读 · 0 评论 -
第3章 栈和队列(4)
Python利用列表[]实现一个队列:class Queue: """description of class""" "Constructor" def __init__(self,size): self.maxsize=size self.__data=range(0,size) self.front=-1原创 2012-01-29 13:29:35 · 342 阅读 · 0 评论 -
第3章 栈和队列(5)
Python利用单链表实现栈与队列,栈链与队列链:"Node.py"class Node: """description of class""" def __init__(self, val, p=0): self.data=val self.next=pfrom Node import Nodeclass LinkStack:原创 2012-01-29 14:31:10 · 319 阅读 · 0 评论 -
第4章 串和数组(1)
字符串简称串,是在应用程序中使用频繁的数据类型。串由n(n>=0)字符组成的有限序列,一般记为S=“c1,c2...cn”。串中的字符都是连续存储的,而在C#中串具有恒定不变的特性,即字符串一经创建,就不能将其变长、变短或者改变其中任何的字符。所以,串一般采用顺序存储。串的基本操作有求串长、串比较、求子串、串连接、串插入、串删除和串定位等操作。数组可以看作是线性表的推广,其特点是结构中的数据元原创 2012-01-29 16:43:08 · 339 阅读 · 0 评论 -
第4章 串和数组(2)
KMP算法的C#实现感谢:http://www.cppblog.com/suiaiguo/archive/2009/07/16/90237.html namespace Andersoft.KMP{ //KMP算法最不容易理解的是Next函数,Next函数是KMP算法的精髓 public class KMP { //a b a b a b a原创 2012-01-31 14:04:16 · 350 阅读 · 0 评论 -
第5章 树和二叉树(1)
树形结构是一对多的非线性结构,非常类似于自然界中的树,数据元素之间既有分支关系,又有层次关系。树形结构有树和二叉树两种,树的操作实现比较复杂,但树可以转换为二叉树进行处理。二叉树的存储结构主要有三种:顺序存储结构、二叉链表存储结构和三叉链表存储结构。采用顺序存储结构,是对非线性数据结构线性化,用线性结构来表示二叉树的结点之间的逻辑关系,所以需要增加空间。二叉树的二叉链表存储结构可以原创 2012-01-31 15:13:03 · 396 阅读 · 0 评论 -
第5章 树和二叉树(2)
5.2.5 二叉树的遍历1. 先序遍历。C++ Codes:templateclass Tree{public: TreeNode *Root; Tree(TreeNode *root) { this->Root=root; } void PreOrder() { Tree::PreOrder2(this->Root); //Tree::PreOrder1原创 2012-01-31 16:04:41 · 339 阅读 · 0 评论 -
第5章 树和二叉树(4)
3. 后序遍历(LRD)C++ Codes:templateclass Tree{public: TreeNode *Root; Tree(TreeNode *root) { this->Root=root; } void LevelOrder() { Tree::LevelOrder2(this->Root); //Tree::LevelOrder1(thi原创 2012-02-01 14:30:19 · 340 阅读 · 0 评论 -
第6章 图
6.3 图的遍历6.3.1 深度优先遍历以下图为例,其深度优先遍历输出应该为:1 -> 3 -> 2 -> 5 -> 4 -> 6 -> 7 -> 9 -> 8 -〉10图的深度优先遍历类似于树的先序遍历,是树的先序遍历的推广。要借助一个辅助数组标记已经遍历过的顶点。以邻接表为例实现图的深度优先遍历:GraphAdjList类的定义在上一篇图的邻接表存储结构博客中原创 2013-09-05 14:58:14 · 566 阅读 · 0 评论