c语言实现线性表的建立,初始化,插入,删除,查找,遍历以及时间复杂度分析

本文详细介绍了使用C语言实现线性表的建立、初始化、插入、删除、查找和遍历。在顺序表结构中,元素的逻辑顺序与物理顺序相同。分析了插入操作在最好、最坏和平均情况下的时间复杂度,分别为O(1)、O(n)和O(n),删除操作同样为O(1)、O(n)和O(n)。此外,还强调了在删除操作中正确保存元素值的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

c语言实现线性表的建立,初始化,插入,删除,查找,遍历以及时间复杂度分析

顺序表的特点是元素的逻辑顺序与物理顺序相同
顺序表结构:

#include <stdio.h>
#define InitSize 100
typedef int ElemType;

typedef struct{
    ElemType * data;
    int MaxSize , length;
}SeqList;

int InitList(SeqList *L); //顺序表初始化
int ListInsert(SeqList *L, int i, ElemType e);
int ListDelete(SeqList *L, int i, ElemType *e);
int LocateElem(SeqList L, ElemType e);//查找顺序表中第一个等于e的元素的位置

顺序表初始化

int InitList(SeqList *L){
    L->data = (ElemType*)malloc(sizeof(ElemType)*InitSize);
    if(!L->data) return -1;
    L->length = 0;
    L->MaxSize = 50;
    return 1;
}

顺序表插入
算法就是先后移,然后进行插入

int ListInsert(SeqList *L, int i, ElemType e){
    if(i < 1 || i > L->length+1) return -1;
    if(L->length > L->MaxSize) return -1;
    for(int j = L->length ; j >= i ; j--)
        L->data[j] = L->data[j-1];
    L->data[i-1] = e;
    L->length++;
    return 1;
}

插入的时间复杂度的分析:
最好情况下不进行移动O(1)
最坏的情况下移动n次,O(n)
平均情况下,插入第i个位置要移动n+1-i次,根据全概率公式求和有平均时间复杂度O(n)

顺序表删除
先保存元素的值,然后再进行向前移动

int ListDelete(SeqList *L, int i, ElemType *e){
    if(i < 1 || i > L->length+1) return -1;
    *e = L->data[i-1];
    for(int j = i; j < L->length; j++)
        L->data[j-1] = L->data[j];
    L->length--;
    return 1;
}

删除的时间复杂度的分析:
最好情况下不进行移动O(1)
最坏的情况下移动n-1次,除了第一个,其余的都要移动,O(n)
平均情况下,删除第i个位置要移动n-i次,根据全概率公式求和有平均时间复杂度O(n)

注意保存e的值:*e = data[i-1];
e是int*类型的,也就是指针类型
如果是e=data[i-1]则,e指向这个地址,而不是值
*e表示指针指向的内存地址中存放的内容
&e表示取指针e的地址,&在c语言里面是取地址的符号,在c++里面才是引用。

查找顺序表中第一个等于e的元素的位置

int LocateElem(SeqList L, ElemType e){
    int i;
    for(i = 0; i < L.length; i++){
        if(L.data[i] == e)
            return i+1;
    }
    return -1;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值