文章目录
- 1. 顺序表
- 2. 顺序表的初始化
1. 顺序表
顺序表(顺序存储结构) 存储数据时,会提前申请一整块足够大小的物理空间,然后将数据依次存储到一整块连续的存储空间内,存储时做到数据元素之间不留一丝缝隙。
使用顺序表存储集合 {1,2,3,4,5}
,数据最终的存储状态如图所示:
2. 顺序表的初始化
使用顺序表存储数据之前,除了要申请足够大小的物理空间之外,为了方便后期使用表中的数据,顺序表还需要实时记录以下 2 项数据:
- 顺序表申请的存储容量;
- 顺序表的长度,也就是表中当前存储数据元素的个数;
因此,我们需要自定义顺序表,C 语言实现代码如下:
typedef struct List
{int *head; //声明了一个名为head的长度不确定的数组,也叫“动态数组”int length; //记录当前顺序表的长度int size; //记录顺序表分配的存储容量
}SqList;
接下来初始化顺序表,即初步建立一个顺序表。建立顺序表需要做如下工作:
- 给 head 动态数组申请足够大小的物理空间;
- 给 size 和 length 赋初值;
C 语言初始化顺序表(创建空表)的代码如下:
#define SIZE 5 //对SIZE进行宏定义,表示顺序表申请空间的大小
SqList InitList()
{SqList L;L.head = (int *)malloc(SIZE * sizeof(int)); //构造一个空的顺序表,动态申请存储空间if(!(L.head)) //如果申请失败,作出提示并直接退出程序{printf("初始化失败");exit(0);}L.size = SIZE; //空表的初始存储空间为SIZEL.length = 0; //空表的长度初始化为0return L;
}
通过在主函数中调用 InitList 函数,就可以成功创建一个空的顺序表,然后我们可以试着向顺序表中添加一些元素再打印出来,C 语言完整代码清单如下:
#include<stdio.h>
#include<stdlib.h>#define SIZE 5 //对SIZE进行宏定义,表示顺序表申请空间的大小typedef struct List
{int *head; //声明了一个名为head的长度不确定的数组,也叫“动态数组”int length; //记录当前顺序表的长度int size; //记录顺序表分配的存储容量
}SqList;SqList InitList();
void DisplayList(SqList L);int main()
{SqList L = InitList();//向顺序表中添加元素for(int i = 0; i < L.size; i++){L.head[i] = (i+1);L.length++;}printf("顺序表中存储的元素分别是:\n");DisplayList(L);
}SqList InitList()
{SqList L;L.head = (int *)malloc(SIZE * sizeof(int)); //构造一个空的顺序表,动态申请存储空间if(!(L.head)) //如果申请失败,作出提示并直接退出程序{printf("初始化失败");exit(0);}L.size = SIZE; //空表的初始存储空间为SIZEL.length = 0; //空表的长度初始化为0return L;
}//输出顺序表中元素的函数
void DisplayList(SqList L)
{for(int i = 0; i < L.length; i++){printf("%d ", L.head[i]);}printf("\n");
}
程序运行结果如下:
顺序表中存储的元素分别是:
1 2 3 4 5