线性表的物理结构分为顺序存储和链式存储。以下分别是对顺序表和链表的相关操作的代码表示。
顺序表
一、顺序表的分配
1.、顺序表的静态分配
//对顺序表的静态分配 #define MaxSize 100 typedef struct{ int data[MaxSize]; //使用静态分配的方式 int length; //顺序表的当前长度 }SqList;
//初始化一个顺序表 void InitList(SqList &L){ for(int i = 0; i < MaxSize; i++){ //对数组中的所有元素进行初始化,虽然不初始化,编译器会自动给数据复制为0, //但是存在数组中的元素是系统留下来的脏数据 //注意for循环里面是MaxSize而不是length L.data[i] = 0; } L.length = 0; }
#include<iostream> int main(){ //在主函数里面检查顺序表是否初始化成功 SqList L; InitList(L); for(int i = 0; i < MaxSize; i++){ cout<<L.data[i]; } }
2.顺序表的动态分配
//对顺序表的动态分配 #define InitSize 100; //默认的最大长度 typedef struct{ int *data; //指示动态分配数组的指针 int MaxSize; //顺序表的最大容量 int length; //顺序表的当前长度 }SqList;
//动态增加数组的长度 void IncreaseSize(SqList &L,int len){ //这里用了引用传递参数 int *p = L.data; //建立一个指向数组的指针 L.MaxSize = InitSize + len; L.data = (int *)malloc((L.MaxSize+len)*sizeof(int)); //L.data重新指向了一个新的地址 for(int i = 0; i < L.length; i++){ L.data[i] = p[i]; //将数据复制到新的区域 } free(q); //释放原来的内存空间 }
二、顺序表的基本操作--插入