栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构顺序存储及增删改查功能代码 7.19(linux c语言)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构顺序存储及增删改查功能代码 7.19(linux c语言)

1、seqlist.h

#ifndef __SEQLIST_H__
#define __SEQLIST_H__

#define MAX 20
typedef int datatype;
typedef struct
{
    datatype data[MAX];
    int len;
}seqList;
//创建
seqList* listCreate();
//添加
int listAdd(seqList *S,datatype e);
//判满
int listFull(seqList *S);
//判空
int listEmpty(seqList *S);
//遍历
void listShow(seqList *S);
//插入
int listInsertPos(seqList *S,int pos,datatype e);
//删除
int listDeletePos(seqList *S,int pos);
//按值查找
int listSearchVaule(seqList *S,datatype e);
//按位置查找
datatype listSearchPos(seqList *S,int pos);
//按值修改
int listUpdateVaule(seqList *S,datatype old_e,datatype new_e);
//按位置修改
int listUpdatePos(seqList *S,int pos,datatype new_e);
//排序
void listSort(seqList *S);
//去重
void listDeleteRepeat(seqList *S);
//释放表
void listFree(seqList *S);

#endif

2、seqlist.c

#include "seqlist.h"
#include
#include
#include


seqList* listCreate()
{
    seqList *S=(seqList *)malloc(sizeof(seqList));
    if(S == NULL)
    {
        printf("申请空间失败!n");
        return NULL;
    }
    memset(S->data,0,sizeof(S->data)); //将数组清零
    S->len=0;
    printf("创建成功n");
    return S;
}

//判空
int listEmpty(seqList *S)
{
    if(S == NULL)
    {
        printf("顺序表不合法n");
        exit(0);
    }
    return S->len==0?1:0;  //1表示空,0表示非空

}

//判满
int listFull(seqList *S)
{
    return S->len==MAX?1:0;  //1表示满,0表示不满
}

//添加元素
int listAdd(seqList *S,datatype e)
{
    if(listFull(S))
    {
        printf("表满,添加失败n");
        return -1;
    }
    //添加逻辑
    S->data[S->len] = e;
    //表的变化
    S->len++;
    printf("添加成功n");
    return 0;
    
}
//遍历
void listShow(seqList *S)
{
    if(listEmpty(S))
    {
        printf("表空,遍历失败n");
        return ;
    }

    printf("目前顺序表中元素分别是:");
    for(int i=0;ilen;i++)
    {
        printf("%dt",S->data[i]);
    }
    putchar(10);
}

//插入
int listInsertPos(seqList *S,int pos,datatype e)
{
    if(listFull(S))
    {
        printf("表满,添加失败n");
        return -1;
    }
    if(pos <0 || pos >S->len)
    {
        printf("位置不合法n");
        return -2;
    }
    
    //腾空
    for(int i=S->len-1;i>=pos;i--)
    {
        S->data[i+1]=S->data[i];
    }
    //插入数据
    S->data[pos]=e;
    //表的变化
    S->len++;
    printf("插入成功n");
    return 0;
}

//删除
int listDeletePos(seqList *S,int pos)
{
    if(pos <0 || pos >S->len-1)
    {
        printf("位置不合法n");
        return -2;
    }
    //删除数据
    for(int i=pos+1;ilen;i++)
    {
        S->data[i-1]=S->data[i];
    }
    //表的变化
    S->len--;
    printf("删除成功n");
    return 0;
}

//按值查找,返回对应位置
int listSearchVaule(seqList *S,datatype e)
{
    if(listEmpty(S))
    {
        printf("表空n");
        return -1;
    }

    for(int i=0;ilen;i++)
    {
        if(e == S->data[i])
        {
            return i;
        }
    }
    return -2;   //表中没有相匹配数据

}

//按位置查找
datatype listSearchPos(seqList *S,int pos)
{
    if(listEmpty(S))
    {
        printf("表空n");
        return -1;
    }
    
    if(pos <0 || pos >S->len-1)
    {
        printf("位置不合法n");
        return -2;
    }else{
        return S->data[pos];
    }


}

//按值修改
int listUpdateVaule(seqList *S,datatype old_e,datatype new_e)
{


    for(int i=0;ilen;i++)
    {
        if(S->data[i] == old_e)
        {
            S->data[i]=new_e;
            return 0;
        }
    }
    return -2;
}

//按位置修改
int listUpdatePos(seqList *S,int pos,datatype new_e)
{
    if(listEmpty(S) || pos < 0 || pos > S->len-1)
    {
        printf("修改失败n");
        return -1;
    }
    //修改逻辑
    S->data[pos] = new_e;
}

//排序
void listSort(seqList *S)
{
    int i,j;
    datatype temp;
    for(i=0;ilen-1;i++)
    {
        for(j=0;jlen-i-1;j++)
        {
            if(S->data[j]>S->data[j+1])
            {
                temp=S->data[j];
                S->data[j]=S->data[j+1];
                S->data[j+1]=temp;
            }
        }
    }
    for(i=0;ilen;i++)
    {
        printf("%dt",S->data[i]);
    }
    putchar(10);
}

//去重
void listDeleteRepeat(seqList *S)
{
    if(S->len <= 1)
    {
        printf("去重失败n");
        return;
    }
    for(int i=0;ilen;i++)
    {
        for(int j=i+1;jlen;j++)
        {
            if(S->data[i] == S->data[j])
            {
                listDeletePos(S,j);
                j--;
            }
        }
    }
    printf("去重成功n");
}
//释放表
void listFree(seqList *S)
{
    if(S != NULL)
    {
        free(S);
    }
    S == NULL;   //防止野指针
    printf("释放成功n");
}

3、main.c

#include "seqlist.h"
#include
#include

int main(int argc, const char *argv[])
{
    int res1,res2,res3;
    seqList *S=listCreate();
    if(S ==NULL)
    {
        return -1;
    }

    //手动输入一堆数据
    listAdd(S,7);
    listAdd(S,2);
    listAdd(S,5);
    listAdd(S,12);
    listAdd(S,9);
    listAdd(S,6);
    listAdd(S,6);
    listAdd(S,6);

    listShow(S);
    
    listInsertPos(S,2,8);
    listShow(S);

    listDeletePos(S,2);
    listShow(S);

    //按值查找
    res1=listSearchVaule(S,12);
    if(res1 == -2)
    {
        printf("查找失败n");
    }else if(res1 == -1){
        printf("表空n");
    }else{
        printf("查找成功,在第%d个位置!n",res1+1);
    }

    //按位置查找
    res2=listSearchPos(S,4);
    if(res2 == -2)
    {
        printf("查找失败n");
    }else if(res2 == -1){
        printf("表空n");
    }else{
        printf("查找成功,这个位置上的值为:%dn",res2);
    }

    //按位置修改
    listUpdatePos(S,2,100);
    listShow(S);
    

    //按值修改
    res3=listUpdateVaule(S,9,55);
    if(res3 == -2)
    {
        printf("值不存在n");
    }
    listShow(S);
    
    //去重
    listDeleteRepeat(S);


    //排序
    printf("进行排序后结果为:n");
    listSort(S);
    
    //释放表
    listFree(S);
    S=NULL;
    listShow(S);

执行结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1018422.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号