当前课程知识点:数据结构(Data Structures) >  2. List >  2.2 Array based List >  Video

返回《数据结构(Data Structures)》慕课在线视频课程列表

Video在线视频

Video

下一节:Video

返回《数据结构(Data Structures)》慕课在线视频列表

Video课程教案、知识点、字幕

大家好

接下来这节课中

我们将给大家讲解一下

List的一种具体实现方法数组

我们先来看一看

在实现List过程中

我们需要关注的问题

实现List关键是要寻找合适的方式

去存储List中的数据元素

第一种常见的存储方法

是建立一个数组

那么List中的数据元素

在内存中将一个接着一个的

顺序存放在这个数组中

这种基于数组的方法

实施起来比较简单

而且访问也比较高效

但是这种方法需要预先去给它分配内存

如果预先分配的空间太大

就会造成空间的浪费

相反如果分配的空间太小

则无法容纳新的数据

所以我们看到数组在空间的使用上

它是不够灵活的

那么有没有一种方法

可以灵活地根据当前我们实际的需要

来去分配内存空间呢

常用的一种方法叫做链表

链表并不要求数据是连续存放的

数据元素之间它们先后的逻辑关系

是通过指针把它们连接在一起的

链表消耗的空间大小

是随着元素个数的变化

而进行动态调整的

在这里我们首先来讲一下

基于数组的List实现方法

基于数组的List

它的核心就是要建立一个

用来存放元素的数组

围绕这个数组我们可以去构建一个C++类

AList用来去实现这个List

AList继承了List抽象类

并且实现了List上面的所有操作

这个类有一个模板参数Elem

它对应的是数据元素的类型

我们先来看一下AList它的属性成员

必不可少的

首先当然就是要有一个数组

这里定义了一个名字为listArray的数组

那么在对象初始化的时候

我们需要给这个数组来分配空间

接下来的整数maxsize

是用来去记录数组的大小

listsize记录的是列表中元素的个数

此外还有一个很重要的fence成员属性

用来去记录当前栅栏的位置

如图所示fence的值

它定义为栅栏后面的这个元素

在数组中的位置

AList它的构造函数是比较简单的

主要的工作是要给数组listArray分配空间

同时需要去初始化maxsize listsize

以及栅栏的位置fence

并且把fence设置为0

让栅栏处于列表的最前端的位置

而AList它的析构函数

则是简单地去销毁整个数组就可以了

下面我们再来看一下List的

一些其他基本的操作

首先我们看到的是setPos函数

fence函数用来去设置栅栏的位置

setPos指明了要去设置的位置

这个函数的核心其实是比较简单的

就是直接地将栅栏的位置fence

做相应的设置就可以了

但是需要注意的是

在设置位置的时候

要确保这个位置Pos

它是不是一个合理的取值

我们知道栅栏在列表中最左边的位置

是0号位置

而最右边的位置是在listsize这个位置

所以fence它的取值范围

应该是从0到listsize

因此在这里面我们在写Pos函数的时候

要注意去检查

只有当Pos的值属于这个合理的范围

我们才去设置fence

否则应该返回false

下面我们再来看一下getValue函数的实现

这个函数用来去获取

栅栏后面元素的值

并且把它记录在引用参数it中

在访问数组之前

我们首先要去判断一下

栅栏的后面是否存在元素

如果后面没有元素

那么getValue应该返回false

这个是可以通过去检查

栅栏是否出于列表的最后端来去实现的

也就是去判断fence是否和listsize重叠

在其他的一般情况下

我们可以非常简单地去访问数组

listArray在fence位置的数值

来去获得栅栏后面的元素

我们把这个值记录在参数it中

然后进行返回

这里我们可以看到

我们所实现的setPos函数

以及getValue函数

并没有涉及到复杂的循环语句

它们的时间复杂度都是Θ(1)

可见在数组这种实现方式里面

它可以非常高效地完成

读取任意位置上的元素

