王道408顺序表代码1
自己学习课件里的代码,仅供学习使用
静态分配
#include<stdio.h>
#define MaxSize 10 //默认最大长度
typedef struct {
int data[MaxSize]; //用静态的数组存放数据
int length; //顺序表的最大容量
} SqList; //顺序表的类型定义
//基本操作——初始化一个顺序表
void InitList(SqList &L) {
L.length=0; //顺序表初始长度为0
for(int i=0; i<MaxSize; i++) {
L.data[i]=0; //将所有数据元素的初始值设置为默认值
L.length++;
}
}
int main() {
int i;
SqList L; //声明一个顺序表
InitList(L); //初始化顺序表
//尝试打印整个data数组
for(i=0; i<L.length; i++) {
printf("data[%d]=%d\n",i,L.data[i]);
}
return 0;
}
运行结果
动态分配
#include<stdio.h>
#include<stdlib.h>
#define InitSize 10 //默认最大长度
typedef struct {
int *data; //动态分配的指针
int MaxSize; // 顺序表的最大容量
int length; //顺序表的当前长度
} SeqList; //顺序表的类型定义
void InitList(SeqList &L) {
//用malloc函数申请一片连续的储存空间
L.data=(int *)malloc(InitSize*sizeof(int));
L.length=0; //初始化长度
L.MaxSize=InitSize; //设定最大值
}
//增加动态数组的长度
void IncreaseSize(SeqList&L, int len) { //len为增加的数量
int *p=L.data;
L.data=(int *)malloc((L.MaxSize+len)*sizeof(int));//加上len需增加的字节数
for(int i=0; i<L.MaxSize; i++) {
L.data[i]=p[i]; //将数据复制到新区域
}
L.MaxSize=L.MaxSize+len; // 顺序表最大长度增加
free(p); //释放原来的内存
}
int main() {
int i,k=0;
SeqList L; //声明一个顺序表
InitList(L); //初始化顺序表
//尝试打印整个data数组
for(i=0; i<L.MaxSize; i++) { //给顺序表赋值
L.data[i]=k;
k++;
printf("1.data[%d]=%d\n",i,L.data[i]);
}
IncreaseSize(L,5); //增加长度函数
for(i=0; i<L.MaxSize; i++) {
printf("2.data[%d]=%d\n",i,L.data[i]);
}
return 0;
}
运行结果