J2SE_2_数据结构与算法(1)之线性

        数据结构算法是程序设计的两大基础,大型的IT企业面试时也会出数据结构和算法的题目,它可以说明你是否有良好的逻辑思维,如果你具备良好的逻辑思维,即使技术存在某些缺陷,面试公司也会认为你很有培养价值,至少在一段时间之后,技术可以很快得到提高。同时,它也是软考的重点,我们需要对这部分的内容进行一下总结。

       这篇博文主要是通过图来解决抽象问题。不多说了,我们先看一下数据结构和算法的整体内容。

                                        J2SE_2_数据结构与算法(1)之线性_第1张图片

       数据结构和算法的内容并不多,我们先从数据结构开始,数据结构总结完之后,再学习算法,我们要小火慢炖,一口一口吃掉它。


1、线性表

       概念:

             数据元素的排列方式是线性

      分类:

             分类规则是根据上图中元素的存储结构来划分的。

                                                           J2SE_2_数据结构与算法(1)之线性_第2张图片                        

      (1)顺序表

          基本思想:元素的存储空间是连续的。在内存中是以顺序存储,内存划分的区域是连续的。存储结构如下图:

                           J2SE_2_数据结构与算法(1)之线性_第3张图片

          

      (2)链表

          基本思想:元素的存储空间是离散的,单独的(物理),它们可以通过在逻辑上指针的联系使得它成为了整体的链表。存储结构如下图:

                                J2SE_2_数据结构与算法(1)之线性_第4张图片

     

            1.单链表

                   J2SE_2_数据结构与算法(1)之线性_第5张图片

            2.循环链表

                                J2SE_2_数据结构与算法(1)之线性_第6张图片

            3.双链表(双向循环表)

                   J2SE_2_数据结构与算法(1)之线性_第7张图片

           

           三者的区别(从上面三个图我们可以总结出来):

       1、它们都有数据域(data(p))和指针域(next(p)),但是从图中可以看出双链表有两个指针域,一个指向它的前节点,一个指向它的后节点。

       2、单链表最后一个节点的指针域为空,没有后继节点;循环链表和双链表最后一个节点的指针域指向头节点,下一个结点为头节点,构成循环;

          3、单链表和循环链表只可向一个方向遍历;双链表和循环链表,首节点和尾节点被连接在一起,可视为“无头无尾”;双链表可以向两个方向移动,灵活度更大。


      线性表操作:

         理解了顺序表和链表的基本思想之后,线性表的操作是简单,并且网上有很多讲解插入和删除结点的博客,在这里我就不过多的介绍了。

       可参考文章:http://www.cnblogs.com/yaowen/p/4272310.html


        顺序表和链表的对比:

                          J2SE_2_数据结构与算法(1)之线性_第8张图片


          栈和队列是“特殊的线性表”,既然特殊就有不同点。


2、栈

      基本思想:后进先出(先进后出)即栈中元素被处理时,按后进先出的顺序进行,栈又叫后进先出表(LIFO)。

      举例:

      日常生活中有很多栈的例子。例如,放在书桌上的一摞书,只能从书顶上拿走一本书,书也只能放在顶上。如下图所示:

                                                 J2SE_2_数据结构与算法(1)之线性_第9张图片


3、队列

     基本思想:先进先出即先被接收的元素将先被处理,又叫先进先出表(FIFO)。如下图所示:

     举例:

     队列的例子,生活中更多。比如:买车票排队,排头最先买到车票,新来的排的队尾;进车站时,安检行李,先进去的最先出来,后进去的后出来。

                                                  J2SE_2_数据结构与算法(1)之线性_第10张图片

   

分类:

1.顺序队列

          如下图所示:

                          J2SE_2_数据结构与算法(1)之线性_第11张图片

      顺序队列的操作,要判断队满和队空的标志,从图中我们可以总结得到:

      1.队空:head = tail

      2.队满:tail = m

2.循环队列

        如下图所示:

                                  J2SE_2_数据结构与算法(1)之线性_第12张图片

      循环队列的操作,要判断队空和队满的情况,从图中我们可以总结得到:

         1.队空:head = tail

      2.队满:tail + 1 = head(在队列中会留一个空着的空间,所以要加1)


总结

           线性表真的很简单,我反正是会了,你会了吗?


你可能感兴趣的:(J2SE_2_数据结构与算法(1)之线性)