顺序表(代码片段)

宣哲 宣哲     2022-10-20     177

关键词:

顺序表

1、什么是顺序表

顺序表是将表中的数据依次存放在计算机内存中一组地址连续的存储单元中的一种数据结构,可以将顺序表看成一个可以动态改变大小的数组。

数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,顺序表是线性表的一种,也就是采用顺序存储结构的线性表简称为"顺序表"。

顺序表的存储特点是:只要确定了起始位置 ,数据可以通过指定位置得到:首地址+(位置*偏移大小)

2、顺序表的定义

#define MAX_SIZE 128				//顺序表的元素大小
typedef int Type					//类型的定义,这里用Type替代int是为了后续改变类型方便
struct Array

	Type *data; 						//存储数组的指针	
	int length; 						//顺序表里元素的个数
	int capacity;						//顺序表内存空间大小
;

3、顺序表的功能实现

3.1 构造一个空的顺序表

//3.1构造一个空的顺序表
Array* arr_init()

	Array* temp = (Array*)malloc(sizeof(Array));	//结构体初始化
	if (temp == NULL)
	
		printf("顺序表开辟空间失败");
		return NULL;
	

	temp->data = (Type*)calloc(1,sizeof(Type));		//数据域初始化
	temp->lenth = 0;

	return temp;

3.2 销毁顺序表

void arr_free(Array* arr)

	if (arr != NULL)
	
		if(arr->data != NULL)
		free(arr->data);	//释放顺序表数据域

		free(arr);			//释放整个顺序表
	
	else 
	
		printf("顺序表为空");
	


3.3 重置为空表

void arr_clear(Array* arr)

	if (arr == NULL)
	
		printf("\\n顺序表为空:文件位置:%s 函数:%s 行数:%d \\n",__FILE__,__FUNCTION__,__LINE__); //如果报错,输出错误信息
		return;
	
	else
	
		for (int i = 0; i < arr->lenth; ++i)
		
			arr->data[i] = 0;	//顺序表置空(元素置0)

		
		arr->data = (Type*)realloc(arr->data, sizeof(Type));	//顺序表数据域置0
		arr->lenth = 0;
	
	
	/*
	* 或者先free,再开辟
	* free(arr->data);
	* arr->data = (Type*)calloc(1,sizeof(Type))
	* arr->lenth = 0;
	*/

3.4 判断是否为空表

int arr_empty(Array* arr)

	if (arr->lenth == 0)
	
		printf("顺序表数据为空");
		return 1;
	
	return 0;

3.5 返回第i个数据元素的值

Type arr_get(Array* arr, int i)

	if (arr == NULL)
	
		printf("\\n顺序表为空:文件位置:%s 函数:%s 行数:%d \\n", __FILE__, __FUNCTION__, __LINE__);
		return NULL;
	
	if (arr->data == NULL)
	
		printf("\\n顺序表数据域为空:文件位置:%s 函数:%s 行数:%d \\n", __FILE__, __FUNCTION__, __LINE__);
		return NULL;
	
	arr_empty(arr);

	if (i > arr->lenth)
	
		printf("\\n位置有误:文件位置:%s 函数:%s 行数:%d \\n", __FILE__, __FUNCTION__, __LINE__);
		return NULL;
	
	return arr->data[i - 1];

3.6 插入顺序表元素

void arr_push(Array* arr, Type val)

	if (arr == NULL)
	
		printf("\\n顺序表为空:文件位置:%s 函数:%s 行数:%d \\n", __FILE__, __FUNCTION__, __LINE__);
		return;
	
	if (arr->data == NULL)
	
		printf("\\n顺序表数据域为空:文件位置:%s 函数:%s 行数:%d \\n", __FILE__, __FUNCTION__, __LINE__);
		return;
	
	arr->lenth++;	//长度+1
	arr->data = (Type*)realloc(arr->data, sizeof(Type) * arr->lenth);	//顺序表数据域内存扩大
	arr->data[arr->lenth - 1] = val;	//尾插
	

3.7 在顺序表指定位置插入新的数据元素

void arr_insert(Array* arr, int index, Type val)

	if (arr == NULL)
	
		printf("\\n顺序表为空:文件位置:%s 函数:%s 行数:%d \\n", __FILE__, __FUNCTION__, __LINE__);
		return;
	
	if (arr->data == NULL)
	
		printf("\\n顺序表数据域为空:文件位置:%s 函数:%s 行数:%d \\n", __FILE__, __FUNCTION__, __LINE__);
		return;
	
	arr_empty(arr);

	if (index > arr->lenth)
	
		printf("\\n插入位置有误:文件位置:%s 函数:%s 行数:%d \\n", __FILE__, __FUNCTION__, __LINE__);
		return;
	


	int i = arr->lenth++;
	arr->data = (Type*)realloc(arr->data, sizeof(Type) * arr->lenth);
	for (int j = arr->lenth - 1; j > index -1; --j)	//把插入数据之后的元素向后移动
	
		
		arr->data[j] = arr->data[j-1];
	
	arr->data[index-1] = val;



