链表与数组

链表和数组的区别:

两者的区别:

1.数组静态分配内存,链表动态分配内存。
2.数组在内存中是连续的,链表是不连续的。
3. 数组利用下标定位,查找的时间复杂度是O(1),链表通过遍历定位元素,查找的时间复杂度是O(N)。
4.数组插入和删除需要移动其他元素,时间复杂度是O(N),链表的插入或删除不需要移动其他元素,时间复杂度是O(1)。

数组的优点

1.随机访问性比较强,可以通过下标进行快速定位。
2.查找速度快。

数组的缺点

1.插入和删除的效率低,需要移动其他元素。
2.会造成内存的浪费,因为内存是连续的,所以在申请数组的时候就必须规定七内存的大小,如果不合适,就会造成内存的浪费。
3.内存空间要求高,创建一个数组,必须要有足够的连续内存空间。
4.的大小是固定的,在创建数组的时候就已经规定好,不能动态拓展。

链表的优点

1.插入和删除的效率高,只需要改变指针的指向就可以进行插入和删除。
2.内存利用率高,不会浪费内存,可以使用内存中细小的不连续的空间,只有在需要的时候才去创建空间。随时动态分配空间,大小不固定,拓展灵活。

链表的缺点

1.查找的效率低,链表的查找是从第一个结点开始依次向后遍历。

链表中另外点:
1.malloc()函数

malloc函数是一种申请存储空间的函数,其函数原型为:
void *malloc(unsigned size);
函数功能:分配长度为size个字节的内存块。(在内存的动态存储区申请一个长度为size字节的连续存储空间)
返回值:返回指向新分配内存块首地址的指针;若没有足够的内存空间可分配,返回NULL。
说明:函数值为指针类型,由于基类型为void,如果要将这个指针赋给其它类型的指针变量,应当进行强制类型转换。
例如:
int *p = (int *)malloc(sizeof(int));
申请一个int型长度的存储空间,并将分配到的村存储空间地址转换为int类型地址,赋给所定义的指针变量p,基类型字节数为int型所占空间2或4(有不同的机器决定)。
例如:
struct stud p = (struct stud)malloc(sizeof(struct stud));
申请可存放struct stud结构体类型数据的空间,将其地址存入p指针中,当struct stud结构体类型的定义改变时,本语句申请空间的大小会随之改变,使程序便于适应不同的机器,程序适应性增强。

2.free()函数

free函数是一种释放存储空间的函数,其函数原型为:
void free(void *p);
函数功能:将指针变量p指向的存储空间释放,交还给系统。
无返回值。

3.链表

链表分为单链表,循环链表,双向链表。
单链表:
如果每个结点只含有一个指针,所有结点都是单线联系,除了末尾结点指针为空外,每个结点的指针都指向下一个结点,一环扣一环形成一条线性链,称此链表为单项线性链表或简称单链表。单链表

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值