顺序存储
标签: 数据结构
学习人数: 35.9k


高清播放
赞赏支持

顺序表的定义

线性表的顺序存储又称为顺序表

来看一个生活中的例子:周末和朋友一起吃火锅,人非常多,我们需要在等候区等候,这个等候区就与顺序表有非常多的相似之处,借助它去理解顺序表的特点。首先,在等候区有非常多的椅子,这些椅子往往是排成一排连续排放的,中间不会空出很大的空间造成浪费。这就与在顺序表中选取存储单元的方法是一样的,我们会选取一段地址连续的存储单元去存放顺序表。接着工作人员会安排我们在椅子上连续的坐下等候。在存储单元当中去进行数据的存放是一样的,也是依次地存放线性表当中的数据元素,中间也不会空出许多存储单元造成空间的浪费。最后结伴而行的朋友也会坐在相邻的椅子上,这与顺序表的存放是相同的。在逻辑上相邻的两个元素在物理位置上也要保证它相邻,也会把它存放在相邻的存储单元上。在这个例子当中,其实椅子就代表着存储单元,而每一个等候的人就是要存放的数据元素。来总结一下顺序表的特点:

一组地址连续存放的存储单元依次存放线性表的元素,从而使得逻辑上相邻的两个元素在物理位置上也相邻。

所以有这样的规律:顺序表中逻辑顺序与物理顺序相同

其中在逻辑上相邻的两个数据元素,在顺序表中也存放在相同的存储单元当中,每一个小格子就代表一个存储单元。

 

在程序语言设计中,往往使用数组来实现顺序表。但是数组和顺序表又有一些差别,第一个差别是数组下标是从 0 开始的,而顺序表是从 1 开始的。还有一个就是数组的容量是不可以增加的,而顺序表的容量是可以增加的。还有一些其他的差别,比如说数组可以是多维的,而顺序表是一维的。

根据顺序存储可以知道,它是可以实现随机存取的。这是因为我们可以从第一个元素的地址直接推算出其他元素的地址。在顺序表当中,每一个存放的元素都属于同一种数据对象。那么每一个数据元素,它的大小都是一样的。根据这一特点,我们可以计算出每一个数据元素存储的地址。

第一个元素的地址假设它是 LOC(A) ,计算第二个元素的地址就可以用第一个元素的地址加上第一个数据元素 a1 所消耗的存储空间,用 sizeof 可求得该数据元素所消耗的存储空间大小。这里需要注意的一点是,n 与 MaxSize 是有含义上的不同的,其中 an 代表的是顺序表中最后一个数据元素,而 MaxSize 代表的是数组的最后一个存储单元。

 

 

顺序表的两种实现方法

顺序表可以用数组来实现。根据数组的两种分配方式,也就有两种描述顺序表的方法。分别是静态描述分配顺序表的方法和动态描述分配顺序表的方法。首先来看数组静态分配时时如何描述一个顺序表的。

#define MaxSize 50  
typedef struct{  
    ElemType data[MaxSize];  
    int length;  
}SqList;  

这就是描述顺序表的语句。第一句是定义了一个宏,也就是把 MaxSize 定义为 50,这也就是数组的最大容量。接着定义了一个结构体。结构体就是把多个基本数据类型组合到一起构成一个新的数据类型。它的定义语句是用 typedef struct ,然后用大括号圈起来所要包含的基本数据类型。最后 SqList 代表着该结构体的名字。这个结构体当中有一个存放顺序表的数组,它是 ElemType 类型,其中数组大小是 MaxSize,也就是 50,还有一个整型的 length,它是代表顺序表的长度。这就是一个...

登录查看完整内容


课后作业

掌握顺序存储


登录后开始许愿

7 条上岸许愿
richiing
2021年7月14日 14:15

存储20个学生的id和成绩的顺序表table

typedef struct{

int id;

int score;

}stu;

typedef struct{

stu *p;

int length;

}table;

int main(){

table T;

T.length=20;

T.p=(stu*)malloc(sizeof(stu)*T.length);

stu *q=T.p;

for(int i=0;i<20;i++){

scanf("%d%d\n",&q->id,&q->score);

q++;

}

q=T.p;

for(int i=0;i<20;i++){

printf("%d%d\n",q->id,q->score);

q++;

}

return 0;

}

赞(0)
asdfg
2021年7月4日 15:42

#define MaxSize 50

typedef struct{

ElemType data[MaxSize];

int length ;

}SqList;

 

赞(0)
Echo28
2021年5月28日 15:05

#define MAXSIZE 50

#typedef struct{

elemtype date[MAXSIZE];

int length;

}sql

赞(0)
Thezhi
2020年12月31日 19:14

#define MAXSIZE 100

#typedef struct{

Elemtype data[maxsize];

int length;

}sql

 

赞(0)
Thezhi
2020年12月31日 19:14

#define MAXSIZE 100

#typedef struct{

Elemtype data[maxsize];

int length;

}sql

 

赞(0)
空凤
2020年11月20日 10:21

#define MAXSIZE 100

#typedef struct{

Elemtype data[maxsize];

int length;

}sql

赞(0)
yubai
2020年7月20日 21:20

#define MAXSIZE 255

#typedef int Elemtype;

typedef struct{

Elemtype data[maxsize];

int length;

}SqList

 

赞(0)