线性表ADT(C语言实现)

文章介绍了链表作为数组替代方案的优势,包括动态定义长度和降低时间复杂度。通过C语言展示了链表结构、初始化、查找、插入、删除以及计算长度等操作。

对于一个用数组实现的普通表,通常情况C语言不允许对数组的长度进行动态定义。所以我们需要对表空间的最大值进行预估。而这样容易浪费大量的空间。并且,数组表所花费的时间复杂度,也是高昂的,例如做插入与删除算法时,在某个位置插入一个新的元素,这需要后面的所有元素后移一个位置,则做插入与删除算法时,最坏情况的时间复杂度为O(n)。所以我们引入一个新的线性表“链表”


链表的一般想法(单链表)

链表存储结构:

 链表就是通过next指针将表中的每个结点连接起来,每个结点中含有一个data域和next指针域,其中指针域存放着下一个元素的地址。这样做,只加了next域的空间,实现了可动态定义。并且也减少了时间复杂度。代码如下

typedef int Elemtype;
typedef struct LNode
{
    Elemtype data;
    struct LNode *next;
}LNode, Linklist;

链表初始化:

我们使用malloc去创建一个元素,然后让next=NULL就可以了。代码如下

void initlist(Linklist L)
{
    L = (LNode *)malloc(sizeof(LNode));
    if( !L )
    {
        exit(0);
    }
    L->next = NULL;
}

链表查找:

首先创建一个Find函数,它返回某个结点在表中的位置。代码如下

Linklist Find(Linklist L, Elemtype x)
{
    Linklist P;
    P = L->next;
    while( p!= NULL && P->data !=x )
    {
       
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值