数据结构学习第一天

#include<stdio.h>

#define MAXSIZE 100
typedef int ElemType;//可以根据后续变化转变类型double,float...

typedef struct//创建顺序表
{
    ElemType data[MAXSIZE];
    int lenght;
}SeqList;//结构体命名

void initList(SeqList* L)//顺序表-初始化(SeqList* L)结构体指针
{
    L->lenght = 0;//初始化为0
}

//顺序表-在尾部添加数据
int appendList(SeqList* L, ElemType e)//传入结构体指针和要添加的数据
{
    if (L->lenght == MAXSIZE) {
        printf("顺序表已满\n");
        return 0;
    }
    L->data[L->lenght] = e;//添加数据到顺序表末尾
    L->lenght++;//扩展顺序表长度
    return 1;
}

void listElem(SeqList* L)//遍历顺序表内数据
{
    int i;
    for (i = 0;i < L->lenght;i++)//根据表长确定遍历次数,数据下标和本身位置差1,不用带=
    {
        printf("%d ", L->data[i]);
    }
    printf("\n");
}

//顺序表-插入元素
void insertList(SeqList* L,int pos,ElemType e)//顺序表,插入位置position,插入元素
{
    int i;
    if (L->lenght == MAXSIZE) {
        printf("顺序表已满\n");
        return 0;
    }

    if (pos<1 || pos>L->lenght) {
        printf("元素插入位置错误\n");
        return 0;
    }

    if (pos <= L->lenght) {
        for (i = L->lenght - 1;i >= pos - 1;i-- )//从后往前遍历数据,遍历下标需-1 data[0]=顺序表第1个元素
        {
            L->data[i + 1] = L->data[i];//最后一个元素向后移动一位 =后的数赋值给=前(a=2)
        }
        L->data[pos - 1] = e;
        L->lenght++;
        return 1;
    }
}

void deleteList(SeqList* L, int pos, ElemType *e)//直接选取被删除元素的地址
{
    int i;
    *e = L->data[pos - 1];
    if (pos < L->lenght) {
        for (i = pos;i < L->lenght; i++)
        {
            L->data[i - 1] = L->data[i];//=后的值给到=前的值,实现元素前移
        }
    }
    L->data[pos - 1];
    L->lenght--;
    return 1;
}

//顺序表-查找
int findList(SeqList* L, ElemType e)
{
    int i;
    if (L->lenght == 0) {
        printf("这是空列表\n");
        return 0;
    }

    for (i = 0;i < L->lenght;i++)//遍历顺序表查找
    {
        if (L->data[i] == e) {
            return i + 1;//实际位置和下标差1
        }
    }
    return 0;
}
int main()
{
    SeqList list;
    initList(&list);
    printf("初始化成功,目前长度占用%d\n", list.lenght);
    printf("目前占用内存%zu个字节\n", sizeof(list.data));//4*100=40 数组分配10个整型变量

    appendList(&list, 88);
    appendList(&list, 45);
    appendList(&list, 43);
    appendList(&list, 17);
    appendList(&list, 5);

    listElem(&list);

    insertList(&list, 2, 18);
    listElem(&list);

    ElemType Datadelete;
    deleteList(&list, 2, &Datadelete);
    printf("被删除的数据为%d\n", Datadelete);
    listElem(&list);

    printf("%d\n", findList(&list, 43));

    return 0;
}

代码学习:

《数据结构(C 语言描述)》也许是全站最良心最通俗易懂最好看的数据结构课(最迟每周五更新~~)_哔哩哔哩_bilibili

老师讲的很好,很适合初学者,看一遍代码然后自己在手敲一遍在听老师讲一遍,效果很好。希望帮助到大家,也请大家多多支持这位up

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值