一、定义一段代码:
①定义一个指针,指向第一个数据元素
②因为在动态分配在,数据的大小和容量是可以变的,所以,定义一个MaxSize表示顺序表的最大容量
二、函数
①c语言中,定义俩个函数,malloc和free
②malloc函数的原理:
1.申请一整片连续的存储空间
2.执行结束后返回一个指向,这片空间的起始内存地址,的一个指针
3.强制转换
如返回int,则ElemType-->int,而此时为ElemType
4.设定好的指针返回给data
所以,data指向了这片空间的起始地址
5.存储空间大小
例: 4B*10
三、示例
分析代码步骤:
1.定义一个main函数,执行SeqList声明顺序表L
--执行代码后,内存就生成一片存储空间,共三个变量
2.执行InitList(L),初始化顺序表L
①执行后,定义的InitList()方法会执行,malloc函数会生成一整片连续的存储空间
--这片存储空间的大小,10*4B
②然后,malloc会返回一个指针data,这个指针的类型与定义的动态分配的指针相同(强制转换)
③然后,L.data将指针的值返回data
④执行完一整句代码后,*data指向malloc函数创建的存储空间的起始地址
⑤接下来
--L.length把顺序表的当前长度设为0
--L.MaxSize把顺序表的最大容量设置为跟初始值InitSize一致
3.往顺序表插入几个值,把顺序表填满
--此时,MaxSize和length的值为10
思考:
再往后,再想加入元素,但顺序表的长度已经满了,怎么办?
4.实现一个函数,IncreaseSize,增加数组长度
①参数len,表示顺序表L要拓展多少个长度,5个
②定义一个int *p,把data指针的值,赋值给*p,且指针data和p指向同一个位置
③再定义一个malloc函数,生成新的一整片空间
④而因为这是一片新的空间,里面并没有存值,所以L.data让*data指向这片空间
⑤然后,用一个for循环把原顺序表的值给复制过来
⑥然后,增加顺序表最大长度
⑦然后,free函数,把*p指向的那段原顺序表空间,释放出来,归还给系统