#数据结构
来源:互联网 发布:hao123网络连接错误 编辑:程序博客网 时间:2024/06/09 17:17
2.2线性表的顺序存储和基本操作
在计算机内,可以用不同的方式来存储线性表,其中最常用的方式有顺序存储(sequential list)和链式存储(linked list)两种。
2.2.1线性表的顺序存储——顺序表
1、定义
顺序存储:用一段地址连续的存储单元依次存储线性表里各元素。也就是将线性表中的元素一个挨着一个的存放在某存储区域中,这种存储方式称为线性表的顺序存储结构。
顺序表:采用顺序存储结构的线性表称为顺序表。
2、我们用一维数组来描述顺序表中数据元素的存储区域,即用数组中相邻的位置存储线性表中相邻的元素。
C语言中,数组的下标是从0开始的,因此,线性表中第i个元素存储在数组下标为i-1的位置。
然而,用数组存储线性表意味着要分配固定长度的数组空间,而线性表可以进行插入和删除操作,即线性表的长度要求是可变的,因此,首先分配的数组空间要大于线性表的长度,其次,还需要设立一个变量,表示线性表的当前长度
3、线性表中第i个元素ai的存储首址为:loc(ai)=loc(a1)+(i-1)*k(1<=i<=n)。
其中,k表示每个数据元素占用的存储单元
loc(ai)表示数据元素ai的存储首址
上式表明,线性表中每个数据元素的存储首址都与第一个元素的存储首址loc(a1)相差一个与序号成正比的常数。
利用此公式,访问表中任意元素所需时间都相等,具有这一特点的存储结构称为随机存储结构。
4、根据存储分配的不同,顺序表仍可做进一步划分——静态存储分配的顺序表和动态存储分配的顺序表。
1)静态存储分配的顺序表。
特点:表的空间大小固定,给表的插入操作带来不便。
其结构描述为:
#define LIST_INIT_SIZE 100 //顺序表的最大容量(100)
typedef struct{
ElemType elem [LIST_INIT_SIZE]; //存储数据元素的一维数组
int length; //线性表的当前长度
}SSqList; //静态顺序表
2)动态存储分配的顺序表。
特点:在操作过程中可以随时向系统重新申请增补空间,非常灵活实用。
其结构描述为:
#define LIST_INIT_SIZE 100 //顺序表(默认的)初始分配最大容量
#define LISTINCREMENT 10 //(默认的)增补空间量
typedef struct{
ElemType *elem;//存储数据元素一维数组
int length; //线性表的当前长度
int listsize; //当前分配的数组容量(以ElemType为单位?)
int incrementsize; //增补空间量(以ElemType为单位)
}SqList; //动态顺序表
注意:
1)ElemType是一个抽象的数据类型,实际应用时,应根据数据元素的特征具体定义,int,char。。。。
2)在上述定义中,elem、length、listsize、incrementsize都是结构体中的成员,不能单独使用。若有定义:SqList L;则L表示一个顺序表,elem的引用方式为:L.elem。
3)在线性表中“第i个位置的元素”存放在数组元素L。elem[i-1]中,因此,在其后有关顺序存储结构的各操作实现中,元素的位序都从0开始(?)。
4)辨析存储结构和存取结构
***存储结构是数据及其逻辑结构在计算机中的表示
***存取结构是在某种数据结构上对查找操作时间性能的描述。
“顺序表是一种随机存取的存储结构”的含义为:在顺序表这种存储结构上进行查找操作,其时间性能为O(1)。
- 数据结构
- 数据结构
- 数据结构
- 数据结构
- 数据结构
- 数据结构
- 数据结构
- 数据结构
- 数据结构
- 数据结构
- 数据结构
- 数据结构
- 数据结构
- 数据结构
- 数据结构
- 数据结构
- 数据结构
- 数据结构
- OkHttp的使用
- 字符串全排列
- 手把手教你玩转Maven
- QT QNetworkDatagram类
- Wannafly模拟赛4 D Fancy Signal Translate(字典树)
- #数据结构
- 例题7-12 旋转游戏(The Rotation Game, Shanghai 2004, UVa1343)
- Java实现传教士与野人过河问题
- p43-3.1(1)
- Python学习笔记:七 银行管理系统
- Google C++命名规范
- Wannafly模拟赛4 CSum(线段树)
- JS五种运算符,运算符的优先级
- java 函数参数的传递方式说明(string、 引用类型、基本类型)