0


数据结构顺序表

数据结构顺序表

顺序表简介

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

顺序表优点

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

顺序表缺点

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

顺序表定义

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 所有, 如有侵权,请联系我们删除。

“数据结构顺序表”的评论:

还没有评论