数据结构中顺序表是最简单的一种表。要想学习顺序表通过指针动态的初始化顺序表,先得了解一些基本概念。比如malloc函数是动态开辟内存空间的,free函数是释放malloc开辟的内存空间的。malloc函数动态开辟内存空间后会返回一个void类型的指针起始地址。所以要用这个函数就必须强制转换成你所定义的数据类型。所谓动态分配内存就会解决起始内存存满的情况,我们就可以再写一个扩容的函数来增加我们的内存空间。但是这样的扩容方式有一点缺点就是耗费时间,因为要想开辟新的空间,就必须把旧的空间元素复制到新的内存空间,就导致时间耗费大。下面请看详细的代码:
#include <iostream>
#include <stdlib.h>
#define InitSize 10//宏定义初始数组大小
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
//动态定义表结构(malloc函数:动态申请空间;free函数:动态释放空间)
typedef struct {
int *data;//指示动态分配数组的指针
int MaxSize;//定义表最大容量
int length;//定义表当前长度
}SeqList;
//初始化动态分配表的结构(通过malloc函数动态申请一连串的内存空间)
void InitList(SeqList &L){
L.data = (int*)malloc(InitSize * sizeof(int));
L.length = 0;
L.MaxSize = InitSize;
// for(int i=0;i<L.MaxSize;i++){
// L.data[i] = 0;
// }
}
//增加内存空间
void IncreaseSize(SeqList &L,int len){
int *p = L.data;//原来的数组指针
L.data = (int*)malloc((L.MaxSize+len) * sizeof(int));//利用malloc函数申请增加len长度的连续空间
//由于是数组,想要扩容必须申请新的大空间,然后再将旧的数据拷贝过来
for(int i=0;i<L.length;i++){
L.data[i]=p[i];
}
L.MaxSize = L.MaxSize + len;
free(p);//避免浪费,释放原来的内存空间
}
int main(int argc, char** argv) {
SeqList L;//初始化表
InitList(L);
printf("%dn",L.MaxSize);
// for(int i=0;i<L.MaxSize;i++){
// printf("%dt",L.data[i]);
// }
IncreaseSize(L,5);//增加5个int空间
printf("%dn",L.MaxSize);
// for(int i=0;i<L.MaxSize;i++){
// printf("%dt",L.data[i]);
// }
return 0;
}
{{o.name}}
{{m.name}}