本篇博客的案例参考自一本书
每个案例我都会去敲一遍确保案例可行性,一来可以巩固自己C#基础,二来方便以后查阅

<>C#的300个案例

<>第一章:开发环境

* 实例001 创建最基本的控制台应用程序

2. 实例002 创建Windows窗体应用程序

双击这个窗口可以显示出窗口代码

3.实例003 创建DLL动态链接库
(Dynamic LinkLibrary

意为动态链接库。动态链接库其实是由编译器将一系列相关的类型编译、链接并封装成一个独立的文件,与对其进行调用的程序分开。这样一个独立的文件相当于程序的一个模块,如果需要对程序进行更新,只需更新指定的模块而不影响程序的其他部分)

创建好后写完代码记得编译一下才会生成。dll库文件

然后在窗口应用那里添加生成的类库

如果需要使用Forms 则必须项目中有引用System.Windows.Forms

像作为dll 的代码块如果修改了一定要重新生成一个dll 文件

<>第二章:语法基础

4.实例004 从控制台输出整数类型——整数类型
新建一个控制台程序

字符型表示的是一个Unicode字符,一般Unicode字符编码用\u作为前缀,后面跟十六进制数,如表2-1中的\uffff。

实例代码中还用到了Console类中WriteLine方法的另一种用法——输入字符串,第一个参数输入的是一个格式化字符串,第二个参数是要输出的对象,其中“{0}”表示第二个参数转换成字符串后放入的位置

5.实例005 从控制台输出浮点类型——浮点类型


为float类型赋值时,小数末尾要加上f或F,在默认状态下,小数为双精度类型,也可以在小数末尾加上d或D表示双精度类型,而高精度类型末尾用m或M作为后缀。高精度类型适用于对精度要求比较高的数据,例如,用于货币计算。

实例006 判断矩形是否为正方形——结构体和布尔型

可以在结构体中声明构造函数、常数、变量、属性、方法、索引以及嵌套类型
结构体主要用于创建小型对象,因为在C#中值类型是存储在线程堆栈中的,而线程堆栈的默认大小是1MB

实例007 利用枚举型描述动物类型——枚举类型

创建了不赋值默认为0

实例代码中,在类型名称后面加了“:byte”表示枚举类型的元素类型是无符号字节型,当然还可以是整数类型中的其他几种类型。
实例008 修改圆柱体的高度和底面半径——引用类型

在C#中所有的引用类型均继承自object类型。有关类的具体用法,将在后面的章节中讲解。

下面分析一下引用类型和值类型在内存中的分配。系统为C#程序在内存中分配了堆栈(stack)和托管堆(heap),堆栈用来存储值类型,而托管堆用来存储引用类型,该托管堆由垃圾收集器(Garbage
Collector,GC)进行自动管理。

当创建一个值类型时,系统会直接在堆栈上为该值类型分配空间,而创建一个引用类型时,系统先在堆栈上为该引用分配内存,这个内存表示的是一个内存地址,然后在托管堆上为该引用对象的实例分配内存,将引用地址指向托管堆上分配的内存地址,这种分配方式不会受堆栈大小的限制(线程堆栈的默认大小是1MB),那么在引用传递的时候,其实是将堆栈中引用的地址传递给了另外一个引用,它们都指向托管堆中的同一个对象。引用对象的建立过程比较复杂,因此,性能也有所降低。值类型在其生命周期结束时,系统会自动将其从堆栈中删除,而引用对象会长时间保留在托管堆中,直到该引用对象不被任何一个变量所引用,垃圾收集器会在适当的时候将其回收。当然,用户可以调用
GC类的Collect方法对托管堆内存进行强制回收

实例009 计算圆形的面积——常量

本实例主要介绍C#中常量的用法,常量存放在程序中,不会发生数据的改变。如果在程序中对常量进行修改,则会出现编译错误

声明常量时在其数据类型前面加上 const
关键字,声明时必须对常量进行赋值,编译器在编译时将使用常量的地方直接用其值进行替换。声明只读字段时使用readonly关键字,只读字段在声明时或构造时进行赋值,值一旦确定,在程序中将无法对其进行修改。只读字段并不会像常量那样在编译时直接用其值将其代替,而是在程序运行时为其赋值。
根据常量和只读字段的不同特点,在使用时也应该注意,像圆周率这样永恒不变的量适合使用常量,而像半径这样不是恒定不变,但在其使用过程中值不变的数据可以使用只读字段

