线性表
线性表是最简单且最常用的一种数据结构。下面将 介绍它的概念、存储方法和基本运算:
线性表的基本概念:
若至少含有一个结点,则除了起始结点有且仅有一个前趋结点;除了终端结点其他结点有且仅有一个后继结点。
基本运算:
通过以下一些基本运算来实现一些特定操作,或者实现一些实际问题:
1.初始化InitList,建立一个空表sq
2.求线性表的长度
3.求线性表中第i个元素GetElem(sq,i)
4.按值查找Locate(sq,x)
5.插入元素InsElem(sq,x,i)
6.删除元素DelElem(sq,i)
7.输出元素值DispList(sq)
储存结构:
顺序表
特点:逻辑结构中相邻的结点在存储结构中仍然相邻
定义如下:
#define MAXSIZE 100
typedef struct
{
ElemType data[MAXSIZE];//存放数据域
int len;//当前线性表长度
} Sqlist;
优点:用一维数组实现,空间利用率高;能随机存取
缺点:操作不方便
单链表
特点:在结点中使用指针来串联成线性表,使得逻辑上相邻的结点,在物理结构上可以不相邻
定义如下:
typedef struct node
{
ElemType data;//数据域
struct node *next;//指针域,指向下一个相邻节点
} Slink;
优点:物理结构上灵活,操作方便;查找后继结点方便
缺点:不可随机存取;查找前趋结点比较困难
循环单链表
特点:与单链表相同,只是最后一个结点的指针域不为空,而是指向头结点,从而构成一个环
双链表
特点,与单链表相比,多了一个前趋指针
定义如下:
typedef struct node
{
ElemType data;//数据域
struct node *prior,*next;//分别指向前趋结点和后继结点的指针
} Dlink;
优点:保持了单链表的优势之后,又使查找前趋结点变的方便了;
缺点:需要额外的指针域,空间利用率降低;
循环双链表
特点:保持双链表的基础上,是尾结点与头结点相连
(待续...)