没有合适的资源?快使用搜索试试~ 我知道了~
首页C#与数据结构教程:结合C#2.0与.NET Framework 2.0详解
C#与数据结构教程:结合C#2.0与.NET Framework 2.0详解
需积分: 46 1 下载量 51 浏览量
更新于2024-08-02
收藏 1.66MB PDF 举报
本资源是一份针对C#和数据结构的综合学习资料,旨在帮助读者理解和掌握C#编程语言的同时,熟悉数据结构的基本概念和应用。C#语言,作为微软.NET框架的核心组成部分,以其简洁、高效和面向对象的特点,正逐渐成为众多开发者的新宠,尤其在作者所在学院的专业改革中,C#被选为主要开发语言。因此,本书的独特之处在于它是国内首部结合C#和.NET Framework 2.0版本讲解数据结构的教材。 书中内容涵盖了8个章节,首先,第一章为入门篇,系统地介绍了数据结构和算法的基础概念,以及所需的数学知识和C#语言基础。从第二章到第六章,读者可以深入学习并实践常见的数据结构,如线性表、栈和队列、字符串和数组、树形结构和图结构,以及它们在.NET框架中的实现和应用。第七、八章则重点关注排序和查找算法的多种方法及其实际应用场景,同样会展示如何在.NET框架中应用这些算法。 本书的一个显著特点是紧密结合实际开发环境,所有数据结构和算法都是用C#语言编写示例,并在每个章节末尾详细讲解了在.NET框架中的相关实现。这种结合有助于读者将理论知识与实际编程实践相结合,提升编程技能。然而,由于编写时采用的是2.0版本,读者可能会注意到某些技术并非最新,但依然具有较高的学习价值,因为它反映了当时的技术趋势。 这份资料对于希望在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页未读,继续阅读
s0761
- 粉丝: 0
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Ansys Comsol实现力磁耦合仿真及其在电磁无损检测中的应用
- 西门子数控系统调试与配置实战案例教程
- ELM多输出拟合预测模型:简易Matlab实现指南
- 一维光子晶体的Comsol能带拓扑分析研究
- Borland-5技术资料压缩包分享
- Borland 6 技术资料分享包
- UE5压缩包处理技巧与D文件介绍
- 机器学习笔记:深入探讨中心极限定理
- ProE使用技巧及文件管理方法分享
- 增量式百度图片爬虫程序修复版发布
- Emlog屏蔽用户IP黑名单插件:自定义跳转与评论限制
- 安装Prometheus 2.2.1所需镜像及配置指南
- WinRARChan主题包:个性化你的压缩软件
- Neo4j关系数据映射转换测试样例集
- 安装heapster-grafana-amd64-v5-0-4所需镜像介绍
- DVB-C语言深度解析TS流
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功