数据结构和算法

数据结构

一、稀疏数组

1、基本介绍

当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。

稀疏数组的处理方法是:
1)记录数组一共有几行几列,有多少个不同的值。
2)把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模。

2、思路分析

a、二维数组转稀疏数组思路

  • 遍历原始的二维数组,得到有效的数据个数sum
  • 根据sum就可以创建稀疏数组,spareArr int[sum+1][3]
  • 将二维数组的有效数据存入到稀疏数组中
  • 把稀疏数组的数据写入到本地磁盘中,通过IO的Writer

b、稀疏数组转二维数组思路

  • 把稀疏数组的数据从本地磁盘中读取到程序中,通过IO的Reader
  • 先读取稀疏数组的第一行,根据第一行的数据去创建原始的二维数组,比如 charAyy int[11][11]
  • 再读取稀疏数组的后几行数据,并赋给原始的二维数组即可

3、代码实现

二、队列

1、基本介绍

  • 队列是一个有序列表,可以用数组或者链表来实现。
  • 遵循先入先出的原则,即:先存入队列中的数据先取出,后存入队列中的数据后取出。

2、数组模拟队列思路分析

  • 队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的maxSize是该队列的最大容量
  • 因为队列的输入、输出是分别从前后端来处理。因此需要两个变量front以及rear分别记录队列前后端的下标,front会随着数据输出而改变,而rear是随着数据输入而改变。

当我们把数据存入队列时称为"addQueue",addQueue的处理需要两个步骤:
1)将尾指针往后移:rear+1,当front - rear(空)
2)若尾rear小于队列的最大下标 maxSize-1,则将数据存入rear所指的数组元素中,否则无法存入数据,rear = maxSize-1[队列满]。

三、链表

1、基本介绍

1、链表是节点的方式来存储
2、每个节点包含data域,next域:指向下一个节点
3、发现链表的各个节点不一定是连续存储
4、链表分为带头节点的链表和不带头节点的链表

2、单链表应用实例

留言