数据结构顺序表

数据结构顺序表,第1张

数据结构顺序表 顺序表简介

采用顺序存储结构的线性存储结构简称为顺序表,线性存储结构是指逻辑结构是一对一的,顺序结构是指物理结构是连续存储的,顺序表基本上是用数组形式来进行保存,顺序表 *** 作没有限制。

顺序表优点

可以直接用下标获取或修改元素。

顺序表缺点

插入和删除需要移动元素。

顺序表定义
typedef struct
{
	int *array;//数组
	int length;//长度
}SeqList;//顺序表
创建顺序表
SeqList SeqList_Create(void)//创建顺序表
{
    SeqList seqlist={(int*)calloc(0,sizeof(int)),0};//顺序表,(用calloc函数时记得引用stdlib.h头文件)
	return seqlist;//返回顺序表
}
 顺序表获取长度 
int SeqList_GetLength(SeqList *seqlist/*顺序表*/)//顺序表获取长度
{
	return seqlist->length;//返回顺序表长度并且退出函数
}
顺序表清空元素
void SeqList_Clear(SeqList *seqlist/*顺序表*/)//顺序表清空元素
{
	free(seqlist->array);//数组删除了动态内存
	seqlist->length=0;//长度清空为0个
	seqlist->array=(int*)calloc(0,sizeof(int));//数组清空为0个动态内存
}
顺序表输出元素
void SeqList_Output(SeqList *seqlist/*顺序表*/)//顺序表输出
{
	for(int i=0;ilength;++i)
		printf("%d ",seqlist->array[i]);
	printf("\n");
}
顺序表插入元素
void SeqList_Insert(SeqList *seqlist/*顺序表*/,int index/*索引*/,int element/*元素*/)//顺序表插入元素
{
	if(seqlist->array==NULL||index<0||index>seqlist->length)//数组等于空指针或者索引超出范围
		return;//退出函数
	int *temp=(int*)calloc(++seqlist->length,sizeof(int));//临时数组
	for(int i=0;iarray[i];
	temp[index]=element;//插入元素到数组索引
	for(int i=index;ilength-1;++i)//赋值数组索引之后的元素
		temp[i+1]=seqlist->array[i];
	free(seqlist->array);//数组删除了动态内存
	seqlist->array=temp;//数组指向临时数组
}
顺序表删除元素
void SeqList_Delete(SeqList *seqlist/*顺序表*/,int index/*索引*/)//顺序表删除元素
{
	if(seqlist->array==NULL||seqlist->length<1||index<0||index>=seqlist->length)//数组等于空指针或者或者长度小于1索引超出范围
		return;//退出函数
	int *temp=(int*)calloc(--seqlist->length,sizeof(int));//临时数组
	for(int i=0;iarray[i];
	for(int i=index;ilength;++i)//赋值数组索引及之后的元素
		temp[i]=seqlist->array[i+1];
	free(seqlist->array);//数组删除了动态内存
	seqlist->array=temp;//数组指向临时数组
}
顺序表修改元素
void SeqList_Modify(SeqList *seqlist/*顺序表*/,int index/*索引*/,int element/*元素*/)//顺序表修改元素
{
	if(seqlist->array==NULL||seqlist->length<1||index<0||index>=seqlist->length)//数组等于空指针或者或者长度小于1索引超出范围
		return;//退出函数
	seqlist->array[index]=element;//修改数组第索引个元素为元素
}
顺序表获取元素
int SeqList_Get(SeqList *seqlist/*顺序表*/,int index/*索引*/)//顺序表获取元素
{
	if(seqlist->array==NULL||seqlist->length<1||index<0||index>=seqlist->length)//数组等于空指针或者或者长度小于1索引超出范围
		return 2147483647;//返回2147483647并且退出函数
	return seqlist->array[index];//返回数组第索引个元素
}
主函数
int main(void)
{
	SeqList seqlist=SeqList_Create();//创建顺序表
	int select=0,index=0,element=0;//选择,索引,元素
	do{
		printf("0.退出程序\n1.顺序表获取长度\n2.顺序表清空元素\n3.顺序表插入元素\n4.顺序表删除元素\n5.顺序表修改元素\n6.顺序表获取元素\n输入选择号码:");
		scanf("%d",&select);
		if(select==1)//顺序表获取长度
			printf("%d\n",SeqList_GetLength(&seqlist));//顺序表获取长度
		else if(select==2)//顺序表清空元素
			SeqList_Clear(&seqlist);//顺序表清空元素
		else if(select==3)//顺序表插入元素
		{
			printf("输入插入的索引和元素:");
			scanf("%d%d",&index,&element);
			SeqList_Insert(&seqlist,index,element);//顺序表插入元素
		}
		else if(select==4)//顺序表删除元素
		{
			printf("输入删除的索引:");
			scanf("%d",&index);
			SeqList_Delete(&seqlist,index);//顺序表删除元素
		}
		else if(select==5)//顺序表修改元素
		{
			printf("输入修改的索引和元素:");
			scanf("%d%d",&index,&element);
			SeqList_Modify(&seqlist,index,element);//顺序表修改元素
		}
		else if(select==6)//顺序表获取元素
		{
			printf("输入获取的索引:\n");
			scanf("%d",&index);
			printf("%d\n",SeqList_Get(&seqlist,index));//顺序表获取元素
		}
	}while(select!=0);//选择不等于0
	free(seqlist.array);//数组删除了动态内存
	return 0;
}
全部代码 
#include
#include
typedef struct
{
	int *array;//数组
	int length;//长度
}SeqList;//顺序表
SeqList SeqList_Create(void)//创建顺序表
{
	SeqList seqlist={(int*)calloc(0,sizeof(int)),0};//顺序表,(用calloc函数时记得引用stdlib.h头文件)
	return seqlist;//返回顺序表
}
int SeqList_GetLength(SeqList *seqlist/*顺序表*/)//顺序表获取长度
{
	return seqlist->length;//返回顺序表长度并且退出函数
}
void SeqList_Clear(SeqList *seqlist/*顺序表*/)//顺序表清空
{
	free(seqlist->array);//数组删除了动态内存
	seqlist->length=0;//长度清空为0个
	seqlist->array=(int*)calloc(0,sizeof(int));//数组清空为0个动态内存
}
void SeqList_Insert(SeqList *seqlist/*顺序表*/,int index/*索引*/,int element/*元素*/)//顺序表插入元素
{
	if(seqlist->array==NULL||index<0||index>seqlist->length)//数组等于空指针或者索引超出范围
		return;//退出函数
	int *temp=(int*)calloc(++seqlist->length,sizeof(int));//临时数组
	for(int i=0;iarray[i];
	temp[index]=element;//插入数组第索引个元素为元素
	for(int i=index;ilength-1;++i)//赋值数组索引之后的元素
		temp[i+1]=seqlist->array[i];
	free(seqlist->array);//数组删除了动态内存
	seqlist->array=temp;//数组指向临时数组
}
void SeqList_Delete(SeqList *seqlist/*顺序表*/,int index/*索引*/)//顺序表删除元素
{
	if(seqlist->array==NULL||seqlist->length<1||index<0||index>=seqlist->length)//数组等于空指针或者或者长度小于1索引超出范围
		return;//退出函数
	int *temp=(int*)calloc(--seqlist->length,sizeof(int));//临时数组
	for(int i=0;iarray[i];
	for(int i=index;ilength;++i)//赋值数组索引及之后的元素
		temp[i]=seqlist->array[i+1];
	free(seqlist->array);//数组删除了动态内存
	seqlist->array=temp;//数组指向临时数组
}
void SeqList_Modify(SeqList *seqlist/*顺序表*/,int index/*索引*/,int element/*元素*/)//顺序表修改元素
{
	if(seqlist->array==NULL||seqlist->length<1||index<0||index>=seqlist->length)//数组等于空指针或者或者长度小于1索引超出范围
		return;//退出函数
	seqlist->array[index]=element;//修改数组第索引个元素为元素
}
int SeqList_Get(SeqList *seqlist/*顺序表*/,int index/*索引*/)//顺序表获取元素
{
	if(seqlist->array==NULL||seqlist->length<1||index<0||index>=seqlist->length)//数组等于空指针或者或者长度小于1索引超出范围
		return -1;//返回-1并且退出函数
	return seqlist->array[index];//返回数组第索引个元素
}
int main(void)
{
	SeqList seqlist=SeqList_Create();//创建顺序表
	int select=0,index=0,element=0;//选择,索引,元素
	do{
		printf("0.退出程序\n1.顺序表获取长度\n2.顺序表清空元素\n3.顺序表插入元素\n4.顺序表删除元素\n5.顺序表修改元素\n6.顺序表获取元素\n输入选择号码:");
		scanf("%d",&select);
		if(select==1)//顺序表获取长度
			printf("%d\n",SeqList_GetLength(&seqlist));//顺序表获取长度
		else if(select==2)//顺序表清空元素
			SeqList_Clear(&seqlist);//顺序表清空元素
		else if(select==3)//顺序表插入元素
		{
			printf("输入插入的索引和元素:");
			scanf("%d%d",&index,&element);
			SeqList_Insert(&seqlist,index,element);//顺序表插入元素
		}
		else if(select==4)//顺序表删除元素
		{
			printf("输入删除的索引:");
			scanf("%d",&index);
			SeqList_Delete(&seqlist,index);//顺序表删除元素
		}
		else if(select==5)//顺序表修改元素
		{
			printf("输入修改的索引和元素:");
			scanf("%d%d",&index,&element);
			SeqList_Modify(&seqlist,index,element);//顺序表修改元素
		}
		else if(select==6)//顺序表获取元素
		{
			printf("输入获取的索引:\n");
			scanf("%d",&index);
			printf("%d\n",SeqList_Get(&seqlist,index));//顺序表获取元素
		}
	}while(select!=0);//选择不等于0
	free(seqlist.array);//数组删除了动态内存
	return 0;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/706942.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-24
下一篇 2022-04-24

发表评论

登录后才能评论

评论列表(0条)

保存