线性表的存储结构
2020-09-04 本文已影响0人
程序员丶星霖
一、线性表的定义
线性表是具有相同特性数据元素的有限序列。
- 相同特性:把同一类事务归类,方便批量处理。
- 有限:表中元素个数为n,n有限大,n可以为0。
- 序列:表中元素排成一列,体现了一对一的逻辑特性(每一个元素有则仅有一个前驱和一个后继)。
二、存储结构
2.1、顺序存储结构
顺序存储结构可以使用数组加length实现。
A | B | C | ... | X | ... | |
---|---|---|---|---|---|---|
0 | 1 | 2 | ... | length-1 | ... | maxSize-1 |
int A[maxSize];
int length = 0;
2.2、链式存储结构
链式存储结构可以通过自引用类型实现。
(1)单链表
有头结点的单链表:
![](https://img.haomeiwen.com/i4625756/e34071f55fc352a3.png)
无头结点的单链表:
![](https://img.haomeiwen.com/i4625756/e8ac176179bb6bda.png)
单链表的实现如下:
typedef struct DLNode {
int data;
struct DLNode* next;
struct DLNode* prior;
} DLNode;
// 以下是伪代码
DLNode *L;
L = (DLNode*)malloc(sizeof(DLNode));
A->next = B;
B->next = C;
C->next = D;
D->prior = C;
C->prior = B;
B->prior = A;
有头结点的单链表的头结点判空:
Head->next = NULL; 为真
无头结点的单链表的头结点判空:
Head == NULL; 为真
(2)双链表
有头结点的双链表:
![](https://img.haomeiwen.com/i4625756/c5b62a44b5cf6335.png)
无头结点的双链表:
![](https://img.haomeiwen.com/i4625756/620792cd00c77bcd.png)
双链表的实现如下:
typedef struct DLNode {
int data;
struct DLNode* next;
struct DLNode* prior;
} DLNode;
//伪代码
DLNode *L;
L = (DLNode*)malloc(sizeof(DLNode));
A->next = B;
B->next = C;
C->next = D;
D->prior = C;
C->prior = B;
B->prior = A;
有头结点的双链表的头结点判空:
Head -> next == NULL; 为真
无头结点的双链表的头结点判空:
Head == NULL; 为真
(3)循环链表
有头结点的单双循环链表:
![](https://img.haomeiwen.com/i4625756/6fff03b7269efb36.png)
无头结点的单双循环链表:
![](https://img.haomeiwen.com/i4625756/92bddf5027de97f1.png)
有头结点的单双循环链表的头结点判空:
- 单循环链表:
Head -> next == Head; 为真
- 双循环链表:
Head -> next == Head; 为真
或
Head -> prior == Head; 为真
无头结点的单双循环链表的头结点判空:
Head == NULL; 为真
我的博客:http://www.coderlearning.cn/
![](https://img.haomeiwen.com/i4625756/1e4bf2f119027169.jpg)