目录

  • 1. 数据结构
    • 1.1 什么是数据结构
    • 1.2 数据的逻辑结构
      • 1.2.1 集合
      • 1.2.2 线性结构
      • 1.2.3 树状结构
      • 1.2.4 图状结构
    • 1.3 数据的存储结构
      • 1.3.1 顺序存储
      • 1.3.2 链式存储
      • 1.3.3 索引存储
      • 1.3.4 散列存储
    • 1.4 数据的运算
  • 2. 线性表
    • 2.1 线性表定义
    • 2.2 线性表基本操作
    • 2.3 线性表的存储结构
  • 3. 栈和队列
  • 4. 例子

1. 数据结构

1.1 什么是数据结构

  • 一个数据结构是由数据元素依据某种逻辑联系组织起来的。对数据元素间逻辑关系的描述称为数据的逻辑结构;数据必须在计算机内存储,数据的存储结构是数据结构的实现形式,是其在计算机内的表示。

1.2 数据的逻辑结构

1.2.1 集合

  • 数据元素之间的关系只有”是否属于同一集合“。

1.2.2 线性结构

  • 数据元素之间存在线性关系,即最多只有一个前导和后继元素。

1.2.3 树状结构

  • 数据元素之间存在层次关系,即最多有一个前导和多个后继元素。

1.2.4 图状结构

  • 数据之间的关系为多对多的关系

1.3 数据的存储结构

1.3.1 顺序存储

  • 顺序存储结构就是把元素按某种顺序放在一块连续的存储单元中,其特点是借助数据元素在储存器中的相对位置来表示数据元素之间的关系。
  • 顺序存储的问题是,如果元素集合很大,则可能找不到一块很大的连续的空间来存放。

1.3.2 链式存储

  • 如果存储器中没有足够大的连续可用空间,只有不相邻的零碎小块存储单元;或者如果在事前申请一段连续空间,因为无法预计所需存储空间的大小,需要临时增加空间;此时链式存储结构可以满足需求。
  • 链式存储结构的特点是将存放每个数据元素的结点分为两部分:一部分存放数据元素(数据域),另一部分存放指示存储地址的指针(指针域),借助指针表示数据元素之间的关系。
  • 链式存储结构可用一组任意的存储单元在储存数据元素,这组存储单元可以是连续的,也可以是不连续的。链式存储因为有指针域,增加了额外的存储开销,并且实现上也较为麻烦,但大大增加了数据结构的灵活性。

1.3.3 索引存储

  • 在线性表中,数据元素可以排成一个序列:R1,R2,R3,…Rn,每个数据元素Ri在序列里都有对应的位置码 i,这就是元素的索引号。索引存储结构就是通过数据元素的索引号 i 来确定数据元素Ri的存储地址。
  • 一般索引存储结构有两种实现方法:
    • 建立附加的索引表,索引表里第 i 项的值就是第 i 个元素的存储地址;
    • 当每个元素所占单元数都相等时,可用位置码 i 的线性函数值来确定元素对应的存储位置。

1.3.4 散列存储

  • 散列存储结构:这种存储方法就是数据元素与其在存储器上的存储位置之间建立一个映像关系F。根据这个映像关系F,一直某数据元素就可以得到他的存储地址。即D=F(E),这里E是要存放的数据元素,D是该数据元素的存储位置。
  • 这种存储结构的关键是设计这个函数F,但函数F不可能解决数据存储中的所有问题,还应有一套意外事件的处理方法,它们共同实现数据的散列存储结构。
  • 哈希表是一种常见的散列存储结构。

1.4 数据的运算

  • 数据的运算时定义在数据逻辑结构上的操作,如插入、删除、查找、排序、遍历等。每种数据结构都有一个运算的集合。

2. 线性表

2.1 线性表定义

  • 线性表是一个线性结构,它是一个含有n≥0个结点有限序列,对于其中的结点,有且仅有一个开始结点(第一个结点)没有前驱但有一个后继结点;有且仅有一个终端结点(最后一个结点)没有后继但有一个前驱结点,其他的结点都有且仅有一个前驱和后继结点。

2.2 线性表基本操作

  • 置空表
  • 求表长
  • 取表中元素
  • 取元素Ki的直接前驱
  • 取元素Ki的直接后继
  • 定位
  • 插入
  • 删除

2.3 线性表的存储结构

  • 顺序存储
  • 链式存储

3. 栈和队列

4. 例子

