2清空所有表_线性表——顺序表的实现与讲解(C++描述)

本文详细介绍了线性表的概念、抽象数据类型以及顺序存储结构,包括顺序存储结构的定义、地址计算方式、顺序表的抽象数据类型、基本运算的实现如插入、删除、扩容等。此外,还探讨了顺序表的优缺点和时间复杂度分析。
摘要由CSDN通过智能技术生成

517a73c5677db79f3d60f9717e6beeea.png

线性表

引言

新生安排体检,为了 便管理与统一数据,学校特地规定了排队的方式,即按照学号排队,谁在前谁在后,这都是规定好的,所以谁在谁不在,都是非常方便统计的,同学们就像被一条线(学号)联系起来了,这种组织数据(同学)的方式我们可以称作线性表结构

定义

线性表:具有零个或多个(具有相同性质,属于同一元素的)数据元素的有限序列

若将线性表记为 ( a0 , a1 ,ai -1 ai ,ai +1 , ... , an - 1 , an )

  • 注意:i 是任意数字,只为了说明相对位置,下标即其在线性表中的位置)
  • 前继和后继:由于前后元素之间存在的是顺序关系,所以除了首尾元素外,每个元素均含有前驱后继,简单的理解就是前一个 元素和后一个元素
  • 空表:如果线性表中元素的个数 n 为线性表长度,那么 n = 0 的时候,线性表为空
  • 首节点、尾节点: 上面表示中的 :a0 称作首节点,an 称作尾节点

抽象数据类型

  • 数据类型:一组性质相同的值的集合及定义在此集合上的一些操作的总称
  • 抽象数据类型:是指一个数学模型及定义在该模型上的一组操作

关于数据类型我们可以举这样一个例子

  • 例如:我们常常用到的 整数型 浮点型 数据 这些都是数据的总称,所有符合其性质特征的都可以用其对应数据类型来定义,例如 520是一个满足整数特征的数据,所以可以赋值给 一个int型的变量 int love = 520;

像这些一般的数据类型通常在编程语言的内部定义封装,直接提供给用户,供其调用进行运算,而抽象数据类型一般由用户自己根据已有的数据类型进行定义

抽象数据类型和高级编程语言中的数据类型实际上是一个概念,但其含义要比普通的数据类型更加广泛、抽象

为什么说抽象呢?是因为它是我们用户为了解决实际的问题,与描述显示生活且现实生活中的实体所对应的一种数据类型,我可以定义其存储的结构,也可以定义它所能够,或者说需要进行的一些操作,例如在员工表中,添加或删除员工信息,这两部分就组成了 “员工” 这个抽象的数据类型

大致流程就是:

  • A:一般用户会编写一个自定义数据类型作为基础类型
  • B:其中一些抽象操作就可以定义为该类型的成员函数,然后实现这些函数
  • C:如果对外的接口在公有域中,就可以通过对象来调用这些操作了
  • 当然,我们在使用抽象数据类型的时候,我们更加注意数据本身的API描述,而不会关心数据的表示,这些都是实现该抽象数据类型的开发者应该考虑的事情

线性表分为两种——顺序存储结构和链式存储结构,我们先来学习第一种

顺序存储结构

什么是顺序存储结构呢?

顺序存储结构:用一段地址连续的存储单元依次存储线性表的数据元素

3bc3e0faf061bc33f8787fc91680c404.png

怎么理解这这种存储方式呢?

例如在一个菜园子中,有一片空地,我们在其中找一小块种蔬菜,因为土地不够平整疏松所以我们需要耕地,同时将种子按照一定的顺序种下去,这就是对表的初始化

菜园子可以理解为内存空间,空地可以理解为可以使用的内存空间,我们通过种蔬菜种子的方式,将一定的内存空间所占据,当然,这片空间中你所放置的数据元素都必须是相同类型的 也就是说都得是蔬菜种子,有时候有些种子被虫子咬坏了,我们就需要移除一些种子,买来以后再在空出来的位置中选地方种好,这也就是增加和删除数元素

地址计算方式

从定义中我们可以知道 这种存储方式,存储的数据是连续的,而且相同类型,所以每一个数据元素占据的存储空间是一致的,假设每个数据 占据 L个存储单元那么我们可以的出这样的结论公式

  • i 代表所求元素的下标
  • 也就是单位长度乘以对应的个数

线性表的抽象数据类型

 #ifndef _LIST_H_
 #define _LIST_H_
 #include<iostream>
 using namespace std;
 ​
 class outOfRange{};
 class badSize{};
 template<class T>
 class List {
    
 public:
     // 清空线性表
     virtual void clear()=0;
     // 判空,表空返回true,非空返回false
     virtual bool empty()const=0;
     // 求线性表的长度
     virtual int size()const=0;
     // 在线性表中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值