浅谈数据结构

前言:数据结构就是数据的组织方式。常见的几种数据结构有栈、队列、链表、数组、树、图、堆等。今天来说一下栈和队列的比较,以及链表和数组的比较。

1、栈和队列

  (1)栈

    我们常听见说栈内存,那么栈内存中的数据是如何存储的呢?

    数据在栈内存中存入时的方式称为“压栈”,取出的方式称为“弹栈”。这种方式使得栈很像武器枪上的弹夹,像下边:


    数据 a 最先存入栈中,然后存入 b ,a 就自动存储到 b 的下边,存入 c 的时候,a 和 b 再存入到下边。当取出的时候,首先取出的是 c ,然后是 b ,最后是 a 。

  (2)队列

    队列的存取方式见下图:


    数据 a 先存入队列中,然后存入 b ,此时 a 也会存入后面一格,接着存入 c ,a 和 b 都依次向后存入一格。取出的时候 a ,首先出来,然后是 b ,最后是 c 。

  比较:栈中,进出口都是一个,存取特点是先进后出;而对于队列来说,则出入口不同,存取特点是先进先出。

2、数组和链表

  (1)数组

  首先定义一个数组:int [ ]  arr = { 23 , 45 ,87 , 19 , 52 } ,如图:


  需求1:我想获取87这个元素,怎么办? 

    我们可以直接获取 arr [ 2 ] 。

  需求2:我想在87后边添加一个元素63,怎么办?

    这个就要分步骤做了:

    a:创建一个新数组,长度比以前大1。

    b:遍历旧数组,找到87,在87之前的元素一次存入新数组,存入87之后紧接着存入63,然后的元素在新数组中索引加1再存入。

  需求3:我想删除87这个元素,怎么办?

    a:创建一个新数组,长度比以前小1。

    b:遍历旧数组,找到87,在87之前的元素一次存入新数组,87之后的元素在新数组中索引减1再存入。

(2)链表

  链表就是把一些节点通过链子链接起来的数据结构,那么什么是节点呢?

  节点:由指针域和数值域组成。每个节点的指针域都保存着下一个节点的地址。

  如果将{ 23 , 45 ,87 , 19 , 52 } 存储在链表中,如图:

  需求1:我想获取87这个元素,怎么办? 

    从头遍历,直到找到87,因为链表没有角标,每一个节点都能找到下一个节点,但是永远不知道下一个节点保存的什么,所以每找一个数值都要从头遍历。

  需求2:我想在87后边添加一个元素63,怎么办?

    直接添加一个数值域为63的节点,然后将87节点的指针域保存63节点的地址,63节点的指针域保存19节点的地址即可,如下图:


  需求3:我想删除87这个元素,怎么办?

    原理相同,去掉一个节点即可。

  比较:数组的特点是查询快,增删慢;链表的特点是查询慢,增删快。

  小结:每种数据结构都有各自的特点,一种优点的突出也就意味着一种缺陷的严重,所以在使用时要按照考虑数据结构的特点来使用。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值