3.8 删除顺序表指定位置的数据元素,并返回元素的值

Type arr_remove(Array* arr, int index)

	if (arr == NULL)
	
		printf("\\n顺序表为空:文件位置:%s 函数:%s 行数:%d \\n", __FILE__, __FUNCTION__, __LINE__);
		return NULL;
	
	if (arr->data == NULL)
	
		printf("\\n顺序表数据域为空:文件位置:%s 函数:%s 行数:%d \\n", __FILE__, __FUNCTION__, __LINE__);
		return NULL;
	
	if (index > arr->lenth)
	
		printf("\\n插入位置有误:文件位置:%s 函数:%s 行数:%d \\n", __FILE__, __FUNCTION__, __LINE__);
		return NULL;
	
	arr_empty(arr);

	int temp = arr->data[index - 1];	//记录被删除元素

	for (int i = index - 1; i < arr->lenth; ++i)
	
		arr->data[i] = arr->data[i + 1];
	
	arr->lenth--;
	arr->data = (Type*)realloc(arr->data, sizeof(Type) * arr->lenth);

	return temp;

3.9 输出顺序表

void arr_out(Array* arr)

	if (arr == NULL)
	
		printf("\\n顺序表为空:文件位置:%s 函数:%s 行数:%d \\n", __FILE__, __FUNCTION__, __LINE__);
		return;
	
	if (arr->data == NULL)
	
		printf("\\n顺序表数据域为空:文件位置:%s 函数:%s 行数:%d \\n", __FILE__, __FUNCTION__, __LINE__);
		return;
	
	arr_empty(arr);
	for (int i = 0; i < arr->lenth; ++i)
	
		printf(T, arr->data[i]);
	

3.10 从尾部删除顺序表

Type arr_pop(Array* arr)

	if (arr == NULL)
	
		printf("\\n顺序表为空:文件位置:%s 函数:%s 行数:%d \\n", __FILE__, __FUNCTION__, __LINE__);
		return NULL;
	
	if (arr->data == NULL)
	
		printf("\\n顺序表数据域为空:文件位置:%s 函数:%s 行数:%d \\n", __FILE__, __FUNCTION__, __LINE__);
		return NULL;
	
	arr_empty(arr);
	int temp = arr->data[arr->lenth - 1];
	arr->lenth--;
	arr->data = (Type*)realloc(arr->data, sizeof(Type) * arr->lenth);
	return temp;

当然也可以用宏定义替代报错

#define Error(str) printf("\\n%s 文件位置:%s 函数:%s 行数:%d \\n", __FILE__, __FUNCTION__, __LINE__);

//这样只需要在代码里写Error("顺序表为空 ");了

数据结构之顺序表(代码片段)

目录顺序表概念顺序表实现静态顺序表的结构定义动态顺序表的结构定义顺序表初始化顺序表打印检查空间进行扩容顺序表尾插顺序表尾删顺序表头插顺序表头删顺序表查找在任意位置插入在任意位置删除顺序表销毁头文件源文... 查看详情

数据结构之顺序表(代码片段)

目录顺序表概念顺序表实现静态顺序表的结构定义动态顺序表的结构定义顺序表初始化顺序表打印检查空间进行扩容顺序表尾插顺序表尾删顺序表头插顺序表头删顺序表查找在任意位置插入在任意位置删除顺序表销毁头文件源文... 查看详情

数据结构之顺序表(代码片段)