实例010 计算矩形的面积——变量

Area直接计算矩形面积,并不会检测计算出的面积是否发生数据溢出,此时用户输入的宽度和高度过大,导致计算出来的矩形面积超过了
int型的最大值,所以得出了错误的结果
TryArea 方法中在计算矩形面积时使用了 checked 关键字,该关键字用于检测运行时变量数据溢出,如果发生溢出程序,则会抛出异常

实例中还用到了Console的ReadLine方法,用于从控制台中读入一行字符串数据。实例中使用int类型提供的Parse方法将字符串转换成int类型,如果字符串表示的并不是int型变量,则会引发运行时异常。其实C#提供的整数类型和浮点类型都提供了Parse方法来将字符串转换成对应的类型。
还有一个与Parse方法功能类似的TryParse方法,该方法同样可以将指定类型的字符串转换成该类型,但不同的是,TryParse 在转换成功时返回
true,转换不成功时返回flase,并不会抛出异常导致程序中断。

实例011 实现简单计算器——算术运算符

“&=”、“|=”和“^=”运算符可以是逻辑的,也可以是条件的,如果 a和b的类型为整型,则表示按位逻辑运算,如果a和b是布尔类型,则为条件运算。

实例012 输出两个数之间的关系——关系运算符

关系运算用来比较两个数值类型或枚举类型的操作数数值之间的关系。“==”和“!=”对于引用类型来说,除 string
类型以外,这两个运算符用来判断两个操作数是否引用同一个对象。
关系运算返回的是一个布尔类型值,例如,对于a>b 这个表达式来说,如果 a 为
100,b为200,则该表达式返回的是false;如果a为200,b为100,则a>b返回的是true。

实例013 按字节提取整型数值——按位运算符

本实例主要介绍按位运算符和移位运算符的用法。实例从控制台输入一个十进制整数,然后将其转换成十六进制数并从控制台输出,接着提取该整数的每一字节所表示的十六进制数值,最后从控制台逐一输出。

实例代码中首先从控制台输入一个十进制整数Number,然后将其按十六进制的形式输出,接着提取Number的4字节。实例代码中用到了按位与运算符“&”和右移位运算符“>>”。当一个整型数值与十六进制数0xFF进行按位与运算时,剩下的就是第一字节,其中0xFF表示的是十六进制数FF,“0x”是十六进制数的前缀。因为每字节有8个二进制位,提取第二字节时利用右移位运算符“>>”将Number右移8位,高位用0或1填充,低位自动丢失,此时第二字节移到了第一字节的位置,再将其与0xFF进制进行按位与运算,这样就提取了第二字节,同理,可提取第三和第四字节。常用的按位运算符按位与运算符“&”、按位或运算符“|”和按位异或运算符“^”。注意:这三个运算符对于整数类型来说,是按位运算符;对于布尔类型来说,就是逻辑运算符。常用的移位运算符有左移位运算符“<<”和右移位运算符“>>”。注意:当进行左移位时,高位自动丢失,低位用零填充;进行右移位时,低位自动丢失,正数高位用0填充,负数高位用1填充。

实例014 对学生成绩进行分类——条件运算符

常用的条件运算符有条件与运算符“&&”和条件或运算符“||”,条件运算符主要用来执行两个布尔型操作数的逻辑运算。
此处的“&&”可以用“&”代替,“||”可用“|”来代替,但有些特殊情况下替换会出现异常,所以,为了明确表示布尔型操作数的关系,最好使用“&&”和“||”

“&&”和“||”还可以认为是短路运算符,例如“a&&b”,如果a为false,则b不会参与运算;再如“a||b”,如果a为true,则b同样不会参与运算。如果使用“&”和“|”进行逻辑运算,则不会出现上述短路情况。由此可以看出,“&”和“|”其实还是将
true 当做 1,而 false当做0进行按位运算。

实例015 求三个数中的最大值——三元运算符

三元运算符“?:”也可称为条件运算符,其语法如下:

表达式一和表达式二返回值的类型必须一致;条件运算符是右结合的运算符,

实例016 将两个数的值交换——函数的使用及引用传递

参数前面的ref
关键字表示该参数为值类型的引用传递。所谓引用传递,即将数值本身传递到函数体内,在函数中对该参数的修改会造成对数值本身的修改。如果函数的参数是引用传递,在调用该函数时,必须在参数前加上ref关键字。
ref 参数必须先初始化

实例017 求解正整数的阶乘——函数的递归调用及值传递

