数据结构c#语言实现

本文介绍了数据结构的基础概念,强调了数据结构在程序设计中的重要性。数据结构包括逻辑结构、存储结构和操作,如线性表、栈、队列、树和图等。同时,阐述了算法的定义、特性以及评价标准,探讨了算法效率的度量,如时间复杂度和空间复杂度。通过对抽象数据类型的详细解释,展示了如何用ADT解决实际问题。本文为后续深入学习C#实现的数据结构和算法奠定了基础。
摘要由CSDN通过智能技术生成

数据结构(c#语言实现)

  • 第1章 绪论
  • 第2章 c#语言基础
  • 第3章 线性表
  • 第4章 栈与队列
  • 第5章 迭代与递归
  • 第6章 串
  • 第7章 数组与广义表
  • 第8章 树与二叉树
  • 第9章 图

前言

本章讨论数据结构的重要概念,以及介绍算法分析的基本算法


1.1 数据结构的基本概念

1.1.1 数据结构的研究内容

程序 = 算法 + 数据结构

1.1.2 基本概念和术语

  1. 数据——计算机程序的处理对象,即所有能够输入到计算机中描述客观事物的符号,分为数值型数据和非数值型数据。
  2. 数据元素——数据的最小单位,也称结点或记录
  3. 数据项——有独立含义的数据的最小单位,也称域
  4. 数据对象——相同特性数据元素的集合,是数据的一个子集
    对于以上含义,举一个具体的例子。例如:一个学生成绩的表格,包括所有学生的各门成绩,每个学生就是一个是数据元素,也称一个数据结点,学生的各门成绩就是一个数据项,由学生组成集合就是一个数据对象。
  5. 数据结构——三种定义:
    (1)数据结构是相互之间存在一种或多种特定关系的数据元素的集合
    (2)数据结构是带“结构”的数据元素的集合,“结构”就是数据元素之间的关系
    (3)数据结构包括两个层次 + 一个操作,即逻辑结构、存储结构和操作
  • 对于这三个定义,这里做具体的解释:
    逻辑结构:数据元素兼抽象化的相互关系,独立于计算机,从具体问题抽象出来的数学模型
    存储结构:又称物理结构,是数据元素及其关系在计算机中的存储方式
    操作:执行不同功能的算法
    分类:
    在这里插入图片描述
  1. 数据类型
    (1)基本数据类型:int型、double型等等
    (2)构造数据类型:数组、共用体、结构体、文件
    (3)抽象数据类型:更高层次的数据抽象,由用户自定义,并由一些基本数据类型构成,再加上操作,这样就能得到用户想要实际解决的问题答案
  • 对于抽象数据类型(Abstract Data Type),这里做具体的解释:
    无论什么抽象数据类型,都可由以下的三元组表示:
    ADT = (D, S, P)【(Data, Structural, Process)】
    即(数据对象, 数据关系,基本操作)
    | 数据对象 | <数据对象的定义> |
    | 数据关系 | <数据关系的定义> |
    | 基本运算 | <基本操作的定义> |
  • 下面给出一个,具体的案例:
    实际问题:描述一个集合ASet的数据元素类型,其中所有元素为正整数,并求两个集合的并集
    相关代码不作具体的实现
ADT ASet
{
	数据对象:D = { d | 0 < d < n, n为一个正整数 }
	数据关系:无
	基本运算:
		public ASet();//创建一个集合(构造函数)
		public void Show();//输出一个集合
		public void InSet();//判断元素是否在集合中
		public void Add();//求集合的并集
}
  1. 运算描述和运算实现
    (1)运算描述:对逻辑结构施加的操作
    (2)运算实现:完成该运算功能的算法

1.2 算法

1.2.1 算法的定义

  • 一个有穷的指令集,描述了某一特定任务的运算方法

1.2.2 算法的特性

  1. 输入——有0个或多个输入
  2. 输出——有一个或多个输出
  3. 确定性——每一步都是确切的
  4. 有穷性——算法在执行有穷步后结束,值得注意的是:程序可以无限循环
  5. 有效性——每一条运算应可行

1.2.3 算法设计的评价

  1. 正确性
  2. 可读性
  3. 健壮性
  4. 高效性

1.2.4 算法效率的度量

  1. 时间复杂度
  • 算法效率:用依据该算法编制的程序在计算机上执行所消耗的时间来度量
    注意:消耗的时间并非是绝对运行时间,而是基本数量级
    (1)方式一:事后统计
    利用计算机内代码的计时功能比较
    -缺点:必须先运行算法的程序;硬件、软件可能会掩盖算法本身的优劣
    (2)方式二:事前分析
    分析问题的规模、采用的语言、代码的质量以及算法的频度
    (3)表示方法
    语句频度法:计算语句重复执行的次数
    大O法:利用某个函数的增长率描述
  1. 空间复杂度
  • 算法效率:用执行该算法所需要的空间来度量
    具体包括:
    存储算法本身所占用的空间
    算法的输入输出数据所占有的空间
    算法在运行过程中为临时变量所开辟的空间
  1. 常见函数的增长率

1 < log n < n < nlog n < n的平方 < 2的n次方

总结

小编认为:数据结构的学习方法就是准确知道任何问题的抽象数据模型,写出其ADT,最后进行算法实现
这样,无论多么复杂的问题,都能解决!
以上就是今天要讲的内容,本章仅仅简单介绍绪论,接下来才会真正开始学习数据结构。希望大家有所收获,感谢!

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1章绪论...........................................................................................................................1 1.1 数据结构...................................................................................................................1 1.1.1 学习数据结构的必要性...................................................................................1 1.1.2 基本概念和术语...............................................................................................1 1.2 算法...........................................................................................................................4 1.2.1算法的特性............................................................................................................4 1.2.2算法的评价标准....................................................................................................5 1.2.3算法的时间复杂度................................................................................................6 1.3 数学预备知识...........................................................................................................7 1.3.1 集合...................................................................................................................7 1.3.2 常用的数学术语...............................................................................................8 1.3.3 对数...................................................................................................................8 1.3.4 递归...................................................................................................................9 1.4 C#预备知识.............................................................................................................10 1.4.1 接口.................................................................................................................10 1.4.2 泛型编程.........................................................................................................13 本章小结................................................................................................................................20 习题一....................................................................................................................................20 第2章线性表.....................................................................................................................22 2.1 线性表的逻辑结构.........................................................................................................22 2.1.1 线性表的定义.....................................................................................................22 2.1.2 线性表的基本操作.............................................................................................22 2.2 顺序表.............................................................................................................................24 2.2.1 顺序表的定义.....................................................................................................24 2.2.2 顺序表的基本操作实现.....................................................................................29 2.2.3 顺序表应用举例.................................................................................................35 2.3 单链表.............................................................................................................................38 2.3.1 单链表的定义.....................................................................................................39 2.3.2 单链表的基本操作实现.....................................................................................46 2.3.3 单链表应用举例.................................................................................................56 2.4 其他链表.........................................................................................................................61 2.4.1 双向链表.............................................................................................................61 2.4.2循环链表..............................................................................................................64 2.5 C#中的线性表.................................................................................................................64 本章小结................................................................................................................................67 习题二....................................................................................................................................67 第3章栈和队列.................................................................................................................69 3.1 栈....................................................................................................................................69 3.1.1 栈的定义及基本运算.........................................................................................69 3.1.2 栈的存储和运算实现.........................................................................................70 3.1.3 栈的应用举例.....................................................................................................82 3.1.4 C#中的栈.............................................................................................................87 3.2 队列................................................................................................................................87 3.2.1队列的定义及基本运算......................................................................................87 数据结构C#语言版) 目录 II 3.2.2 队列的存储和运算实现.....................................................................................89 3.2.3 队列的应用举例...............................................................................................103 3.2.4 C# 中的队列.....................................................................................................104 本章小结...............................................................................................................................105 习题三..................................................................................................................................105 第4章串和数组...............................................................................................................106 4.1 串..................................................................................................................................106 4.1.1 串的基本概念...................................................................................................106 4.1.2 串的存储及类定义...........................................................................................106 4.1.3 串的基本操作的实现.......................................................................................111 4.1.4 C#中的串...........................................................................................................115 4.2 数组...............................................................................................................................117 4.2.1 数组的逻辑结构...............................................................................................117 4.2.2 数组的内存映象...............................................................................................118 4.2.3 C#中的数组.......................................................................................................119 本章小结...............................................................................................................................121 习题四..................................................................................................................................121 第5章树和二叉树...........................................................................................................123 5.1 树..................................................................................................................................123 5.1.1 树的定义...........................................................................................................123 5.1.2 树的相关术语...................................................................................................124 5.1.3 树的逻辑表示...................................................................................................125 5.1.4 树的基本操作...................................................................................................126 5.2 二叉树...........................................................................................................................126 5.2.1 二叉树的定义...................................................................................................127 5.2.2 二叉树的性质...................................................................................................128 5.2.3 二叉树的存储结构...........................................................................................129 5.2.4二叉链表存储结构的类实现............................................................................132 5.2.5 二叉树的遍历...................................................................................................137 5.3 树与森林.......................................................................................................................141 5.3.2 树、森林与二叉树的转换...............................................................................144 5.3.3 树和森林的遍历...............................................................................................147 5.4哈夫曼树........................................................................................................................147 5.4.1哈夫曼树的基本概念........................................................................................147 5.4.2哈夫曼树类的实现............................................................................................149 5.4.3哈夫曼编码........................................................................................................153 5.5 应用举例...............................................................................................................154 5.6 C#中的树...............................................................................................................157 本章小结...............................................................................................................................158 习题五..................................................................................................................................159 第6章图...........................................................................................................................161 6.1 图的基本概念................................................................................................................161 6.1.1 图的定义.............................................................................................................161 6.1.2 图的基本术语...................................................................................................161 数据结构C#语言版) 目录 III 6.1.3 图的基本操作...................................................................................................165 6.2 图的存储结构...............................................................................................................166 6.2.1邻接矩阵............................................................................................................167 6.2.2 邻接表...............................................................................................................172 6.3 图的遍历.......................................................................................................................185 6.3.1 深度优先遍历...................................................................................................185 6.3.2 广度优先遍历...................................................................................................188 6.4 图的应用.......................................................................................................................189 6.4.1 最小生成树.......................................................................................................189 6.4.2 最短路径...........................................................................................................199 6.4.3 拓扑排序...........................................................................................................207 本章小结...............................................................................................................................210 习题六..................................................................................................................................210 第7章排序.......................................................................................................................213 7.1 基本概念.......................................................................................................................213 7.2 简单排序方法...............................................................................................................214 7.2.1 直接插入排序...................................................................................................214 7.2.2 冒泡排序...........................................................................................................216 7.2.3 简单选择排序...................................................................................................217 7.3 快速排序.......................................................................................................................219 7.4 堆排序...........................................................................................................................222 7.5 归并排序.......................................................................................................................230 7.6 基数排序.......................................................................................................................232 7.6.1 多关键码排序...................................................................................................232 7.6.2 链式基数排序...................................................................................................233 7.7 各种排序方法的比较与讨论.......................................................................................235 7.8 C#中排序方法...............................................................................................................235 本章小结...............................................................................................................................236 习题七..................................................................................................................................236 第8章查找.......................................................................................................................238 8.1 基本概念和术语............................................................................................................238 8.2 静态查找表...................................................................................................................238 8.2.1 顺序查找...........................................................................................................238 8.2.2 有序表的折半查找...........................................................................................239 8.2.3 索引查找...........................................................................................................242 8.3 动态查找表...................................................................................................................243 8.4 哈希表...........................................................................................................................252 8.4.1 哈希表的基本概念...........................................................................................252 8.4.2 常用的哈希函数构造方法...............................................................................253 8.4.3 处理冲突的方法...............................................................................................254 8.5 C#中的查找方法...........................................................................................................256 本章小结...............................................................................................................................256 习题八..................................................................................................................................256 参考文献......................................................................................................................................25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值