没有合适的资源?快使用搜索试试~ 我知道了~
首页C#版数据结构教程:结合C#与.NET框架
C#版数据结构教程:结合C#与.NET框架
需积分: 50 0 下载量 16 浏览量
更新于2024-07-29
收藏 1.66MB PDF 举报
"《数据结构C#版》是一本专为C#程序员设计的实用教程,针对微软.NET平台的开发语言C#编写,填补了国内该领域以C#为载体的教材空白。作者在创作过程中面临着两大挑战:一是C#语言的快速发展,当时是以.NET Framework 2.0版本为基础,而实际市面上的数据结构教材大多使用其他编程语言;二是教学内容需紧跟技术更新,尽管C#语言的3.0版本已发布,但作者仍坚持以2.0版本为教学依据,反映了教师的责任和对新技术的热情。 本书共八章,第一章首先概述数据结构和算法的基础概念,同时涵盖了必要的数学知识和C#语言基础,确保读者具备必要的理论背景。随后的五章详细讲解了线性表、栈和队列、串和数组、树型结构和图结构等核心数据结构,强调其实用性和在.NET框架中的应用。最后两章则着重讨论排序和查找算法的多种方法及其应用,同样结合.NET框架中的实现。 《数据结构C#版》的最大特色在于将数据结构与C#语言紧密结合,利用.NET Framework的跨语言开发理念,使得读者不仅能够掌握数据结构理论,还能熟练运用到实际的.NET项目中。随着.NET可能成为未来Windows操作系统的一部分,学习和掌握C#语言下的数据结构对于开发者来说具有重要意义。因此,无论你是C#新手还是经验丰富的开发者,本书都提供了宝贵的学习资源,有助于提升编程技能和适应新的技术环境。"
资源详情
资源推荐
1.4 C#预备知识 11
须实现 IComparable 接口。由可以排序的类型,例如值类型实现以创建适合排序
等目的类型特定的比较方法。
(2) IEnumerable 接口
IEnumerable 接口公开枚举数,该枚举数支持在集合上进行简单迭代。
IEnumerable 接口可由支持迭代内容对象的类实现。
(3) IEnumerator 接口
IEnumerator 接口支持在集合上进行简单迭代。是所有枚举数的基接口。
枚举数只允许读取集合中的数据,枚举数无法用于修改基础集合。
(4) ICollection 接口
ICollection 接口定义所有集合的大小、枚举数和同步方法。ICollection
接口是 System.Collections 命名空间中类的基接口。
(5) IDictionary 接口
IDictionary 接口是基于 ICollection 接口的更专用的接口。IDictionary 实现
是键/值对的集合,如 Hashtable 类。
(6) IList 接口
IList接口实现是可被排序且可按照索引访问其成员的值的集合,如ArrayList
类。
.NET Framework 2.0 提供了泛型的接口,如 IComparable<T> 、
IEnumerable<T> 、 IEnumerator<T> 、 ICollection<T> 、 IDictionary<T> 和
IList<T>等。泛型接口的功能与非泛型接口的功能一样,只不过适用于更多的类。
关于泛型的介绍见下一小节。
说到接口,这里要提及 1.1.2 小节讲到的 4 类数据结构中的集合。从集合的
定义中,我们知道,集合中的数据元素除了有“同属于一个集合”的关系外,没
有任何其它的关系。.NET 框架中的集合概念和数据结构中的集合概念不尽相
同。.NET 框架中集合(Collection)定义如下:
从.NET 的角度看,所谓的集合可以定义为一种对象,这种对象提供了一种
结构化组织任意对象的方式,并且实现一个或者多个 ICollection、IDictionary
和 System.Collections.IList 接口。这一定义把 System.Collections 名称空间
中的“内置”集合划分成了三种类别:
(1) 有序集合:仅仅实现 ICollection 接口的集合,在通常情况下,其数据项的
插入顺序 控制着从 集合中取 出 对象的顺 序。System.Collections.Stack 和
System.Collections.Queue 类都是 ICollection 集合的典型例子。关于 Stack
和 Queue 将在第三章详细介绍。
(2) 索引集合:实现 Ilist 的集合,其内容能经由从零开始的数字检索取出,就
象数组一样。System.Collections.ArrayList 类是索引集合的一个例子。关于
ArrayList 将在第二章详细介绍。
(3) 键式集合:实现 IDictionary 接口的集合,其中包含了能被某些类型的键值
检索的项。IDictionary 集合的内容通常按键值方式存储,可以用枚举的方式排
序检索。System.Collections.Hashtable 类实现了 IDictionary 接口。关于将
Hashtable 在第八章详细介绍。
给定集合的功能在很大程度上受到特定接口或其实现接口的控制。如果对面
向对象编程缺乏了解,那么可能对上面说的这些话感到难以理解。不过,至少应
该知道,用接口构造的对象不但具有整套类似方法的对象族,而且这些对象在必
要的情况下可以被当作同类,这就是多态性(Polymorphism)。
数据结构(C#语言版)
1.4 C#预备知识 12
同样,在.NET Framework 2.0 的 System.Collections.Generic 名称空间中
提供了泛型的集合类。泛型集合类的功能与非泛型集合类的功能一样,只不过适
用于更多的类。关于泛型的介绍见下一小节。
2、接口与抽象类
抽象类(Abstract Class)和接口在定义与功能上有很多相似的地方,在程序
中选择使用抽象类还是接口需要比较抽象类和接口之间的具体差别。
抽象类是一种不能实例化而必须从中继承的类,抽象类可以提供实现,也可
以不提供实现。子类只能从一个抽象类继承。抽象类应主要用于关系密切的对象。
如果要设计大的功能单元或创建组件的多个版本,则使用抽象类。
接口是完全抽象的成员集合,不提供实现。类或者结构可以继承多个接口。
接口最适合为不相关的类提供通用功能。如果要设计小而简练的功能块,则使用
接口。接口一旦创建就不能更改,如果需要接口的新版本,必须创建一个全新的
接口。
3、接口的实现
接口的实现分为隐式实现(Implicit Implementation) 和 显 式 实 现
(Explicit Implementaton)。如果类或者结构要实现的是单个接口,可以使用隐
式实现,如果类或者结构继承了多个接口,那么接口中相同名称成员就要显式实
现。显式实现是通过使用接口的完全限定名来实现接口成员的。
接口及该接口的 C#实现如下:
using System;
using System.Collections;
public interface IBook {
void ShowBook();
string GetTitle();
int GetPages();
void SetPages(int pages);
}
public class NewBook : IBook
{
public string title;
public int pages;
public string author;
public NewBook(string title, string author, int pages)
{
this.title = title;
this.author = author;
this.pages = pages;
}
public string GetTitle()
{
数据结构(C#语言版)
1.4 C#预备知识 13
return title;
}
public int GetPages()
{
return pages;
}
public void SetPages(int pages)
{
this.pages = pages;
}
public void ShowBook()
{
Console.WriteLine(“Title:{0}”, title);
Console.WriteLine(“Author:{0}”, author);
Console.WriteLine(“Pages:{0}”, pages);
}
}
public class App
{
static void Main()
{
NewBook MyNovel = new NewBook(“China Dream”,
“Robert”,500);
MyNovel.ShowBook();
}
}
1.4.2 泛型编程
泛型(Generic Type)是.NET Framework 2.0 最强大的功能。泛型的主要思想就
是将算法与数据结构完全分离开来,使得一次定义的算法能够作用于多种数据结
构,从而实现高度可重用的开发。通过泛型可以定义类型安全的数据结构,而没
有必要使用实际的数据类型。这将显著提高性能并得到更高质量的代码,因为可
以重用数据处理算法,而没有必要复制类型特定的代码。
1、泛型问题陈述
在开发通用容器时,需要通用容器能存储各种类型的实例。在.NET
Framework 1.1 下,必须使用基于 object 的容器。这意味着,在该容器中使用的
数据类型是难以归类的 object,并且容器方法与 object 交互。
基于 object 的容器的 C#实现如下:
public class Container
{
readonly int m_Size; //容器的容量
数据结构(C#语言版)
1.4 C#预备知识 14
int m_ContainerPointer ; //容器指针,指示最后一个元素的位置
object[] m_Items; //容器数组,存放数据
//无参构造器
public Container () : this(100)
{
m_ContainerPointer = -1;
m_Size = 100;
}
//有参构造器
public Container (int size)
{
m_Size = size;
m_Items = new object[m_Size];
m_ContainerPointer = -1;
}
//获取容器元素个数属性
public int Count
{
get
{
return m_ContainerPointer;
}
}
//容器是否为空
public bool IsEmpty
{
get
{
return (m_ContainerPointer == -1);
}
}
//容器是否已满
public bool IsFull
{
get
{
return (m_ContainerPointer == m_Size - 1);
}
}
数据结构(C#语言版)
1.4 C#预备知识 15
//在容器的尾部插入一个元素
public void Insert(object item)
{
if (IsFull)
{
Console.WriteLine("Container is full!");
return;
}
else if (IsEmpty)
{
m_Items[++m_ContainerPointer] = item;
}
else
{
m_Items[++m_ContainerPointer] = item;
}
}
//从容器的尾部删除一个元素
public object Delete()
{
if (m_ContainerPointer >= 0)
{
return m_Items[m_ContainerPointer--];
}
return null;
}
}
但是,基于 object 的容器存在以下问题。
(1) 性能问题。在使用值类型时,必须将值类型装箱(Boxing)以便推送和存
储,并且在将值类型从容器中取出时将其取消装箱(Unboxing)。装箱和取消装箱
都会根据值类型的权限造成重大的性能损失。而且,装箱和取消装箱操作还会增
加托管堆上的压力,导致更多的垃圾收集工作,这对于性能而言也不好。即使是
在使用引用类型而不是值类型时,仍然存在性能损失,因为必须强制地将 object
转换为需要的实际类型进行类型,造成强制类型转换开销,代码如下:
Container c = new Container();
c.Insert("1");
string number = (string)c.Delete();
(2) 类型安全。类型转换难以保证每次转换都是成功的,这将导致某些错误
在编译时无法被检查出来,而在运行时发生异常。因为编译器允许在任何类型和
object 之间进行强制类型转换,所以将丢失编译时类型安全。例如,以下代码可
以正确编译,但是在运行时将引发无效强制类型转换的异常。
Container c = new Container();
数据结构(C#语言版)
剩余261页未读,继续阅读
devin139
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 构建Cadence PSpice仿真模型库教程
- VMware 10.0安装指南:步骤详解与网络、文件共享解决方案
- 中国互联网20周年必读:影响行业的100本经典书籍
- SQL Server 2000 Analysis Services的经典MDX查询示例
- VC6.0 MFC操作Excel教程:亲测Win7下的应用与保存技巧
- 使用Python NetworkX处理网络图
- 科技驱动:计算机控制技术的革新与应用
- MF-1型机器人硬件与robobasic编程详解
- ADC性能指标解析:超越位数、SNR和谐波
- 通用示波器改造为逻辑分析仪:0-1字符显示与电路设计
- C++实现TCP控制台客户端
- SOA架构下ESB在卷烟厂的信息整合与决策支持
- 三维人脸识别:技术进展与应用解析
- 单张人脸图像的眼镜边框自动去除方法
- C语言绘制图形:余弦曲线与正弦函数示例
- Matlab 文件操作入门:fopen、fclose、fprintf、fscanf 等函数使用详解
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功