数组和链表

一、定义

数组:数组是有序的元素序列。数组由数组名,[ ],下标组成。

链表:链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 

二、类型

数组:指针数组和数组指针,字符数组和字符串数组,结构数组

链表:单链表,双向链表和循环链表(若读者对这三种链表以及二分查找法感兴趣可浏览本博主主页搜索“链表与二分查找法”)

二、数组和链表的相似之处

数组中的每个元素和另一个元素都好像是手拉着手一样,这就好像链表中的一个指针域是存储下一个结点的地址一样。

三、数组和链表的不同之处

1.从输入和输出的角度谈:数组是通过下标的变化来访问数组的值的,只要下标的值小于存储的数量就不会停止。eg:int a[100];此时如果将这个数组装满,那再将这个数组循环输出时会输出100个结果(注意:0~99而不是1~100)。

而链表是通过每个结点的两个部分来实现的:第一个是存储数据元素的数据域,第二个是存储下一个结点地址的指针域,只要第二个的指针域不是NULL,这个链表就不会停止,所以一般使用链表需要定义一个指针。例如下图:watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pqu6ZuoXuaZqOmjjg==,size_20,color_FFFFFF,t_70,g_se,x_16

 流程图如下:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pqu6ZuoXuaZqOmjjg==,size_16,color_FFFFFF,t_70,g_se,x_16

 2.从插入(或者改变顺序)和删除(数组跟插入相反,而链表直接删去即可)的角度讨论哪种比较方便:对于数组而言,如果是插入,(不说插在首位和尾部)则需要为原来的数组增加长度,然后从将要插入的位置的下标元素i到n(比如原来数组长度是n)往后面移动一位(可通过赋值的形式),然后将要插入的元素放在对应下标a[i]即可。其实,读者读到这里就会发现,其实这种方法很繁琐。所以我在这里为读者介绍另外一种简便的方法——链表。链表是通过指针让他们之间彼此连接起来的,因此,我们可以通过上一个结点A的next,让指针p指向我们要插入数值的结点D存储数据的指针域,再从它的next让指针p指向B存储数据的指针域即可。如下图:watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pqu6ZuoXuaZqOmjjg==,size_20,color_FFFFFF,t_70,g_se,x_16

 用链表对大量数据的插入,修改某个数据的位置,删除,比用数组方便许多!!!

欢迎各位读者在评论区指出在下不足之处,谢谢各位!!!

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值