#include<stdio.h>
#include<stdlib.h>
//定义一个顺序表 :
//存储结构:其逻辑上相邻,其物理上也相邻
//特点:1、可以随机访问 2、存储密度高 3、拓展内容不易 4、插入、删除不方便
//两种实现方式: 一种是静态(数组),另一种是动态(指针)
//第一种静态(数组)
//#define MaxSize 10 //定义最大长度
//typedef struct{
// ElemType data[MaxSize]; //用静态的“数组”存放数据元素
// int length; //顺序表的当前长度
//}SqList; //顺序表的类型定义
//第二种动态(malloc,free),用的时候别忘了头文件#include<stdlib.h>
#define InitSize 10 //默认最大长度
typedef struct{
int *data; //指示动态分配数组的指针
int MaxSize; //顺序表的最大容量
int length; //顺序表的当前长度
}SeqList;//sequence list
//初始化顺序表,为顺序表申请空间
void InitList(SeqList &L){
L.data=(int *)malloc(InitSize*sizeof(int));//给顺序表l申请空间来存数据
//一个int类型的数要占4个字节,那么n个int就要占4n个字节,而InitSize就是n
L.length=0;//初始化L列表的长度
L.MaxSize=InitSize; //初始化顺序表的最大容量为10
}
//增加顺序表的空间
void IncreaseList(SeqList &L,int len){//len值就是增加的空间
int *p=L.data;//p指针指向原来狭小的空间
L.data=(int *)malloc((L.MaxSize+len)*sizeof(int));//重新申请一个更大更舒适的空间
for(int i=0;i<L.length;i++){
L.data[i]=p[i];//将狭小空间里的数据移动到更大舒适的空间离去
}
L.MaxSize=L.MaxSize+len;
printf("顺序表的空间大小为\n");
printf("%d\n",L.MaxSize);
printf("顺序表的长度为\n");
printf("%d\n",L.length);
for(int i=0;i<L.length;i++)
printf("%d ",L.data[i]);//将新空间里的数据输出一下
free(p);//将原来狭小的空间释放
}
//使用顺序表
int main(){
SeqList L;//建立一个顺序表
InitList(L);//初始化一个顺序表的其它属性
for(int i=0;i<10;i++){//随便输入10个值初始化的顺序表中的值
scanf("%d",&L.data[i]);
}
IncreaseList(L,5);
return 0;
}