函数的递归调用即为函数对其自身进行调用
对于函数参数中值类型的参数,如果不加ref关键字,则为值传递

实例中求解n的阶乘的算法思想为:如果n为1,则n的阶乘也为1,Factorial函数返回值为1;如果n大于1,则n的阶乘可以转化为求解n乘以n−1的阶乘,Factorial函数的返回值为n*Factorial(n−1)。

实例018 求解多个数的乘法运算——函数参数输出

参数前面的out关键字表示该参数为引用传递
此处的out关键字与前面的ref关键略有不同,out关键字修饰的参数在传递时是不需要初始化的。
GetMultResult函数的第二个函数为一个整型数组numbers,该数组中用于存储需要计算乘积的整数,numbers前面加入了params关键字,
表示在调用函数时可以直接输入可变数量的参数
。例如,实例代码中在调用GetMultResult函数时,并没有传递一个整型数组,而是直接传入三个整数,系统此时会自动将这三个整数作为函数中numbers的三个元素。这样就可以实现参数的动态变化
用params关键字修饰函数参数时,只能存在一个且必须放在最后。

<>第三章:程序流程

实例019 模拟超市商品打折——if条件判断语句

实例020 判断字符串各字符类型——if-else条件判断语句

根据字符所属的ASCII码范围来确定字符的类型。

实例021 将三个数从小到大输出——if-else嵌套使用

实例022 输出酒店指定星期特价菜——switch选择语句

(1)switch后面的“表达式”和case后面的“常量表达式”必须是整数类型、布尔类型、字符类型、字符串类型、枚举类型或相应的可以为null的类型。
(2)所有的“常量表达式”的值不能有重复。
(3)如果case后面存在“语句块”,则必须存在跳出switch语句的break、goto、return或throw关键字。

实例023 判断1到10之间的素数和合数——多个case语句

实例024 输出1到20之间的整数——while循环语句


实例中还用到了break关键字,该关键字可以在任何时候终止循环。其实还可以使用return、goto或者throw关键字来使程序跳出循环。实例代码中不但用到了自增运算符,还用到了自减运算符,这两类运算符分别有“i++、++i”和“i−−、−−i”这四种表现形式,其中i可以是整数类型,也可以是浮点类型,“i++”和“i−−”表示i先参与表达式运算,然后自增1或自减1,而“++i”和“–i”则表示i先自增1或自减1之后再参与表达式的运算。实例代码中的“++i”表示i自增1后与20进行比较,如果i自增1后大于20,则跳出循环体。
实例025 输出1到20之间的偶数——do-while循环语句


do-while语句与while循环语句的区别在于do-while循环一定会先执行一次“循环语句块”,然后判断while语句后面的“布尔类型表达式”是否为true,continue关键字来跳出当前“循环语句块”。
实例026 求表达式1−2+3−4+…−100的值——for循环语句

实例027 用符号*排列成三角形——for循环嵌套调用

实例028 百钱买百鸡算法——for循环嵌套调用

算法的主要思想是通过遍历所有可能的情况来求出满足以上条件的公鸡、母鸡和小鸡的数量。实例代码中第一层 for
循环用来遍历公鸡的数量,第二层循环用来遍历小鸡的数量,其中小鸡的数量每次递增三个。母鸡的数量用100减去公鸡和小鸡的数量来求得,并且还要判断母鸡的数量是否在0到33之间。当遍历完所有的情况后,就可以求出问题的解了。这其实就是
穷举法的思想
实例029 输出字符串中的每个字符——foreach循环语句

在 foreach 循环语句中,“集合变量”必须是实现 System.Collections.IEnumerable
或System.Collections.Generic.IEnumerable接口的类型。接口的相关知识会在后面的章节中讲解,此处的讲解请读者结合后面章节的知识来理解。“集合元素类型”为接口
IEnumerable
的GetEnumerator方法所返回的IEnumerator接口的Current属性所返回的类型。实例代码中,string类型的GetEnumerator方法返回的是CharEnumerator类型,该类型的Current属性所返回的是char类型。“集合元素变量名”表示的是集合中的当前元素,循环体会逐一访问集合中的元素并执行“循环语句块”。
注意:在“循环语句块”中绝对不能对集合元素进行赋值。如果需要对集合元素进行修改,则只能使用for循环语句。

实例030 输入数据不规范时捕获异常——异常处理语句