//数据结构
namespace DataStruct
{class Program{static void Main(string[] args){//顺序线性表List<int> listInt = new List<int>(20);listInt.Add(34);var Count = listInt.Count;//链式线性表LinkedList<string> listLink = new LinkedList<string>();LinkedListNode<string> node1 = new LinkedListNode<string>("Mech");listLink.AddFirst(node1);LinkedListNode<string> node2 = new LinkedListNode<string>("Master");listLink.AddAfter(node1, node2);//栈Stack<int> sk = new Stack<int>();sk.Push(78);sk.Pop();//队列Queue<char> qchar = new Queue<char>();qchar.Enqueue('Y');var m = qchar.Dequeue();}}
}

C# .NET与数据结构相关推荐

  1. 数据结构(08)— 线性单链表基本操作

    1. 线性单链表数据结构 // 假定每个结点的类型用 SNode 表示 typedef struct SNodeTag {int data; // 所存储的数据元素SNodeTag *next; // ...

  2. 数据结构(06)— 线性循环链表实战

    1. 循环链表定义 单链的循环链表结点的存储结构和单链表的存储结构一样, 所不同的是: 最后一个结点的 next 域指向头结点, 而不是"空".这样, 由表尾很容易找到表头. 但若 ...

  3. 数据结构(05)— 线性单链表实战

    1. 设计思路 本项目的实质是完成对考生信息的建立.查找.插入.修改.删除等功能,可以首先定义项目的数据结构,然后将每个功能写成一个函数来完成对数据的操作,最后完成主函数以验证各个函数功能并得出运行结 ...

  4. 数据结构(04)— 线性顺序表实战

    1. 设计思路 本实战的实质是完成对学生成绩信息的建立.查找.插入.修改.删除等功能,可以首先定义项目的数据结构,然后将每个功能写成一个函数来完成对数据的操作,最后完成主函数以验证各个函数功能并得出运 ...

  5. 数据结构(03)— 数据处理基本操作(数据的查找、新增、删除、修改)

    我们先来看一个关于查找的例子.查找,就是从复杂的数据结构中,找到满足某个条件的元素.通常可从以下两个方面来对数据进行查找操作:​ 根据元素的位置或索引来查找: 根据元素的数值特征来查找. 针对上述两种 ...

  6. 数据结构(02)— 时间复杂度与空间复杂度转换

    1. 时间复杂度转化为空间复杂度 常用的降低时间复杂度的方法有递归.二分法.排序算法.动态规划等,降低空间复杂度的核心思路就是,能用低复杂度的数据结构能解决问题,就千万不要用高复杂度的数据结构. ​ ...

  7. OpenCV 笔记(09)— 常用的数据结构和函数(Vec、Point、Scalar、Size、Rect、cvtColor)

    1. Vec 对象类型 Vec 是一个主要用于数值向量的模板类.我们可以定义向量的类型和组件的数量: Vec<double, 19> myVector 我们还可以使用任何的预定义类型: t ...

  8. 数据结构与算法——线性结构——线性表及其表示

    -"一,线性结构 1.顺序储存结构直接表示 多项式. 1).使用数组来表示多项式.(用数组下标来表示指数,值来表示系数) 可以表示成: 2).使用结构数组来表示.(把系数和指数看成一个二元组 ...

  9. 队列:实用程序服务和数据结构

    队列:实用程序服务和数据结构 Queues: utility services and data structures 队列实用程序服务 Nucleus RTOS有四个API调用,它们提供与队列相关的 ...

  10. 管道:实用程序服务和数据结构

    管道:实用程序服务和数据结构 Pipes: utility services and data structures 管道公用设施 Nucleus RTOS有四个API调用,它们提供与管道相关的实用程 ...

最新文章

  1. linux7开启ipmi,通过IPMI安装CentOS7教程
  2. Leetcode 70. 爬楼梯 动态规划 c语言
  3. java setcharat,Java StringBuffer setCharAt()方法
  4. .NET Core实战项目之CMS 第十一章 开发篇-数据库生成及实体代码生成器开发
  5. shell 脚本实现退点输出
  6. Android重力感应示例
  7. 设计模式之简单工厂模式,工厂方法模式,抽象工厂模式
  8. 字符串转换为合法IP地址
  9. node mysql 事件循环_nodejs事件和事件循环详解
  10. 2022年武汉科技大学成人高等学历教育招生简章--学历提升、高起专、专升本
  11. 最经济方案 谈P2P电影服务器(转)
  12. 计算机里文本格式,设置计算机以更改文本文档格式,如何更改文本文档格式-...
  13. 晨风机器人成语接龙_使用晨风QQ机器人在群内玩成语接龙的方法
  14. 魏德米勒端子eplan宏_Weidmüller Configurator 魏德米勒端子配置软件
  15. 年轻人看不起牙,但年轻人能靠这门生意赚钱吗?
  16. 【Solidworks崩溃解决办法之一】【关闭OpenGL】
  17. ag-Grid 超丰富的表格插件(1)——简易使用
  18. SpringBoot使用Druid监控SQL
  19. redis系列-redis的连接
  20. 【What if 系列】全球雪封

热门文章

  1. web.config的问题
  2. 阿里云数据库RDS MySQL 物理全备文件数据恢复至自建数据库Mysql 5.7中
  3. Nginx 静态文件服务器搭建及autoindex模块解析
  4. Excel 中 查看 当前列 最后一个不为空的值 (使用公式实现)
  5. wifi信号桥怎么设置_扩展WiFi信号有什么好方法?路由器无线万能中继设置方法来了!...
  6. 【Oracle】重命名数据文件
  7. 【Linux】TOP命令
  8. 如何解决高并发,秒杀问题 1
  9. 解决eclipse中mybatis的xml配置文件无代码提示问题
  10. @Value取值为NULL的解决方案