线性表是n个数据元素的有限序列。一个数据元素可以由若干个数据项组成,常把数据元素成为记录,含有大量记录的线性表称为文件。
基础知识
- 顺序表
用一组地址连续的存储单元依次存储线性表的数据元素
typedef struct{
ElemType *elem;
int length;
int listize;
}SqList;
链表
用一组任意的存储单元存储线性表的数据元素
数据元素 a的存储映像称为结点,包含两个域:存储数据元素信息的域称为数据域;存储直接后继存储位置的域称为指针域。指针域中存储的信息称作指针或链。单链表
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
- 静态单链表
#define MAXSIZE 100
typedef struct{
ElemType data;
int cur;
}component,SLinkList[MAXSIZE];
- 循环链表
表中最后一个节点的指针域指向头结点,整个链表形成一个环 - 双向链表
typedef struct DuLNode{
ElemType data;
struct DuLNode *prior;
struct DuLNode *next;
}DuLNode,*DuLinkList;
- 带头节点的线性链表
typedef struct LNode{
ElemType data;
struct LNode *next;
}*Link,*Position;
typedef struct{
Link head,tail;
int len;
}LinkList;
常见问题
- 插入/删除操作
- 链表反转
- 判断环/找入口点
- 判断链表相交
- 约瑟夫环