实例代码主要利用try-catch-finally语句来捕获自身抛出的异常和系统抛出的异常。在程序中抛出异常需要用到关键字throw,后面必须是一个继承System.Exception类的对象,系统已经提供了一些常用的异常类型,例如,实例代码中用到的ArgumentOutOfRangeException
类就是用来表示数据不在指定范围内。

说明:**从语法结构中可以看出,try语句后面的“抛出异常语句块”主要是产生异常的部分,因为异常可能有很多种,所以下面有n个catch语句用来获取不同类型的异常。由catch中的“异常处理语句块”来对异常进行处理,如果无法处理该异常,也可以在该语句块中将异常再次抛出。**
finally语句后面的“资源释放语句块”是程序必然会执行的部分
,主要是因为抛出异常会导致“抛出异常语句块”从抛出异常处终止执行,为了有效地回收资源,这里就需要用到finally来对未释放的资源进行处理。try-catch-finally语句还有其他两种形式:try-catch和try-finally,这里不再详细介绍了。

<>第四章:数组与集合

实例031 存储多个学生姓名——一维数组

花括号内的数据为数组元素的初始化操作,如果不需要初始化,该操作可以省略。
所有的数组类型都是从Object.Array类型派生而来的
,该类型提供了Length属性来获取数组的长度。从实例代码中可以看出,用foreach循环语句可以遍历一维数组中的成员。

实例032 生成学生成绩单——创建二维数组

可以通过 GetLength 方法来获取二维数组的行数和列数,当传入参数为 0时,获取的是行数,当传入参数为1时,获取的是列数。

实例033 求学生总成绩——读取二维数组

实例034 计算两个矩阵乘法——二维数组运算

矩阵乘法的计算规则为矩阵A的第r行的i个元素与矩阵B的第c列的i个元素对应相乘,然后将i个元素乘积相加作为乘积矩阵的第r行c列的元素值。
技巧:根据二维数组的特征,很容易理解多维数组的创建及其元素的读写。例如,创建一个三维数组及其元素的读写,

实例035 按月存储日期——交错数组
using System; namespace CSharp300Demo_035 { class Program { static void
Main(string[] args) { Console.WriteLine("Hello World!");
Console.WriteLine("请输入年份: "); int year = int.Parse(Console.ReadLine());
byte[][] months = new byte[12][]; for (int month = 0; month < 12; month++) { if
(month < 7) { //一月,三月,五月,七月为大月,每月有31天 if (month % 2 == 0) months[month] = new
byte[31]; else if (month == 1) { //二月闰年为29天,否则为28天 if ((year % 4 == 0 && year %
100 != 0) || (year % 400 == 0)) months[month] = new byte[29]; else
months[month] = new byte[28]; } else months[month] = new byte[30]; } else { if
(month % 2 == 0) months[month] = new byte[30]; //九月,十一月为小月,30天 else
months[month] = new byte[31]; //八月,十月,十二月为大月,每月31天 } } for (int month = 0;
month < 12; month++)//遍历月份 { Console.WriteLine("{0}月:", month + 1); for (int
day = 0; day < months[month].Length; day++) //遍历日期 { months[month][day] =
(byte)(day + 1); Console.Write("{0}日", months[month][day]); }
Console.WriteLine(); } } } }

“平年的2月有28天,而闰年的2月有29天。平年是指阳历没有闰日或农历没有闰月的年份。公元年数可被4整除为闰年,但是整百(个位和十位均为0)的年数必须是可以被400整除的才是闰年(比如1900年不是闰年),其他都是平年。例如:1997年是平年,2002年是平年;1996年是闰年,2000年是闰年。”
二维交错数组其实可以理解为一个元素类型为一维数组的一维数组。实例代码中
months相当于一个元素类型为byte[]的一维数组,months中有12个byte类型的数组
实例036 生成学生信息表——ArrayList的使用
using System.Collections
本实例主要介绍元素数量可以按需要动态变化的数组类型ArrayList。

创建了一个ArrayList类型的变量用于存放学生信息列表,该类型为大小可按需求动态增减的数组类型。通过调用该类型的 Add
方法向列表中添加元素,Remove 方法可以删除指定元素,还可以通过数组下标对元素进行访问。
ArrayList类型所存储的元素为object类型,也就是说,可以存放所有的类型,因为object是所有类型的基类

实例037 管理学生信息——List的使用
本实例介绍泛型集合类型中的一种 List类型。
using System.Collections.Generic;

