标题“4.串和数组.ppt”探讨了两种基本的数据结构——串(字符串)和数组。在编程领域,这两种结构非常关键,因为它们是构建复杂应用程序的基础。
串,或者称作字符串,在计算机科学中,是一个由n(n>=0)个字符组成的有限序列。在描述中,它被定义为S="c1c2...cn",其中S是串名,双引号作为定界符,ci是串中的字符,n是串的长度。空串是指长度为0的串。子串是指串中任意个连续字符组成的序列,而包含子串的串则称为主串。两个串相等的条件是它们的长度相同且对应位置的字符也相同。在C#中,字符串的比较不仅考虑字符内容,还会考虑语言文化信息。
在C#中,字符串是不可变的,这意味着一旦创建,就不能改变其长度或内容。因此,我们通常不使用链式存储,而是使用数组来存储字符串。这里定义了一个名为StringDS的类,它包含一个字符数组data来存储字符序列,并提供了一些基本的字符串操作方法,如获取长度、比较字符串、截取子串、连接字符串、插入字符串、删除字符串以及查找字符串的位置。
方法包括:
1. 索引器:通过索引访问字符串中的单个字符。
2. GetLength():返回字符串的长度。
3. Compare(StringDS s):比较两个StringDS对象,返回整数值表示比较结果。
4. SubString(int index, int len):返回从指定索引开始的长度为len的子串。
5. Concat(StringDS s):连接两个StringDS对象,生成新的StringDS对象。
6. Insert(int index, StringDS s):在指定索引处插入另一个字符串,返回新字符串。
7. Delete(int index, int len):删除从指定索引开始的长度为len的子串,返回剩余部分的字符串。
8. Index(StringDS s):查找子串在主串中的位置。
C#中的String类是封闭的,它直接继承自object,是引用类型,存储在托管堆上。String类实现了多个接口,如IComparable、ICloneable等,以支持各种操作。由于字符串的不可变性,每次对字符串的操作都会生成新的对象。为了提高效率,C#提供了StringBuilder类,允许动态地构建和修改字符串,而不创建新对象。
数组是另一种基础数据结构,特别是在C#中,数组是一组相同类型的元素集合,可以看作是线性表的扩展。数组中的每个元素都有一个唯一的索引,可以快速访问。数组的数据元素可以是基本类型,也可以是复杂的数据结构,如其他数组。数组在内存中是连续存储的,这使得访问速度快,但是插入和删除操作相对较慢,因为可能需要移动大量元素。
串和数组是编程中的基本构建块,理解和熟练使用它们对于编写高效、可维护的代码至关重要。在C#中,字符串的处理尤其需要注意其不可变性和特殊处理机制,而数组则提供了静态大小和快速访问的数据结构。