三十天挑战数据结构(3)线性表的顺序存储结构——创建、获取、插入、删除与打印

时隔两天的更新,和ddl打的不可开交。
好不容易有点时间了,接着我们的数据结构挑战!

既然要学,就从头开始学。
既然C语言基础不扎实,就从最简单的开始补。
前两期为了当时所需,出现的比较突然,这之后估计会挨着系统化的做出代码总结和学习了!!

于是我们今天来实现最简单的数据结构——线性表的顺序储存结构。

线性表的顺序储存结构图示:
在这里插入图片描述
毕竟是最简单的数据结构,就不详述它了,直接贴代码,其中注释很详细。
一共实现了:顺序表的初始化、建立、获取元素、插入元素和删除元素的基本操作。

#include<stdio.h>
#include<stdlib.h>

#define MAXSIZE 20
#define OK 1
#define ERROR 0

typedef int ElemType;
typedef int Status;

//线性表储存结构
typedef struct
{
    ElemType data[MAXSIZE];
    int length;
}SqList;

//初始化线性表顺序结构
Status InitSqList(SqList *L)
{
    int i;
    L->length = 0;
    for(i=0; i<MAXSIZE; i++)
        L->data[i] = 0;
    
    return OK;
}

//创建线性表顺序结构
Status CreateSqList(SqList *L)
{
    int i;
    if(L->length > MAXSIZE)
        return ERROR;
    printf("依次输入线性表元素:");
    for(i=0; i<L->length; i++)
    {
        scanf("%d", &L->data[i]);
    }
    return OK;
}

//获取元素操作:将线性表第i个元素保存在e中
Status GetElem(SqList *L, int i, ElemType *e)
{
    if(L->length == 0 || i < 1 || i > L->length)
        return ERROR;
    *e = L->data[i-1];
    return OK;
}

//插入元素操作:在线性表第i个位置插入e
Status ListInsert(SqList *L, int i, ElemType e)
{
    int k;
    if(L->length == MAXSIZE)//线性表满
        return ERROR;
    if(i<1 || i>L->length+1)//i范围错误
        return ERROR;
    if(i <= L->length)
    {
        for(k=L->length-1; k>=i-1; k--)
            L->data[k+1] = L->data[k];
    }
    L->data[i-1] = e;
    L->length++;
    return OK;
}

//删除元素操作:在线性表第i个删除元素并保存在e里
Status ListDelete(SqList *L, int i, ElemType *e)
{
    int k;
    if(L->length == 0)//线性表空
        return ERROR;
    if(i<1 || i>L->length+1)//i范围错误
        return ERROR;
    *e = L->data[i-1];
    if(i < L->length)
    {
        for(k=i; k<L->length; k++)
            L->data[k-1] = L->data[k];
    }
    L->length--;
    return OK;
}

//打印线性表元素
Status PrintSqList(SqList *L)
{
    int i;
    for(i=0; i<L->length; i++)
        printf("%d ", L->data[i]);

    return OK;
}

int main()
{
    SqList *L;
    L = (SqList *)malloc(sizeof(SqList));
    int number = 0;
    InitSqList(L);
    printf("请输入线性表的元素个数:");
    scanf("%d", &L->length);
    
    CreateSqList(L);
	
    int i;
    int e;
    
    //使用GetElem函数获取元素
    for(i=1; i<=L->length; i++)
    {
        GetElem(L, i, &e);
        printf("第%d个元素为%d\n", i, e);
    }

    //插入元素验证
    ListInsert(L, 3, 6);
    printf("插入6在第三个元素位置:");
    PrintSqList(L);
    printf("\n");

    //删除元素验证
    ListDelete(L, 3, &e);
    printf("删除第三个元素后:");
    PrintSqList(L);
}

程序运行结果:
在这里插入图片描述

每天提醒自己:数据结构学好的衷旨——多想多写多练!
一定要尝试自己写出C语言代码,每天能写一点都是进步,加油!!

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值