List 的可以插入指定位置的方法我觉得非常好用,用好了会是一件大杀器
本实例代码首先创建了一个名为 Student 的结构体来描述学生信息,然后利用泛型集合类型List来存储Student类型变量

通过List类型的Add和Remove方法来添加和删除指定元素。实例代码中用到了List类型的RemoveAt方法来删除指定索引的元素,同时也使用了Insert方法在指定索引元素前面添加新元素。
List类型变量可以像一维数组一样通过下标来访问数组中指定的元素。

实例038 生成省市信息表——Dictionary的使用
本实例主要介绍泛型集合中的字典类型Dictionary< TKey,TValue >的使用方法
using System.Collections.Generic;

Dictionary类型的最大好处是可以通过键直接获取到值,其语法
实例039 简单的列车售票系统——二维数组的应用

实例040 模拟舞伴配对问题——Queue的使用
本实例主要讲解具体队列结构的泛型类型 Queue的使用方法。
using System.Collections.Generic;

此处为string类型。Queue类型主要是以队列的形式存储数据元素的,通过调用该类型的Enqueue方法将一个元素添加到队列的尾部,通过Dequeue方法从队列的头部取出一个元素。
队列的结构特点是先进队的元素先出队,后进队的元素后出队。因此,队列中的元素从队列尾部进入,从队列头部取出。

实例代码中按男士和女士的到场时间顺序将男士和女士添加到等待队列中。当舞曲开始时,先到的人先从等待队列中出来配对跳舞。等舞曲结束后,又将跳舞的人添加到等待队伍的末尾,
让上一轮未参数配对跳舞的人优先参加下一轮的配对

实例041 括号匹配检测——Stack的使用

<>本实例介绍具有栈结构的泛型集合类型Stack的使用方法
using System.Collections.Generic;
Stack类型是一种栈结构。通过Push方法将元素添加到栈的顶部,通过Pop方法将元素从栈的顶部取出。
栈结构的特点是先进栈的元素后出栈,后进栈的元素先出栈。因此,栈中元素的进出都发生在栈顶。

<>第五章:字符串

接下来是最好玩的字符串了
本章主要介绍字符和字符串的使用方法。字符使用Char 对象来存储,字符串使用
String对象来存储。字符串是由顺序存储的只读Char对象组成的。在C#中可以使用string关键字来等效String类型。C#中为字符类型和字符串类型提供了很多方便快捷的处理方法和多种重载运算符来简化字符串的操作。另外,还提供了正则表达式来检验字符串的正确性,以及多种格式化字符串的方法。

这两种命名方式是一样的
因为string 是关键字

实例042 分行输出字符串 System.char

本实例代码中主要介绍了 System.Char 字符类型的使用。该类型提供了很多静态方法来识别字符的类型,常用的识别函数如表5-1所示

实例中利用Char类型的IsPunctuation方法来判断古诗中的字符是否为标点符号

实例043 判断古诗默写是否正确——Equals方法
本实例代码主要利用string对象的Equals方法来比较两个字符串是否相等
判断两个字符串是否相等还可以利用“==”来判断。

实例044 将古诗颠倒输出——Reverse方法
using System.Linq;

使用string 类型变量的ToCharArry
方法将诗句转换成多个汉字字符后存放到字符数组中,再利用字符数组的Reverse方法获取一个字符数组的倒序枚举器,通过foreach可以遍历该枚举器,获取的汉字字符便是诗句的倒序排列。

实例045 提取古诗中的关键词语——Substring方法
本实例主要介绍从字符串的指定位置提取指定长度字符串的方法。

第一个参数表示所要提取的字符串起始位置,该位置从0开始,第二个参数表示需要提取的字符的长度。
实例046 将数字按指定格式输出——格式化字符串
本实例代码主要使用格式化字符串将数值转换成指定格式化的字符串,然后从控制台输出。实例代码中用到了WriteLine方法的一种重载形式:

其中,format 表示复合格式字符串,arg表示format 中写入的对象数组
format中的“{0}”为索引占位符,format由多个字符串和索引占位符混合而成,其中的索引占位符称为格式项。格式项的语法格式如下:
其中,方括号中的
元素为可选项。index为对象在arg中的索引;“,length”为对象格式化为字符串后的最小长度,值为正表示右对齐,为负表示左对齐;“:formatString”为格式字符串,与该对象的ToString(format)方法支持的值相同。

实例047 将日期按指定格式输出——格式化日期

实例048 将古诗按标点分割成句——Split方法

