1
1
mirror of https://github.com/ParkMoonJ/KaoYan.git synced 2026-10-31 12:43:58 +08:00

Create 2 线性表.md

This commit is contained in:
ParkMoonJ
2021-04-06 15:28:24 +08:00
parent c7d16d3348
commit 979ecfea42
13 changed files with 43 additions and 28 deletions

View File

View File

View File

View File

View File

View File

@@ -1,28 +0,0 @@
# 第 2 章 线性表
## 2.1 线性表的类型定义
**线性表(linear list)** 是 n 个数据元素的有限序列。
若将线性表记为
$$(a_1,\cdots,a_{i-1},a_i,a_{i+1},\cdots,a_n)$$
```cpp
// ---线性表的静态分配顺序存储结构---
#define MAXSIZE 50 // 定义线性表最大长度
typedef struct {
int data[MAXSIZE]; // 顺序表的元素
int length; // 顺序表当前长度
} SqList;
```
```cpp
// ---线性表的动态分配顺序存储结构钢---
#define INITSIZE 100 // 线性表存储空间的初始分配量
#define LISTINCREMENT 10 // 线性表存储空间的分配增量
typedef struct {
int *data; // 存储空间基址
int MAXSIZE, length;
} SqList;
```

View File

@@ -0,0 +1,43 @@
# 第 2 章 线性表
## 一、基本内容
线性表的逻辑结构定义、抽象数据类型定义和各种存储结构的描述方法;在线性表的两类存储结构(顺序的和链式的)上实现基本操作;稀疏多项式的抽象数据类型定义、表示和加法的实现。
## 二、学习要点
1. 了解线性表的逻辑结构特性是数据元素之间存在着线性关系,在计算机中表示这种关系的两类不同的存储结构是顺序存储结构和链式存储结构。用前者表示的线性表简称为顺序表,用后者表示的线性表简称为链表。
2. 熟练掌握这两类存储结构的描述方法,如一维数组中一个区域 `[i..]` 的上、下界和长度之间的变换公式($L = j - i + 1,i = j - L + 1,j = i + L - 1$),链表中指针 `p` 和结点 `*p` 的对应关系(结点 `*(p->next)` 是结点 `*p` 的后继等),链表中的头结点、头指针和首元结点的区别及循环链表、双向链表的特点等。链表是本章的重点和难点。扎实的指针操作和内存动态分配的编程技术是学好本章的基本要求。
3. 熟练掌握线性表在顺序存储结构上实现基本操作:查找、插入和删除的算法。
4. 熟练掌握在各种链表结构中实现线性表操作的基本方法,能在实际应用中选用适当的链表结构。了解静态链表,能够加深对链表本质的理解。
5. 能够从时间和空间复杂度的角度综合比较线性表两种存储结构的不同特点及其适用场合。和本章的要求相配合,在习题中安排了难度渐增的六类习题:第一类只涉及线性表在顺序结构上各种基本操作的实现;第二类涉及线性链表的各种操作;第三类沙及两个或多个线性表的各种操作;第四类对不同的存储结构作对照比较,并注重其时间复杂度的分析;第五类涉及循环链表和双向链表;第六类涉及稀疏多项式及其运算在线性表的两种存储结构上的实现。
## 三、算法演示内容
在 DSDEMO 系统的选单「链表」下,有以下算法演示:
- 在单链表中插入一个结点(Ins_LinkList);
- 删除单链表中的一个结点(Del_LinkList);
- 生成一个单链表(Crt_LinkList);
- 有序链表
- 集合求并(Union)
- 集合求交(Intersect)
## 五、算法设计题
本章算法设计题涉及的顺序表和线性链表的类型定义如下:
```cpp
#define LIST_INIT_SIZE 100 // 线性表存储空间的初始分配量
#define LISTINCREMENT 10 // 线性表存储空间的分配增量
typedef struct {
ElemType *elem; // 存储空间基址
int length; // 当前长度
int listsize; // 当前分配的存储容量
} SqList; // 顺序表类型
typedef struct LNode {
ElemType data;
struct LNode *next;
} LNode, *LinkList; // 线性链表类型
```