数据结构考研笔记——线性表

1.线性表的定义

线性表是具有相同特性元素的一个有限序列。

所含元素个数=线性表长度。

2.线性表的逻辑特性

只有一个表头元素,一个表尾元素,表头元素没有前驱,表尾元素没有后继,其他元素只有一个直接前驱,一个直接后继。

3.线性表的存储结构

(1)顺序存储结构(顺序表)

  1. 随机访问特性
  2. 需占用连续的存储空间
  3. 做插入操作时要移动多个元素

(2)链式存储结构(链表)

  1. 不支持随机访问
  2. 结点的存储空间利用率较顺序表稍低一些(每个结点需划出一部分空间来存储指向下一个结点位置的指针)
  3. 支持存储空间的动态分配
  4. 插入操作无需移动元素

链表的五种形式:

1)单链表

①带头结点的单链表:头结点不存储信息(仅存储一些描述链表属性的信息,如表长),只是作为标志。头指针head指向头结点,始终不等于NULL,head->next等于NULL时,链表为空。

②不带头结点的单链表:所有结点都存储信息。头指针head指向开始结点,当head等于NULL时,链表为空。

结点定义:

typedef struct LNode
{
   int data;               //data中存放结点数据域
   struct LNode *next;     //指向后继结点的指针
}LNode;                    //定义单链表结点类型

2)双链表

双链表能够由终端结点反向走到开始结点。就是在单链表结点上添加了一个指针域,指向当前结点的前驱。

结点定义:

typedef struct DLNode
{
   int data;               //data中存放结点数据域
   struct DLNode *prior;   //指向前驱结点的指针
   struct DLNode *next;    //指向后继结点的指针
}DLNode;

3)循环单链表

将单链表的最后一个指针域(空指针)指向链表的第一个结点。

4)循环双链表

将双链表终端结点的next指针指向链表中的第一个结点,将链表中第一个结点的prior指针指向终端结点。

以下四句中任意一句为真,即可判断循环双链表为空

head->next==head;
head->prior==head;
head->next==head && head->prior==head;
head->next==head || head->prior==head;

5)静态链表

一般链表结点空间来自于整个内存,静态链表则来自于一个结构体数组。

猜你喜欢

转载自blog.csdn.net/SmiledrinkCat/article/details/81325788
今日推荐