数据结构 Data Structure(C/C++语言版)----第二章 线性结构

第二章 线性结构

(线性表、栈、队列:存储结构+逻辑结构+操作)
2.1 线性表的类型定义
2.2 线性表的顺序表示和实现
2.3 线性表的链式表示和实现
2.4 举例


2.1 线性表的类型定义

  • 线性结构的特点:

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

1)有且仅有一个开始结点;

2)有且仅有一个终端结点;

3)除第一个结点外,集合中的每个数据元素均有且只有一个前驱;除最后一个结点外,集合中的每个数据元素均有且只有一个后继。

4)逻辑上相邻,物理上也相邻

  • 线性序列:线性结构中的所有结点按其关系可以排成一个序列,记为 (a 1 ,…,a i ,a i+1 ,…a n )

1. 线性表

1)线性表是n(n ≥0)个数据元素的有限序列。
2)线性表是一种最常用且最简单的数据结构。

含有n个数据元素的线性表是一个数据结构:
List = (D,R)
其中:D = {a i | a i ∈D 0 ,i=1,2,…n,n≥0}
R = {N}, N = {< a i‐1 , a i > | a i‐1 , a i ∈D 0 , i = 2,3,…n}
D 0 为某个数据对象——数据的子集
特性:均匀性,有序性(线性序列关系)

3)线性表的长度及空表

线性表中数据元素的个数n(n≥0)定义为线性表的长度当线性表的长度为0 时,称为空表。

当线性表的长度为0 时,称为空表。

a i  是第i个数据元素,称i为a i  在线性表中的位序。

2. 线性表的基本操作

1)InitList(&L) 初始化,构造一个空的线性表

2)ListLength(L) 求长度,返回线性表中数据元素个数

3)GetElem(L,i,&e) 取表L中第i个数据元素赋值给e

4)LocateElem(L,e) 按值查找,若表中存在一个或多个值为e的结点,返回第一个找到的数据元素的位序,否则返回一个特殊值。

5)ListInsert(&L,i,e) 在L中第i个位置前插入新的数据元素e,表长加1。

6)ListDelete(&L,i,e) 删除表中第i个数据元素,e返回其值,表长减1。

3、存储结构

顺序表—线性表的顺序存储结构

用“物理位置”相邻来表示线性表中数据元素之间的逻辑关系

根据线性表的顺序存储结构的特点,只要确定了存储线性表的起始位置,线性表中任一数据元素都可随机存取,所以,线性表的顺序存储结构是一种随机存取的存储结构。

2.3 线性表的链式表示和实现

1. 线性链表

特点:在内存中用一组任意的存储单元来存储线性表的数据元素,用每个数据元素所带的指针来确定其后继元素的存储位置。这两部分信息组成数据元素的存储映像,称作结点。

  • 结点:数据域 + 指针域(链域)
  • 链式存储结构:n个结点链接成一个链表
  • 线性链表(单链表):链表的每个结点只包含一个指针域

2.基本操作

1)取元素
2)插入元素
3)删除元素
4)建立链表
5)有序链表的合并
6)查找(按值查找)
7)求长度
8)集合的并运算

3.循环链表

1)循环链表——是一种首尾相接的链表。

循环链表最后一个结点的next指针不为 0 (NULL),而是指向了表头结点。在循环链表中没有NULL为简化操作,在循环链表中往往加入表头结点。

特点:循环链表中,从任一结点出发都可访问到表中所有结点;而在单链表中,必须从头指针开始,否则无法访问到该结点之前的其他结点

循环链表与单链表不同的是链表中表尾结点的指针域不是NULL,而是链表头结点的指针H(链表指针)

4.双向链表 (Doubly Linked List)

双向链表是指在前驱和后继方向都能游历(遍历)的线性链表。
1) 双向链表的结点结构:

前驱方向 <- (a)结点结构 ->  后继方向

双向循环链表的插入算法

p→prior = current; (1)
p→next =current→next; (2)
current→next = p; (3)
p→next→prior = p; (4)

双向循环链表的删除算法

current→next→prior = current→prior;
current→prior→next = current→next;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cheeky_man

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值