新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论Java, J2SE, J2ME, J2EE, 以及Eclipse, NetBeans, JBuilder等Java开发环境,还有JSP, JavaServlet, JavaBean, EJB以及struts, hibernate, spring, webwork2, Java 3D, JOGL等相关技术。
    [返回] 中文XML论坛 - 专业的XML技术讨论区计算机技术与应用『 Java/Eclipse 』 → 数据结构系列教程------精讲(JAVA版) 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 12601 个阅读者浏览上一篇主题  刷新本主题   平板显示贴子 浏览下一篇主题
     * 贴子主题: 数据结构系列教程------精讲(JAVA版) 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     卷积内核 帅哥哟,离线,有人找我吗?
      
      
      威望:8
      头衔:总统
      等级:博士二年级(版主)
      文章:3942
      积分:27590
      门派:XML.ORG.CN
      注册:2004/7/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给卷积内核发送一个短消息 把卷积内核加入好友 查看卷积内核的个人资料 搜索卷积内核在『 Java/Eclipse 』的所有贴子 访问卷积内核的主页 引用回复这个贴子 回复这个贴子 查看卷积内核的博客楼主
    发贴心情 数据结构系列教程------精讲(JAVA版)

    接触不少程序员,都能够独立的作一下小型应用系统,和他们交谈起来才发现,他们纯粹是程序员,对基础的掌握太差,比喻java程序员,就是对jdk和各种框架特别的熟悉,能够熟练的运用其中的各种包、类以及一些组件,确实能做出一下系统来,但是涉及到一些特殊的设计方法来就不行了,对基础掌握太差,包括现在的很多培训,都是灌输这些所谓的实际应用的东西,学好基础才是最关键的东西,学一门语言很快,没有很好的基础、清晰的思路只能照葫芦画瓢了,为此,笔者结合自己的学习经验写了系列教程,主要包括数据结构的全部内容:线性表、树、图、数组、集合、矩阵、排序、查找、哈希表,并将java的设计思想、方法及一些常见的算法、设计模式贯穿其中,希望能给初学者一个很好的帮助,由于本人水平有限,同时请大家给与批评指正!
    第一讲 线性表
       数据结构包括数据的逻辑结构、储存结构以及对数据的操作,线性表的含义就是:除了第一个和最后一个数据元素,其他的只有一个前驱元素和一个后继元素,如下图:
       A--->B--->C--->D
    这个就是一个最简单的线性表的实例,结合定义可以很好的理解的,数据结构中最常见的就是提到抽象数据类型,所谓抽象数据类型就是在基本数据类型支持下用户新设计的数据类型,通俗的说就是用户对基本数据类型(整型、浮点型等等)的组合应用成自己的一种新型的数据类型,也就是java中接口和抽象类,这么说可能有些不妥,不过这样最好理解,前面讲到数据结构包括对数据的操作,这个设计数据结构的最终目的,下面我们就讲讲java数据结构中的线性表的设计思想。
    由于线性表的数据集合可以表示为序列:A1,A2,A3……….An-1,每个元素的类型都是任意的,对于这个集合的操作可以归结如下:
    (1)求出当前集合中数据元素个数(size);
    (2)向当前数据集合任意位置插入新的数据(insert);
    (3)删除当前数据集合中的任意数据(delete);
    (4)获取当前数据集合中的任意数据(getData);
    (5)判断当前数据集合是否为空;
    ,由于存在很多不同形式的线性表结构,对其操作方式当然也不一样,这样就要求设计一个大家都能使用的数据类型,由前面的讲述大家就可以想到必须要设计一个抽象数据类型,也就是一个接口,这时可能有人问为什么不设计一个抽象类阿?这个问题留个大家思考,可以到论坛发表。Java中可以这样定义这个接口:

    public interface List {
    /**
    * @author 天意
    */
           public void insert(int i,Object obj ) throws Exception;//在任意位置插入数据
           public Object delete(int i) throws Exception;//删除任意位置的数据
           public Object getData(int i) throws Exception;//获取任意位置的数据
           public int size();// 获取当前集合的大小
           public boolean isEmpty();//判断当前集合是否为空
    }
    ,由于所有线性表的操作都是围绕以上而来的,所以上面的接口就可以通用于所有线性表了,这就告诉大家在设计程序时要做好充分的考虑,强调一个“广”字。
    线性表包括顺序表和链式表,首先讲一下顺序表,顺序表顾名思义,就是数据元素按一定组合在一起的,逻辑上相邻的元素在物理储存上也是相邻的,如下如示例:
    A0 A1 A2 A3 A4 A5 ……   

    0       1          2         3        4         5                maxSize-1
    结合这个图我们可以想到:首先建立这个表就必须有个初始大小,然后才能对他就行实际操作,插入操作时可能会出现表已满、插入位置不存在的情况,删除时可能出现表已空、删除的元素不存在的情况,获取时可能出现要求的元素不存在的情况,考虑这些因素就可以设计这个顺序表的操作类了SeqList.java,具体内容如下:

    public class SeqList implements List {

           /**
            * @author 天意
            */
           final int defaultSize=10;//默认为10个,你可以自己随便改
           int maxsize;
           int size;
           Object[] listArray;
           public SeqList(){
                  initiate(defaultSize);
           }
           public SeqList(int size){
                  initiate(size);
           }
           private void initiate(int sz) {
                  //初始化
                  maxsize=sz;
                  size=0;
                  listArray=new Object[sz];
           }
           public void insert(int i, Object obj) throws Exception {
                  // 在i位置插入obj对象
         if(size==maxsize){
                throw new Exception("顺序表无法插入");
         }
         if (i<0||i>size){
                throw new Exception("参数错误");
         }
         for(int j=size;j>i;j--)
                listArray[j]=listArray[j-1];
             listArray[i]=obj;
             size++;
           }

           public Object delete(int i) throws Exception {
                  // 删除i位置的元素
                  if (size==0){
                         throw new Exception("顺序表已空无法删除!");
                  }
                  if(i<0||i>size-1){
                         throw new Exception("参数错误!");
                  }
                  Object it=listArray[i];
                  for(int j=i;j<size-1;j++)
                         listArray[j]=listArray[j+1];
                  size--;
                  return it;
           }

           public Object getData(int i) throws Exception {
                  // 获取i位置的元素并返回
                  if(i<0||i>=size){
                         throw new Exception("参数错误!");
                  }
                  return listArray[i];
                  }

           public int size() {
                  //获得大小
                  return size;
           }

           public boolean isEmpty() {
                  // 判断是否为空
                  return size==0;
           }
           public int MoreDataDelete(SeqList L,Object x)throws Exception{
                  int i;
                  int tag=0;
                  for( i=0;i<L.size;i++){
                         if(x.equals(L.getData(i))){
                                L.delete(i);
                                i--;
                                tag=1;
                         }
                         
                  }
                  return tag;
           }

    }
    ,以上就可以实现顺序表的所有操作了,你可以自己试一下,这里要说明的是,因为顺序表中储存的对象类型可以任意,所以设计时一定要使用Object类,当然有时为了限定具体类型你可以重写这个类然后抛出相应的异常即可,这个顺序表的效率分析工作留给大家,大家可以到论坛跟贴,下一讲链式表!


       收藏   分享  
    顶(0)
      




    ----------------------------------------------
    事业是国家的,荣誉是单位的,成绩是领导的,工资是老婆的,财产是孩子的,错误是自己的。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2006/10/26 14:22:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Java/Eclipse 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/5/10 21:27:16

    本主题贴数6,分页: [1]

     *树形目录 (最近20个回帖) 顶端 
    主题:  数据结构系列教程------精讲(JAVA版)(5575字) - 卷积内核,2006年10月26日
        回复:  是个好地方……还有开课的……(32字) - 驷马难追,2008年12月19日
        回复:  TOP(3字) - kooo,2008年12月1日
        回复:  good(4字) - yfaclx,2008年10月22日
        回复:  第三讲 堆栈和队列 堆栈和队列都是特殊的线性表,他们的逻辑关系完全相同,差别是线性表的插入和删..(6927字) - 卷积内核,2006年10月26日
        回复:  线性表的概念大家应该还记得,链式表是线性表的一个分类,当然也具备线性表的所有特性了,只不过它的结构..(5134字) - 卷积内核,2006年10月26日

    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    78.125ms