美文网首页学习数据结构
0x02-学习玩转数据结构-数组添加元素

0x02-学习玩转数据结构-数组添加元素

作者: 小码农小世界 | 来源:发表于2019-03-14 15:50 被阅读0次

    1、思考在尾部添加元素

    现在来看下我数组类中添加元素,对于像数组添加元素最简单的形式就是我们在数组的末尾添加1个元素,这个操作为什么很简单呢?因为之前我们已经说过了size这个变量它其实也就是指向我们数组中第一个没有元素的索引的这个位置,我们向数组添加元素其实就等同于向size这个位置添加元素。可以想象一下,初始的时候我们整个数组为空,这个size等于零,现在我们要想向数组末尾添加1个新的元素11,我们只要在data[size]这个位置放上11就好了。当然这样做完之后不要忘了我们需要维护一下size,让size++。

    在数组尾部添加元素

    2、代码实现尾部添加元素

    当我们数组有多少个元素,此时多了一个元素所以这个size应该加1。比如说我们现在要在数组中再添加1个新的元素,我们要添加1个22怎么做呢?同理此时这个size等于索引,这个索引的位置就是我们数组中第一个没有元素的位置,我们将数组的末尾添加1个元素,就是要让data[size]等于我们要添加的这个元素22,之后我们不要忘了维护一下size。非常的简单。下面那我们先来编写一下这个很简单的逻辑,现在呢我设置一个新的方法,这个方法它叫做insertLast,也就是像我们整个数组的最后添加1个新的元素,这个添加的元素就是方法中的参数。在这里有一点需要注意,我们再添加新的元素的时候都需要查看一下我们当前的这个是否还有剩余的空间可以容纳这个新的元素,我们的这个数组他的空间是有限的。我们在开辟空间的时候只开辟了capacity这么多的空间,如果当前我们的这个数组中的元素数size这个数等于的数组的空间大小。我们的数组就不能添加一个新的元素了,我们这个添加操作应该是失败的,后续学习会解决这个问题,在这里对于这种情况我先简单的抛出一个异常。

    代码实现尾部添加元素

    3、向指定位置添加元素

    下面我们看看一个稍微复杂点的问题,就是如何向我们的这个数组类中的指定的位置添加1个元素,通常这个需求产生自我们希望维护我们数组类中的这个元素,让这些元素都是有序的排列。想象一下在这样的情况下,我们就不能总将每一个元素放在最后,我们可能需要把一个元素插入到某一个位置。比如说现在这个数组中有11、33、44、55这样的四个元素,现在的我希望将22插入到索引为1的位置。把22放在这样的位置,所以11后面是22,22后面是33,然后44,55。这个操作具体怎么实现呢?其实也非常的简单,我们需要把当前索引为1这个位置的元素以及之后的所有的元素都向后挪一个位置,这样一来才能把这个索引为1的这个位置腾出来腾给22。挪动的时候我们不能首先把33挪到44这个位置,因为这样一挪我们就把44给覆盖了。具体娜的时候我们要从后往前挪,换句话说先把最后一个元素也就是size-1这个位置的元素开始,现在的size的这个位置也就是把55挪到这里,再往前看下一个元素把这个44向后挪一个位置。向前看有元素将33挪到他的后面一个位置也就是二这个位置,33已经是原来索引为1的这个元素了,33挪完以后索引为1这个位置也腾出来了,之后我们只要把这个放上我们要添加的插入的这个元素22就好了,这个过程完成之后。我们不要忘记我们要维护我们的这size,这个size需要++。因为我们添加了一个新的元素,所以我们整个数组中的元素个数多了一。与此同时,那这个size++也保证了它重新指向了我们这个数组中下一个没有元素的相应的这样的一个位置。

    指定位置添加元素

    4、代码实现指定位置添加元素

    下面我们具体来编码实现一下这个过程,在我们的这个数组类中写一个新的方,这个方法叫做insert(inte, int index)方法有两个参数,分别是index位置,e为待插入的元素。具体的逻辑是怎样的呢?首先依然是我们要保证我们的这个数组有足够的空间来容纳这个新的元素,所以我们要做这样的一个判断。接着就是index必须为不小于0的,然后是index不大于size的。如果index等于size的话,在这种情况下其实就相当于是向数组的后面再添加1个新的元素。如果我们的这个index比size还要大这样的一个索引,想象一下就意味着我们的数组的这些元素不是紧密地排列的,我们中间呢会存在一些未知没有合法的元素,这不是我们希望要的结果。所以在这种情况下我们相应的也抛出这样的一个异常。这个index索引是大于等于零的同时是小于等于这个size的,如果这两个条件都满足的话我们就可以放心的来看一下如何把这个元素一插入到index这个位置。根据我们之前说的逻辑,我们要写一种循环语句,从循环我们从最后一个元素开始。只要这个条件大于等于应index,我们一直看到我们要插入的这个位置相应的这个元素,条件减减,对于每一个元素,我们都向后挪一个位置。直到把index位置上的元素往后移动一位为止,这时index上的元素还是原来的,只不过,我们已经把他的副本赋值到他的下个位置了,现在可以放心地覆盖index位置上的元素了。所以让index位置等于我的这个元素,最后我们不要忘了我们的这个size++,这样写就好了。数组中的任意一个位置添加1个新的元素,想象一下一道我们完成了这样的一个代码之后,其实对于我的这个insertLast方法来说完全可以调用我的这个inset(int e, intindex)方法,其实我们就调一下这个insert这个index我们传入size。再设计一个方法在数组头部加入一个元素叫做insertFirst,这个也是调用insert(e, 0),这样就是在数组头部添加了一个元素。下一篇将会分享在数组中查询和修改元素的操作,谢谢。

    代码实现指定位置添加元素

    相关文章

      网友评论

        本文标题:0x02-学习玩转数据结构-数组添加元素

        本文链接:https://www.haomeiwen.com/subject/mwqcmqtx.html