线性表的顺序存储
以物理位置相邻表示逻辑元素相邻
任意元素均可随机存取
顺序表定义成上方图片的样子
线性表大小为100
如何存储这个线性表,则需要一个数组,一个整数来存储线性表元素的个数
因为有两部分,所以需要线性表定义成为结构类型,顺序表类型
eg:
类c语言的补充
elemtype 代表元素类型 可换成char/float
或者定义一个类型elemtype
typedef char( int) elemtype
一个元素包含两个部分,就可以定义成结构类型
第二个是动态分配空间
data【0】就是数组的首地址,或者基地址
接受:sqlist L;
sqlist这种类型定义一个变量L
L有两个成员 L.data L.length
*data是指针类型的
数据结构和数组上对于少1
如果定义L是指针型的话可以用 ——>,就不需要用.了
如何做到:就L前加个*就可以。成员引用方式
插入,删除,查找用法重要
线性表的初始化
用的&
销毁和清空,求长度和判断为空应该书上都没有
常量阶 时间复杂度1
locateElem查找
ASL
插入insert
第i个元素位置上插入e
下标为i-1
时间复杂度为O(n)
有n个元素,当是可以有n+1个插入机会
n为线性表元素个数
顺序表的删除listdelete
顺序表要求连续空间,前驱和后继,不能有空的存在
线性表L上删除第i个位置的元素
平均时间复杂度为O(n)
用的是C语言 malloc,如果c++就可以用new
同理:free c++用delete
maxsize可能是100/200等等根据需要
从内存中找到800个字节
怎么分配就看elemtype类型了
带有*也是因为指针,data是指针类型的
elemtype指的是指向elemtype这种类型的指针
c++的
int *p1=new int;
new int 表示从内存当中动态的分配一块空间,空间多大呢?——放一个int型的
new出来的空间,我们也是得到这快空间的地址,所以必须赋值给指针变量*p1
int *p1=new int(10);
给这快空间赋初值10。 p1这个指针变量指向这个新很配的空间的
new获得一块空间,delete释放空间。
c++的参数传递
值传递:传递的参数的值,实参和形参各用各的空间。
a:3——传递给m:3
b:5—— n:5
m和n交换
m:5 n:3
当时当调用函数实行完毕,释放没有了
返回到主函数时ab的值不改变。
传地址: 实参和形参的地址一样,共用一块地址。
指针变量做参数:可(不)影响实参
1、交换前对应的a:3 b:5
交换后
a:5,b:3
返回后a,b的值发生变化了。
调用完毕后
m、n释放,对于a,b没有影响。
数组首元素地址 传递
引用传递:
i和j共用同一个空间
i变了,j也会变。
对形参的操作相当于对实参的操作。通过引用变成操作实参。
引用类型做参数的三点说明