顺序表的结构及代码实现

匿名 (未验证) 提交于 2019-12-03 00:03:02

顺序表概念

顺序表是用一段物理地址连续的存储单元依次存储数据元素,通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系的线性结构,一般情况下采用数组存储,并在数组上完成数据的增删查改操作的一类线性表

动态顺序表的开辟

在建立顺序表时首先明确我们所需要引用的变量,一个存储数据的数组 array[ ] 、记录有效数据个数的 size、记录数组容量的 capacity

顺序表一般可以分为:

  • 静态顺序表:使用定长数组存储
// 顺序表的静态存储 #define N 100 typedef int SLDataType; typedef struct SeqList {    SLDataType array[N];    // 定长数组    size_t size;    // 有效数据的个数 }SeqList; 
  • 动态顺序表:使用动态开辟的数组存储
// 顺序表的动态存储 typedef struct SeqList {    SLDataType* array; // 指向动态开辟的数组    size_t size ; // 有效数据个数    size_t capicity ; // 容量空间的大小 }SeqList; 

静态顺序表只适用于确定知道需要存多少数据的场景。静态顺序表的定长数组容易导致空间浪费或数组越界,所以现实中基本都是使用动态顺序表,根据需要动态的分配空间大小

顺序表基本的增删查改

一 . 增删查改前期步骤

  • 建初始化函数

传入数组及初始容量,给数组开辟对应容量的空间,再进行判空操作则可以正常运行,此时有效数据个数为 0

void SeqListInit(SeqList*psl, size_t capacity) { 	psl->capacity = capacity; 	psl->array = (SLDataType*)malloc(capacity*sizeof(SeqList));//malloc内存不够会失败,先判空 	assert(psl->array); 	psl->size = 0; } 
  • 建容量查询函数

若容量与数据个数相等,则

void CheckCapacity(SeqList*psl) { 	assert(psl); 	if (psl->capacity && psl->size == psl->capacity) 	{ 		psl->capacity *= 2; 		psl->array = (SLDataType*)realloc(psl,psl->capacity*sizeof(SeqList)); 	} 	else if (!psl->capacity) 	{ 		psl->capacity += 10 * sizeof(SeqList); 		psl->array = (SLDataType*)realloc(psl,psl->capacity * sizeof(SeqList)); 	} } 

二 . 增加数据操作
1.在尾部插入数据

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!