学数据结构的时候,没有认真学习,有点不太会,最近准备重拾一下。
常见的线性表:顺序表、链表、栈、队列、字符串...,
顺序表和链表都逻辑结构上连续,链表物理结构上不连续,顺序表物理结构上连续
1.顺序表
顺序表分为,静态顺序表和动态顺序表。
静态顺序表:定长数组存储。
动态顺序表:动态开辟储存。
2.链表
可以根据,有无头结点,循环不循环,单向还是双向,分为八种。
// 顺序表的静态存储
#define N 8
typedef int SLDataType;
typedef struct SeqList{
SLDataType array[N]; // 定长数组
size_t size; // 有效数据的个数
}SeqList;
typedef int SLDataType;
// 顺序表的动态存储
typedef struct SeqList{
SLDataType* array; // 指向动态开辟的数组
size_t size ; // 有效数据个数
size_t capacity ; // 容量空间的大小
}SeqList;
//单链表的定义
typedef int SLTDataType;
typedef struct SListNode
{
SLTDataType _data;
struct SListNode* _next;
}SListNode;
typedef struct SList
{
SListNode* _head;
}SList;
顺序表
优点:
空间连续、支持随机访问
缺点:
1.中间或前面部分的插入删除时间复杂度O(N)
2.增容的代价比较大。(需要开辟一个新的地址)
链表
优点:
1.任意位置插入删除时间复杂度为O(1)
2.没有增容问题,插入一个开辟一个空间。
缺点:
以节点为单位存储,不支持随机访问