c语言数据结构:顺序表增删改查函数的实现

在数据结构中,我们最先接触到的内容就是线性表,本片文章的内容就是线性表中对顺序表增删改查的c语言实现。(解释在代码中,建议边学习边看代码)

其中共包含:1、初始化  2、最后一位插入  3、遍历  4、特定位置插入数据元素  5、特定位置删除数据元素  6、查找数据元素e第一次出现的位置。

下面对函数进行解释:

1、下列代码中 我用Eelemtype 来对int 取别名,在本段代码中意义不明显,但是在大量数据中如果要改int 型为 double型,则取别名的有点就显现出来了。

2、顺序表最大值为 100

3、顺序表中包含 数据Data 和 长度 length(即位置)。

4、对结构体取别名 Sq

5、要注意顺序表的位置和在数组中序号的关系,length-1。

#include<stdio.h>
#include<stdlib.h>
typedef int Elemtype;
#define  Max  100
typedef struct 
{
    Elemtype Data[Max];
    int length;
}Sq;

void initList(Sq *L);//顺序表初始化,长度赋0
int addElem(Sq *L,int e);//顺序表最后一位插入
void listElem(Sq *L);//遍历顺序表
void insertElem(Sq *L,int location,int e);//在顺序表特定位置插入数据
void deleteElem(Sq *L,int location,Elemtype *e);//删除顺序表中指定位置及其值
int findElem(Sq *L,Elemtype e);//查找数据元素e第一次出现的位置
int main(int argc, char const *argv[])
{
    Sq list;
    initList(&list);
    printf("初始化成功,长度为:%d\n",list.length);
    printf("占用空间为:%ld\n",sizeof(list.Data));
    addElem(&list,88);
    addElem(&list,89);
    addElem(&list,90);
    addElem(&list,91);
    addElem(&list,92);
    addElem(&list,93);
    addElem(&list,94);
    addElem(&list,95);
    addElem(&list,96);
    listElem(&list);
    insertElem(&list,4,100);
    listElem(&list);
    Elemtype *e=malloc(sizeof(Elemtype));
    deleteElem(&list,3,e);
    listElem(&list);
    int f=findElem(&list,100);
    printf("位置是%d\n",f);
    return 0;
}
void initList(Sq *L)
{
    L->length=0;//初始化长度为0

}
int addElem(Sq *L,Elemtype e)
{
    if (L->length>=Max)//判断插入位置是否在合法范围
    {
        printf("顺序表已满");
    }
    else
    {
    L->Data[L->length]=e;//将数据e赋值到顺序表
    L->length++;//长度因增加数据自增
    }
    return 1;
}
void listElem(Sq *L)
{
    for (int i = 0; i < L->length; i++)//循环length次,将顺序表打印
    {
        printf("%d ",L->Data[i]);
    }
    printf("\n");

}
void insertElem(Sq *L,int location,int e)
{
    if (location>=L->length+1||location<1)//判断插入位置是否在合法范围
    {
        printf("该位置不合法");
    }
    else
    {
    int temp=0;
    L->length++;
    for (int i = L->length-1; i >=location; i--)//从顺序表末尾开始,将数据元素移向下一个位置,将插入位置空出
    {
        L->Data[i]=L->Data[i-1];
    }
    L->Data[location-1]=e;
    printf("插入元素完成\n");
    }
}
void deleteElem(Sq *L,int location,Elemtype *e)
{
    if (location>=L->length+1||location<1)
    {
        printf("该位置不合法");
    }
    else
    {
    *e=L->Data[location-1];
    for (int i = location-1; i <=L->length; i++)//从删除位置开始,将后一项迁移
    {
        L->Data[i]=L->Data[i+1];
    }
    L->length--;//长度自减,在下次添加时,会将原有位置覆盖,达到删除效果(同steam删除游戏)
    printf("删除元素完成\n");
    printf("删除的元素是:%d\n",*e);
    }
}
int findElem(Sq *L,Elemtype e)
{
    for (int i = 0; i < L->length-1; i++)//从0开始遍历数组,找到第一个等于e的值
    {
        if (L->Data[i]==e)
        {
            return i+1;
        }
    }
    return 0;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值