链表是个好东西

一、链表与数组的区别

1. 存储方式:数组是一种连续的存储结构,元素在内存中是依次存放的,通过索引可以快速访问任意位置的元素;而链表是一种非连续的存储结构,每个节点存储了下一个节点的地址,通过指针可以找到下一个节点。

2. 插入和删除操作:在数组中插入或删除元素时,需要移动其他元素来保持连续性,时间复杂度为O(n);而在链表中插入或删除节点时,只需要修改指针指向,时间复杂度为O(1)。

3. 动态性:数组的大小是固定的,如果需要扩展数组大小,需要重新分配内存空间并复制原数组元素;而链表的大小可以动态增加或减少,不需要重新分配内存空间。

4. 访问效率:数组在通过索引访问元素时效率较高,时间复杂度为O(1);而链表在访问元素时需要从头节点开始遍历,时间复杂度为O(n)。

5. 空间复杂度:数组需要连续的内存空间存储元素,如果内存不足可能会导致无法存储更多元素;而链表的节点可以分散存储在不同的内存块中,不会受到内存连续性的限制。

通俗的来讲,数组就是一个瓶子里面放了很多个弹珠,但是你要将底部的弹珠取出来,得把上面的弹珠全部倒出来,这是一个很麻烦的操作过程,所以当元素进行频繁插入和删除操作时,就得用链表,如果说你只是要对元素进行频繁访问和查询,那么就用数组,毕竟瓶子里面有什么东西我还是可以直接看到的~~~

二、代码案例

 接下来就通过一个简单的小代码案例,来理解一下数组和链表的区别。

#include <stdio.h>

struct Test{
        int data;
        struct Test *next;
};


void printlink(struct Test *head){
        while(head != NULL){
                printf("%d ",head->data);
                head = head->next;
}

}


int main (){

        int i ;
        int arr[]= {1,2,3};
        for(i=0;i<sizeof(arr)/sizeof(arr[0]);i++){
                printf("%d  ",arr[i]);
                }
        putchar('\n');


        struct Test t1 = {1,NULL};
        struct Test t2 = {2,NULL};
        struct Test t3 = {3,NULL};
        struct Test t4 = {4,NULL};
        struct Test t5 = {5,NULL};
        struct Test t6 = {6,NULL};
        struct Test t7 = {7,NULL};
        struct Test t8 = {8,NULL};

        t1.next = &t2;
        t2.next = &t3;
        t3.next = &t4;
        t4.next = &t5;
        t5.next = &t6;
        t6.next = &t7;

         t7.next = &t8;

        printf("use t1 to print other four nums:\n");
        //printf("%d %d %d %d",t1.data,t1.next->data,t1.next->next->data,t1.next->next->next->data);    (两种打印方式,printf打印方式太过复杂,要打印到第八项得挂老长了,一点逼格都没有,我们做程序员的,哎就是要有点逼格~~,所以可以直接调用函数来实现打印)

        printlink(&t1);//打印函数

        return 0;
}
 

今天就到这里了,感兴趣的点个关注一起学习,一起进步~~~

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值