重温数据结构——(2)

线性表

线性表是最简单且最常用的一种数据结构。下面将 介绍它的概念、存储方法和基本运算:

线性表的基本概念:

    若至少含有一个结点,则除了起始结点有且仅有一个前趋结点;除了终端结点其他结点有且仅有一个后继结点。

基本运算:

    通过以下一些基本运算来实现一些特定操作,或者实现一些实际问题:

    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;

优点:保持了单链表的优势之后,又使查找前趋结点变的方便了;

缺点:需要额外的指针域,空间利用率降低;

循环双链表

特点:保持双链表的基础上,是尾结点与头结点相连

(待续...)

原文地址:https://www.cnblogs.com/p2liu/p/6048778.html