文章目录线性表顺序表的概念及结构顺序表的功能实现定义顺序表顺序表初始化顺序表打印顺序表尾插顺序表尾删顺序表头插顺序表头删查找指定元素在指定位置插入删除指定位置销毁顺序表总结SeqList.hSeqList.c线性表线性表(linea... 查看详情

数据结构顺序表(代码片段)

前言:本章介绍的主要内容是顺序表文章目录1.线性表2.顺序表2.1概念及结构2.2顺序表分类3.动态顺序表项目创建3.1定义顺序表思考下为何使用typedef?3.2顺序表的初始化思考这样进行初始化可行否?修改后的正确初始... 查看详情

顺序表(代码片段)

1.顺序表的定义顺序表是线性表的顺序表示,即用一组地址连续的存储单元依次存储线性表的数据元素。2.顺序表的存储结构为了使顺序表的空间分配尽可能不受限制,这里先让顺序表的初始化容量为8,当空间不足时再对容量进... 查看详情

数据结构之顺序表(代码片段)

文章目录前言顺序表项目详细分配.定义顺序表顺序表之初始化方法实现顺序表之打印方法顺序表之尾插方法实现顺序表之检查容量方法实现顺序表之头插方法实现顺序表之尾删方法实现顺序表之头删方法实现顺序表之查找元素... 查看详情

数据结构顺序表(代码片段)

顺序表1.DS顺序表--类实现题目描述输入输出输入样例输出样例参考代码2.DS顺序表--连续操作题目描述输入输出输入样例输出样例参考代码3.DS顺序表--合并操作题目描述输入输出输入样例输出样例参考代码4.DS顺序表之循环移位题... 查看详情

线性表之顺序存储结构(顺序表)(代码片段)

目录1.线性表2.顺序存储结构(顺序表)2.1顺序表一般可以分为: 1.静态顺序表:使用定长数组存储元素 1.1静态顺序表:顺序表的大小是确定的,容量是固定的.    结论:静态顺序表不是很常量,了解就行.2.动态顺序表:... 查看详情

01=顺序表(python完整代码)(代码片段)

一、顺序表顺序表是指采用顺序存储的方式来存储数据元素的线性表,顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。1.1顺序表结构顺序表中包括元素存储区的容量和当前表中已有的元素个数两... 查看详情

顺序表代码实现(代码片段)

实现顺序表的头文件seqList.htypedefintSLDataType;typedefstructseqList SLDataType*_data;//需要动态开辟的数组 size_t_size;//有效元素个数 size_t_capacity;//元素容量大小seqList;voidinitSeqList(seqList*sl);//初始化顺序表voidpush_back(seqLis 查看详情

数据结构学习笔记--顺序表(代码片段)

1.顺序表概念顺序表是用以一段物理地址连续的存储单眼依次存储数据元素的线性结构,一般情况采用数组存储。在数组上完成数据的增删查改。顺序表一般分为静态顺序表和动态顺序表,这里主要讲如何实现动态顺序表... 查看详情

02线性表之顺序表(代码片段)

...就要吃  ~  嗝 ———路飞 目录1.本章重点2.线性表3.顺序表实现3.1顺序表的概念及结构4.静态顺序表5.动态顺序表 5.1“增”尾插:头插:5.2“删”尾删头删5.3随机“插入”5.4随机“删除”5.5内存销毁5.6“改”5.7“查”6... 查看详情

《线性表》——“顺序表”(代码片段)

顺序表(1)——静态分配(数组)相关操作(创销,增删查):#include<stdio.h>#include<stdlib.h>#defineMaxSize10//顺序表定义类型(静态分配—数组)typedefstruct intda 查看详情

顺序表的实现以及力扣练习题(代码片段)

目录线性表顺序表顺序表的实现顺序表的初始化顺序表的销毁顺序表的打印顺序表检查是否要扩容顺序表的尾插顺序表的头插顺序表的尾删顺序表的头删顺序表的查找顺序表在pos位置插入x顺序表删除pos位置的值顺序表修改pos位... 查看详情

线性表之顺序表(代码片段)

...:#defineMaxSize100typedefstructintdata[MaxSize];intlength;Sqlist;  顺序表在内存中以数组形式保存,是一组连续的内存空间。顺序表基本算法:构造一个空的线性表://初始化线性表STATUSInitList(Sqlist&L)//置表长为0L.length=0;returnOK;返回指定... 查看详情

数据结构----顺序表,链表(代码片段)

常见的线性表:顺序表、链表、栈、队列、字符串...Ⅰ顺序表1)概念2)静态顺序表3)动态顺序表4)动态顺序表的常见接口5)顺序表OJ题Ⅱ链表1)概念2)单向链表①结构:②单向链表的接口实... 查看详情

线性表--02---顺序表(代码片段)

顺序表定义;顺序表是在计算机内存中以数组的形式保存的线性表.顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元,依次存储线性表中的各个元素.使得线性表中再... 查看详情

顺序表上基本运算的实现(代码片段)

1/*2程序功能:顺序表上基本运算的实现31.顺序表L的初始化42.创建一个顺序表L53.求顺序表L的长度64.按序号取顺序表L中的元素75.在顺序表L中查找元素e的位置86.在顺序表L中插入新元素97.在顺序表L中删除元素108.将线性表中元素输... 查看详情