前言
小编最近一段时间在学习数据结构中顺序存储和链式存储的代码部分,发现有很多规律,在此做一个小结。
实例
1. 线性表
const int Maxsize=100; //预先定义顺序表的长度
typedef struct //定义结构
{
DataType data[Maxsize]; //表示存放数据的数组
int length; //顺序表的实际长度
}SeqList; //顺序表类型名为SeqList
SeqList L; //定义L为一个顺序表
2. 栈
const int Maxsize=6; //预先定义顺序栈的容量
typedef struct seqstack //定义结构
{
DataType data[Maxsize]; //表示存放数据的数组
int top; //标志栈顶位置的变量
}SeqStk; //栈类型名为SeqStk
3. 队列
const int Maxsize=20;
typedef struct seqqueue
{
DataType data[Maxsize];
int front,rear; //标志队列头指针、尾指针
}SeqQue;
SeqQue SQ;
异同点
(一)同:
通过上面的代码实例,我们不难发现,这些代码中有很多类似的部分,抽象出来,大致就是这样:
const int Maxsize=...; //预先定义长度
typedef struct ... //定义结构
{
DataType data[Maxsize]; //表示存放数据的数组
int ...; //数据结构的特殊之处
}...; //数据结构的类型名
这段代码的结构共分为三个部分,同样,小编认为,我们大致可以将顺序存储的代码定义分为三个部分:
(1)预先定义长度
(2)定义结构(定义数组,数据结构的特殊点)
(3)指明数据结构的类型名
(二)异:
既然我们已经知道代码的相同点,那么他们的不同之处在哪儿?
(1)通过以上三种数据结构顺序存储的示意图,我们不难发现,代码中的不同之处正是图的不同之处,线性表强调实际长度(length),栈强调栈顶位置(top),队列强调首指针和尾指针(front、rear)。
(2)代码中另一个不同点体现在数据结构的类型名(存储类型+数据结构类型),顺序的英文为“sequence”,因此类型名以“seq”开始,紧接,表是“list”,栈是“stack”,队列是“queue”。
(3)定义结构的时候,线性表为“typedef struct”,栈为“typedef struct seqstack”,队列为“typedef struct seqqueue”,小编认为这样做的原因在于栈和队列都是特殊的线性表。
小结
- 代码的学习要与图进行结合 - 学习过程中我们需要将类似的知识点进行归纳总结,对比它们的相同点和不同点 - 最终的结果就是抽象