线性表

定义

线性表是由n(n≥0)个数据元素(结点)组成的有限序列。

特点

在数据元素的非空有限集中:

  • 存在唯一的一个被称做“第一个”的数据元素。
  • 存在唯一的一个被称作”最后一个“的数据元素。
  • 除第一个之外,集合中的每个数据元素均只有一个前驱。
  • 除最后一个之外,集合中每个数据元素均只有一个后继。

表示

大体上分两类,顺序表示和链式表示。

顺序表

存储空间是连续地,以数组的形式表示。

优点:

可随机存取表中任一元素。(由于物理位置的连续)

弱点:

插入和删除元素的操作几乎都要移动另外的元素,移动元素的数目取决于操作的位置。

数据结构:

typedef struct{

ElemType *elem; //存储空间基址

int length; //当前长度

int listsize; //当前分配的存储容量(以sizeof(ElemType)为单位)

}

链表

顺序表在逻辑关系上相邻的两个元素,在物理位置上也相邻的,而链表则不是。

优点:

插入和删除元素不需要移动元素。

缺点:

不能随机存取元素。

分类:

线性链表(或称单链表)、静态单链表、循环链表、双向链表。

数据结构:

单链表
typedef struct LNode{

ElemType data;

struct Lnode *next; //指向下一个元素的指针

}LNode,*LinkList;

 

静态单链表(用于不设”指针“类型的高级程序设计语言中使用链表结构)

typedef struct{

ElemType data;

int cur; //下一个元素在数组中的下标

}component,SLinkList[MAXSIZE];

 

循环链表(结构与单链表一样,只是尾结点指向头结点)

 

双向链表

typedef struct DuLNode{

ElemType data;

struct DuLNode *prior;

struct DuLNode *next;

}DuLNode,*DuLinkList

单链表和双向链表比较:

双向链表可以说是单链表的增强,增加了一个指针域,克服了单链表只能顺指针往后寻查其他结点的问题。

 

原文地址:https://www.cnblogs.com/dann/p/2934063.html