线性表的顺序表示和实现1
在计算机内,线性表有两种基本的存储结构:顺序存储结构和链式存储结构
线性表的顺序表又称为顺序存储结构或顺序映像
1、顺序存储定义:
顺序存储定义:把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构
逻辑上相邻,物理上也相邻
基地址(起始位置):线性表的第一个数据元素a1的存储位置
2、顺序存储结构:
依次存储,地址连续,中间没有空出存储单元,(占用一片连续的存储空间)是一个典型的线性表顺序存储结构
3、顺序表中元素存储位置的计算:
知道首地址和每个元素占的内存单元数 即可计算每个元素的存储位置
任一元素均可随机存取(优点) 存和取
4、顺序表的顺序存储表示:
----- 用一维数组表示顺序表
线性表长度可变 但是数组的长度不可动态定义(不可变) ----- 单独用一变量表示顺序表的长度
5、线性表的定义:
#define LIST_INIT_SIZE 100
typedef struct{
ElemType elem[LIST_SIZE];
int length;
}SqList;
init(initialization初始化) SqList(顺序表) ElemType(元素类型)
多项式的顺序存储结构类型定义:
#define MAXSIZE 1000
typedef struct {
float p;
int e;
}Polynomial;
typedef struct {
Polynomial *elem;
int length;
}SqList;
Polynomial: 多项式
图书表的顺序存储结构类型定义:
#define MAXSIZE 10000 //图书表可能达到的最大长度
typedef struct { //图书信息定义
char no[20]; //图书ISBN
char name[50]; //图书名字
float price; //图书价格
}Book;
typedef struct {
Book *elem; //存储空间的基地址 Book型
int length; //图书表中当前图书的个数
}SqList; //图书表的顺序存储结构类型为SqList
6.类C语言有关操作
1.顺序表类型定义
typedef struct {
ElemType date[];
int length;
}SqList;
ElemType元素类型:可写char、float、Book结构类型、Polynomial结构类型
可事先做 typedef char ElemType; typedef int ElemType; 将ElemType定义为char/int类型来使用
2.数组定义
数组静态分配:
typedef struct {
ElemType date[MaxSize];
int length;
}SqList;
数组动态分配:
typedef struct {
ElemType *date;
int length;
}SqList;
3.C语言的内存动态分配
需要加载头文件:include < stdlib.h >
malloc(m)函数:开辟m字节长度的地址空间,并返回这段空间的首地址 m为整数
free§函数:释放指针p所指变量的存储空间,即彻底删除一个变量
动态分配内存:
SqList L;
L.date=(ElemType*)malloc(sizeof(ElemType)*MaxSize);
(申请的空间如何划分)malloc(需要的字节数)
(L.date是数组的首地址)
(char*)malloc(800) —> 800个空间
(int*)malloc(800) —> 200个空间
(Polynomial*)malloc(800) —> 100个空间
***** :( )是强制类型转换运算—>(int)强转为整数 (int*)强转为指向整型的指针
malloc() 与 free() 配套使用
new 与 delete 配套使用
4.C++的动态存储分配
new 类型名T (初值列表)
功能:申请存放T类型对象的内存空间,并依初值列表赋以初值
结果值:成功:T类型的指针,指向新分配的内存 失败:0(NULL)
int *p1 = new int; 没有赋初值
int *p1 = new int(10); 赋初值10
delete 指针P
功能:释放指针P所指向的内存。P必须是new操作的返回值
delete p1;
5.C++中的参数传递
参数传递的两种方式
1、传值方式:参数为整型、实型、字符型等
2、传地址:参数是指针变量
? 参数是引用类型(C++) &
? 参数是数组名
引用类型作参数
引用:给对象提供一个替代的名字
int i=5; int &j=i; (j引用i) j是i的一个替代名,操作i和j是一样的,i值改变时,j值也跟着改变
★:i、j地址一样,共用同一个空间
void swap (float &m, float &n){}; swap(a,b)
m引用a,n引用b &m=a, &m=b。m和a用同一块空间,n和b用同一块空间
相比一般变量作参数,节省了实参变量副本的空间
|