线性表的顺序表示与实现1

线性表的顺序表示和实现1

在计算机内,线性表有两种基本的存储结构:顺序存储结构和链式存储结构

线性表的顺序表又称为顺序存储结构或顺序映像

1、顺序存储定义:

顺序存储定义:把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构

image-20211014091834506

逻辑上相邻,物理上也相邻

基地址(起始位置):线性表的第一个数据元素a1的存储位置

2、顺序存储结构:

依次存储,地址连续,中间没有空出存储单元,(占用一片连续的存储空间)是一个典型的线性表顺序存储结构

3、顺序表中元素存储位置的计算:

知道首地址和每个元素占的内存单元数 即可计算每个元素的存储位置

任一元素均可随机存取(优点) 存和取

4、顺序表的顺序存储表示:

image-20211014164750265 ----- 用一维数组表示顺序表

线性表长度可变 但是数组的长度不可动态定义(不可变) ----- 单独用一变量表示顺序表的长度

5、线性表的定义:
#define LIST_INIT_SIZE 100   //线性表存储空间的初始分配量     
typedef struct{
    ElemType elem[LIST_SIZE];  //数组
    int length;  //当前长度
}SqList; 

init(initialization初始化) SqList(顺序表) ElemType(元素类型)

多项式的顺序存储结构类型定义:
image-20211014171033457
#define MAXSIZE 1000   //多项式可能达到的最大长度

typedef struct {    //多项式非零项的定义
    float p;        //系数
    int e;      	//指数
}Polynomial;//一个该元素类型8个字节(4+4)

typedef struct {    //线性表定义
    Polynomial *elem;  //存储空间的基地址    元素类型是Polynomial  好比int *elem
    int length;   	   //多项式中当前项的个数
}SqList;     
    

Polynomial: 多项式

图书表的顺序存储结构类型定义:
image-20211014172237278
#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; //用顺序表类型定义1个变量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用同一块空间

相比一般变量作参数,节省了实参变量副本的空间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值