我们这节课就先讲到这里

下节课再见

数据结构(Data Structures)课程列表:

1. Introduction

-1. Introduction--1.1 Introduction of Data

-1.1 Introduction of Data Structure

--Introduction of Data Structure

-1.2 Data Structure and A

-1.2 Data Structure and Algorithm

--Video

-1.3 Asymptotic Analysis

-1.3 Asymptotic Analysis

--Video

-1.4 Simplifying Rules of

-1.4 Simplifying Rules of Asymptotic Analysis

--Video

2. List

-2.1 Introduction of List

-2.1 Introduction of List

--Video

-2.2 Array based List

-2.2 Array based List

--Video

-2.3 Insertion Operation on Array

-2.3 Insertion Operation on Array based List

--Video

-2.4 Remove Operation on Array based List

-2.4 Remove Operation on Array based List

--Video

-2.5 Linked list

-2.5 Linked list

--Video

-2.6 Insertion Operation on Linked list

-2.6 Insertion Operation on Linked list

--Video

-2.7 Remove Operation on Linked list

-2.7 Remove Operation on Linked list

--Video

-2.8 SetPos Operation on Linked list

-2.8 SetPos Operation on Linked list

--Video

-2.9 Stack

-2.9 Stack

--Video

-2.10 Application of Stack

--Video

-2.11 Queue

-2.11 Queue

--Video

3. Tree

-3.1 Definition of Binary Tree

-3.1 Definition of Binary Tree

--Video

-3.2 Implementation of Binary Tree

-3.2 Implementation of Binary Tree

--Video

-3.3Traversal

-3.3 Traversal

--Video

-3.4 Binary Search Tree

-3.4 Binary Search Tree

--Video

-3.5 Search on BST

-3.5 Search on BST

--Video

-3.6 Insertion on BST

-3.6 Insertion on BST

--Video

-3.7 Introduction of Heap

-3.7 Introduction of Heap

--Video

-3.8 Construction of Heap

-3.8 Construction of Heap

--Video

-3.9 Operations on Heap

--Video

-3.10 General Tree

--Video

4. Search

-4.1 Definition of Searching

--Video

-4.2 Searching of Sorted Array

-4.2 Searching of Sorted Array

--Video

-4.3 Definition of Hash Table

--Video

-4.4 Collision in Hash Table

-4.4 Collision in Hash Table

--Video

-4.5 Extension of Linear Probing

--Video

-4.6 Insertion Operation of Hash Table

--Video

-4.7 Search Operation of Hash Table

-4.7 Search Operation of Hash Table

--Video

5. Index

-5.1 Introduction of Index

--Video

-5.2 Linear Index

-5.2 Linear Index

--Video

-5.3 2-3 tree index

-5.3 2-3 tree index

--Video

-5.4 Implementation of 2-3 tree

-5.4 Implementation of 2-3 tree

--Video

-5.5 B-Tree

-5.5 B-Tree

--Video

-5.6 Insertion Operation on B+ Tree

--Video

-5.7 Deletion Operation on B+ Tree

--Video

6. Graph

-6.1 Definition of Graph

--Video

-6.2 Implementation of Graph

--Video

-6.3 Adjacency Matrix

--Video

-6.4 Adjacency List

--Video

-6.5 Graph Traversal - DFS

--Video

-6.6 Graph Traversal - BFS

--Video

-6.7 Topological Sort

--Video

-6.8 Shortest Path Problem

--Video

-6.9 Single Source Shortest Path

--Video

-6.10 Dijkstra Algorithm

--Video

7. Sorting

-7.1 Sorting Problem

--Video

-7.2 Insertion Sort

--Video

-7.3 Selection Sort

--Video

-7.4 Bubble Sort

--Video

-7.5 Shell Sort

--Video

-7.6 Quick Sort

--Video

-7.7 Heap Sort

--Video

-7.8 Comparison

--Video

Video笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。