欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

线性表(1)

程序员文章站 2023-12-23 12:42:46
...

线性表的内容,我打算分成两部分来写,一部分是顺序存储,一部分是链式存储。
数组是实现数据存储结构的基础,不过这部分内容比较简单,我就不写了。
下面是顺序存储的主要内容,顺序表。

public class SeqList<T> extends Object
{
protected Object[]element; //对象数组存储顺序表的数据元素,保护成员
protected int n; //顺序表元素个数
public SeqList(int length); //构造容量为length的空表
public SeqList(); //构造默认容量的空表
public SeqList(T[] values); //构造顺序表,由value数组提供元素
public SeqList(SeqList<T> list); //拷贝构造函数
public boolean isEmpty(); //检验表是否为空
public int size(); //返回表的长度
public T get(int i); //返回第i个元素
public void set(int i,T x); //设置第i个元素为x
public String toString(); //返回顺序表所有元素的描述字符串
}
以上就是顺序表的大致框架,顺序表说白了就是一个功能更加强大的数组,它的存取方式与数组无异。                                        这里有一个约瑟夫(Josephus)环问题:古代某法官要判决number个犯人的死刑,他有一条荒唐的法律,将犯人站成一个圈,从第start个人开始暑期,每数到第distance个犯人,就拉出来处决,然后再从下一个开始数distance个,数到的人再处决,......,直到剩下最后一个犯人予以赦免。当number = 5,start=0,distance = 2时,用代码描述。

public class Josephus
{
 public Josephus(int number,int start,int distance)
  {
    System.out.print("Josephus("+number+","+start+","+distance+"),");
    SeqList<String> list = new SeqList<String>(number);
    for(int i=0;i<number;i++)
       list.insert((char)('A'+i)+""); //顺序表尾插入
    System.out.println(list.toString());
    int i=start;
    while(list.size()>1)
    {
     i=(i+distance-1)%list.size();
     System.out.print("删除"+list.remove(i).toString()+",");
     System.out.println(list.toString());
    }
    System.out.println("被赦免者是"+list.get(0).toString());
  }
public static void main(String args[]){new Josephus(5,0,2);}
}
其实,这个问题不难理解,也不难解决。

相关标签: 线

上一篇:

下一篇: