- 前言
- 一、顺序表的静态分配
- 二、顺序表的动态分配
- 总结
前言
本文给出了顺序表的静态分配和动态分配相关代码,以及动态分配的图示助于理解,代码实现使用的是C语言在线工具。无概念解释,初学者建议配合书本食用。
一、顺序表的静态分配
#include#define MaxSize 10 //定义最大长度 typedef struct{ int data[MaxSize]; //用静态的“数组”存放数据元素 int length; //顺序表的当前长度 }SqList; //顺序表的类型定义——Sequence //基本操作——初始化一个顺序表 void InitList(SqList &L){ for(int i = 0; i SqList L; //声明一个顺序表 InitList(L); //初始化顺序表 //尝试“违规”打印整个data数组 for(int i = 0; i printf("data[%d] = %dn", i, L.data[i]); } return 0; }
运行示例:
#include//malloc、free函数的头文件 #include #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; //顺序表初始长度为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.data[i] = p[i]; //将数据复制到新区域 } L.MaxSize = L.MaxSize + len; //顺序表最大长度增加 len free(p); //释放原来的内存空间 } int main(){ SeqList L; //声明一个顺序表 InitList(L); //初始化顺序表 //尝试“违规”打印整个data数组 printf("第一次打印n"); for(int i = 0; i printf("data[%d] = %dn", i, L.data[i]); } //往顺序表中随便插入几个元素 IncreaseSize(L, 5); //尝试“违规”打印整个data数组 printf("第二次打印n"); for(int i = 0; i printf("data[%d] = %dn", i, L.data[i]); } return 0; }
运行示例:
图示:
总结
掰掰。



