说明:
由于原来顺序表的静态分配,浪费空间,且存在溢出现象,因此采取动态分配的方式,创建顺序表中的数组。跟C语言正常动态分配一样,需要直到扩充的大小,和数组指针即可。
代码如下:
看着多,其实原理差不多,主要知道哪些操作即可,无需了解具体代码。
#include <stdio.h>
#include <malloc.h>
#define initsize 3
typedef struct //定义一个动态顺序表的结构体,并起别名为sqlist
{
int *data; //因为是动态数组,所以先定一个指针,表示数组,后面malloc动态分配即可
int max;
int length;
}sqlist;
void initlist(sqlist &l)//初始化顺序表操作,并创建动态数组
{
l.data=(int*)malloc(sizeof(int)*initsize);
l.length=0;
l.max=initsize;
}
void increaselist(sqlist &l,int len)//扩充顺序表操作即最大容量
{
int *p=l.data;//先来个新的动态数组,从放表中数据
l.data=(int*)malloc(sizeof(int)*(initsize+len));//给顺序表进行动态扩充(initsize+len)
int i;
for(i=0;i<l.max;i++)//给原来顺序表中的数据,赋值到新的顺序表中
{
l.data[i]=p[i];
}
l.max=l.max+len;
}
int main()
{
sqlist l;
initlist(l);
//扩容前的顺序表存储空间
int i;
printf("扩容前的容量\n");
printf("max=%d\n",l.max);
for(i=0;i<l.max;i++)
{
l.data[i]=i+1;
l.length++;
printf("%d ",l.data[i]) ;
}
int len;
printf("\n你想给顺序表扩大多少\n");
scanf("%d",&len);
increaselist(l,len);//扩容len个大小的空间
printf("\n扩容后的容量\n");
printf("max=%d\n",l.max);
int k;
for(k=0;k<l.max;k++)
{
l.data[k]=k+1;
l.length++;
printf("%d ",l.data[k]);
}
return 0;
}