数据结构顺序表
顺序表简介
采用顺序存储结构的线性存储结构简称为顺序表,线性存储结构是指逻辑结构是一对一的,顺序结构是指物理结构是连续存储的,顺序表基本上是用数组形式来进行保存,顺序表操作没有限制。
顺序表优点
可以直接用下标获取或修改元素。
顺序表缺点
插入和删除需要移动元素。
顺序表定义
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;i<seqlist->length;++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;i<index;++i)//赋值数组索引之前的元素
temp[i]=seqlist->array[i];
temp[index]=element;//插入元素到数组索引
for(int i=index;i<seqlist->length-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;i<index;++i)//赋值数组索引之前的元素
temp[i]=seqlist->array[i];
for(int i=index;i<seqlist->length;++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<stdio.h>
#include<stdlib.h>
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;i<index;++i)//赋值数组索引之前的元素
temp[i]=seqlist->array[i];
temp[index]=element;//插入数组第索引个元素为元素
for(int i=index;i<seqlist->length-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;i<index;++i)//赋值数组索引之前的元素
temp[i]=seqlist->array[i];
for(int i=index;i<seqlist->length;++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://blog.csdn.net/vbnetcx/article/details/124243705
版权归原作者 vbnetcx 所有, 如有侵权,请联系我们删除。
版权归原作者 vbnetcx 所有, 如有侵权,请联系我们删除。