一、 定义
线性表的顺序表示又称为顺序存储结构或顺序映像。
顺序存储定义:把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构。
注意:
1. 线性表的第一个数据元素a1的存储位置,称作线性表的起始位置或基地址。
2. 依次存储,地址连续 ----中间没有空出存储单元。
二、 顺序表中元素存储位置的计算
假设线性表的每个元素需占l个存储单元,则第i+1个数据元素的存储位置和第i个数据元素的存储位置之间满足关系:
LOC(ai+1) = LOC(ai) + l
由此,所有数据元素的存储位置均可由第一个数据元素的存储位置得到:
LOC(ai) = LOC(a1) + (i-1) x l
三、 顺序表的顺序存储表示
用一变量表示顺序表的长度属性
#define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量
typedef struct{
ElemType elem[LIST_INIT_SIZE];//数组
int length;//当前长度
}SqList;
应用举例:
多项式的顺序存储结构类型定义
#define MAXSIZE 1000 //多项式可能达到的最大长度
typedef struct{
float p; //系数
int e; //指数
}Polynomial;
typedef struct{
Polynomial *elem; //存储空间的基地址
int length; //多项式中当前项的个数
}SqList; //多项式的顺序存储结构类型为SqList
图书表的顺序存储结构类型定义
#define MAXSIZE 1000 //图书表可能达到的最大长度
typedef struct{
char no[20]; //图书ISBN
char name[50]; //图书名字
float price; //图书价格
}Book;
typedef struct{
Book *elem; //存储空间的基地址
int length; //当前图书个数
}SqList;
四、 顺序表的两种存储方式
逻辑结构存储到存储结构时,逻辑位序和物理位序相差1
静态存储
#define MAXSIZE 100
typedef struct{
ElemType elem[MAXSIZE];
int length;
}SqList;
动态存储
typedef struct{
ElemType *elem;
int length;
}SqList;
L.elem = (ElemType*)malloc(sizeof(ElemType)*MAXSIZE);
- 其中sizeof后面的*是乘法的意思。
- SqList L;//定义变量L,L是 SqList 这种类型的,L是个顺序表。