由于古诗的最后一个句号会分割出一个空白字符串,所以还要将Split方法的第二个参数赋值为StringSplitOptions.RemoveEmptyEntries
,表示移除分割后的空白字符串。
如果不需要移除空白字符串,Split方法可以直接传入分隔符作为参数,代码如下

实例049 古诗填空——Insert方法

本实例代码主要利用了 string 对象的 Insert 方法,该方法用于在字符串的指定位置插入字符。Insert
方法的第一个参数为需要插入的字符串在原字符串中插入的位置,该参数取值从 0开始,0
表示原字符串的头部,最大值为原字符串长度,表示原字符串的尾部。第二个参数为需要插入的字符串。

实例050 修改错误的古诗——Remove Replace方法

Remove
方法来删除古诗中指定位置和指定长度的词语。Remove方法需要传入两个参数,第一个参数为需要删除的字符串的起始位置,第二个参数为需要删除的字符串的长度。实例代码中还用到
string 对象的 Replace
方法来将古诗中错误的诗词替换为正确的诗词。该方法需要传入两个字符串作为参数,第一个字符串为待替换的字符串,第二个字符串为替换后的字符串
如果需要删除某个字符串,可以使用Replace 方法,将其第一个参数传入需要删除的字符串,第二个参数输入string.Empty即可。

实例051 拼接错乱的古诗句——StringBuilder的使用
本实例主要介绍多个字符串的拼接方法
首先第一步
可以调用StringBuilder对象的Append方法将需要拼接的字符串先存储起来,在需要使用拼接好的字符串时,调用ToString方法直接获取拼接好的字符串,这样在需要对大量的字符串进行拼接时,大大提高了程序效率**由于String类型中所存放的是只读的Char数组,因此,在使用“+”对字符串进行拼接时,系统会在内存中重新分配内存来存放拼接后的字符串,这样在时间和空间上都会造成很大的浪费。

实例052 验证IP地址字符串格式——Regex正则表达式

本实例代码主要先引入using System.Text.RegularExpressions
使用了Regex类,该类主要用于加载正则表达式。实例代码中创建了一个检验IP地址的正则表达式对象。IP地址是用点分十进制来表示的,其长度为32位,分为4段,每段为8位,取值范围均为0到255,每段之间用"
."隔开,例如:192.168.1.1。
(1)验证0到9和10到99,使用正则表达式:[1-9]?\d。(2)验证100到199,使用正则表达式:1\d{2}。
(3)验证200到249,使用正则表达式:2[0-4][0-9]。(4)验证250到255,使用正则表达式:2[5][0-5]。

实例053 使用string 中的Contains 方法


这个没啥好说的,简单易懂,与Contains方法用法相近的还有两个方法StartsWith和EndsWith,其中StartsWith用于判断字符串是否以指定字符串开头,而EndsWith方法用于判断字符串是否以指定字符串结尾。

实例054 对古诗进行Base64编码

本实例主要介绍对字符串进行 Base64 编码的方法。Base64
编码是常用的传输字节的一种编码方式,在HTTP环境下可以传递较长的标识信息,由于Base64编码不具备可读性,于是可以用于简单的加密处理


实例代码用到了Encoding类,该类可以将字符串按指定编码转换成字节数组,或将字节数组转换成字符串。实例代码中利用Encoding类按系统默认编码方式将古诗转换成字节数组,再利用Convert类的ToBase64String方法,将字节数组转换成Base64编码。如果需要将
Base64 编码还原成字节数组,还可以使用 Convert 类的FromBase64String方法。

<>第六章:数据结构与算法

实例55 将信息表顺序倒置----顺序线性表

本例主要介绍顺序线性表的使用方法。线性表是最常用的数据结构,线性表中的数据元素之间是一对一的线性关系。顺序线性表就是将数据顺序地存储到内存中,顺序表的最大特点是逻辑上相邻的两个数据元素在内存中的存储位置也是相邻的。数组就是最典型的顺序线性表。

上面的是最简单的顺性线性表 ——数组
顺序表的特点是可以根据索引方便地访问其中的元素,并对元素进行操作。但顺序表也有缺点,由于顺序表中在逻辑上相邻的元素在内存地址上也是相邻的,所以在顺序表中插入或删除元素时需要对顺序表中大量的元素进行移动,这样就大大影响了顺序表的效果。

实例56 将两组链表数据组合----单链表

x

技术
今日推荐
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:766591547
关注微信