C#简单数据结构

这篇博客详细介绍了C#中的数据结构,包括值类型(如int, char, float等)、引用类型(如object, dynamic, string)以及用户自定义类型。讨论了装箱、拆箱的概念,同时阐述了隐式和显式类型转换的区别,以及变量、常量的使用规则。还深入讲解了结构体的特点,与类的区别,并提供了类和结构体在不同场景下的应用建议。" 82142309,7523227,Linux中stat函数与struct stat解析,"['Linux系统', '文件操作', 'C语言编程', '系统调用', '文件属性']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、数据类型

值类型:int char float bool byte double long short uint ulong ushort decimal(128位精确的十进制值)

引用类型:不包含存储在变量中的实际数据 但它们包含对变量的引用  指向的是一个内存位  内置的引用类型:object dynamic string

 * object对象类型是C#通用类型系统中所有数据类型的终极基类 可以被分配任何其他类型的值 比如值类型 引用类型 用户自定义类型
 *     当一值转为对象类型时 被称为装箱 当一个对象类型转为值类型时 被称为拆箱
 *     object obj obj = 100
 *     dynamic类型 可以存储任何类型的值在动态数据类型变量中 这些变量的类型是在运行时发生的
 *     dynamic <variable_name> = value
 *     string 允许给变量分配任何字符串值 字符串类型是System.String类的别名 它是从对象类型派生的
 *     string类型的值可以通过两种形式进行分配 引号和@引号
 *     String str = "zhangyin@kingsoft.com"
 *     @"zhangyin@kingsoft.com"

 用户自定义类型 class interface delegate
 指针类型:指针类型变量存储另一种类型的内存地址 其指针功能与C或者C++一样

二、类型转换

* 隐式转换:以安全的方式进行的转换不会导致数据丢失 从小的整数转为大的整数型
 * 显式转换:强制类型转换 会造成数据丢失
 * C#提供了内置的类型转换方法
 * ToBoolean ToByte ToChar ToDateTime ToDecimal ToDouble ToInt16 ToInt32 ToInt64 ToString ToType

三、变量

* lvalue:表达式可以出现在赋值语句的左边或者右边
 * rvalue:表达式可以出现在赋值语句的右边 不可以出现在赋值语句的左边
 * 变量是lvalue的 可以出现在赋值语句的左边 数值是rvalue的 不能被赋值 不能出现在赋值语句的左边

四、常量

* 字符串常量 括在双引号里 或者是括在@""里 
* 字符串常量包含的的字符与字符常量相似 可以是 普通字符 转移序列 字符

五、结构体

* 结构可带有方法 字段 属性 索引 运算符方法 条件
 * 结构可定义构造函数 但不能定义析构函数 不能为结构定义默认构造函数 默认的构造函数是自动定义的 且不能被改变
 * 结构不能继承其他的类或结构
 * 结构不能作为其他结构或类的基础结构
 * 结构可实现一个或多个接口
 * 结构成员不能被指定为abstract virtual protected
 * 结构可以不适用new操作符实例化
 * 如果不使用new 只有在所有的字段都被初始化之后 字段才被赋值 对象才能使用
 * 结构体中声明的字段无法赋予初值

简单代码示例如下:

  struct Books
    {
        public string title;
        public string author;
        public string subject;
        public int book_id;
        public void SetValue(string t, string a,string s,int b)
        {
            title = t;
            author = a;
            subject = s;
            book_id = b;
        }
        public void Display()
        {
            Console.WriteLine("title:{0}", title);
            Console.WriteLine("author:{0}", author);
            Console.WriteLine("subject:{0}",subject);
            Console.WriteLine("book_id:{0}",book_id);
        }
    };

Main:
    Books book1 = new Books();
    Books book2 = new Books();
    book1.SetValue("Mr White", "NA NA", "twelve", 90120);
    book2.SetValue("Little Prince", "MA MA", "twelve", 90122);

    book1.Display();
    book2.Display();

六、类和结构的对比

 * 类是引用类型 结构是值类型
 * 类支持继承 结构不支持继承
 * 结构不能声明默认的构造函数
 * 类的对象是存储在堆空间中,结构存储在栈中 堆空间大 但访问速度慢 栈空间小 访问速度较快 
 * 当我们描述一个轻量级对象的时候 结构可提高效率 成本更低 
 * 假如我们在传值的时候希望传递的是对象的引用地址而不是对象的拷贝时 就应该使用类

类和结构体的使用场景

 * 1.当堆栈空间很有限 且有大量的逻辑对象时 创建类要比创建结构好一些
 * 2.对于点、矩形和颜色这样的轻量级对象 假如要声明一个含有许多个颜色对象的数组 则CLR需要为每个对象分配内存 在这种情况下 使用结构的成本较低
 * 3.在表现抽象和多级别的对象层次时 类是最好的选择 因为结构不支持继承

第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 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 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 参考文献......................................................................................................................................257
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值