一、什么是顺序表
线性表的顺序表示,将线性表的数据元素用地址连续发存储单元依次存储。
二、静态分配(C语言)
#include <stdio.h>
#define Maxsize 10 //定义一个最大长度
typdef struct{
int data[MaxAize];
int length;
}Sqlist; //定义一个Sqlist型的变量,一个该变量个共有4*11B,这也就是我们的顺序表。
Void InitList(Sqlist &L){
for(int i=0;i<MaxSize;i++)
L.data[i]=0; //for循环起到将内存中“脏数据”清除的作用,如过正确访问,这段可以不要。
L.length=0;
}
//这里按照命名规范,编了一个叫做IntList的函数,用来初始化顺序表。
inr main(){
Sqlist L; //声明一个顺序表L。
InitList(L); //初始化该顺序表。
for(int i=0;i<length;i++)
printf("data[%d]=%d\n",i,L.data[i]);
return 0;
}
三、动态分配
malloc函数介绍:
L.data=(ElemType*)malloc(sizeof(ElemType)*lnitsize);
malloc函数会生成一个指针,在这里我们使用强制转换将其生成指针转型为定义的数据元素类型指针,并赋给L.data指针。
在malloc后面的括号中,用ElemType类型数据大小×前面所需要的存储空间(Initsize)。申请一片该大小的连续空间。
注意:malloc和free的头文件都是#include<stdlib.h>
(C语言)动态分配
#include<stdlib.h>
#define InitSize 10; //默认的最大长度
定义结构体
typedef struct{
int *data; //指示动态分配数组的指针
int MaxSize; //顺序表最大容量
int length; //顺序表当前长度
}SeqList; //定义一个Sqlist型的变量
初始化线性表
void InitList(Seqlist &L){
L.data=(int*)malloc(InitSize*sizeof(int)); //申请一片连续的存储空间。
L.length=0;
L.MaxSize=InitSize;
}
扩容
void IncreaseSize(SeqList &L,int len){
int *p=L.data;
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; //将最大长度增加,注意这里,改变L下的MaxSize是地址传递,不需要返回值。
free(p); //释放原来内存空间。
}
主函数
int main(){
Seqlist L;
InitList(L);
InctreaseSize(L,5);
return 0;
}