您的位置:首页 > 理论基础 > 数据结构算法

JAVA数据结构之顺序表

2015-11-04 09:40 411 查看
题目

试用顺序表表示集合,并确定合适的约定,在此基础上编写算法实现集合的交、并、差等运算



class Link{
private int size;                             //表示为第几个元素
private int []data;                           //线性表为数组形式
private  int maxSize=10;                      //线性表的真实长度
public Link(){                                //空的构造函数
this.data=new int[maxSize];                    //线性表的默认长度为10
size=0;                                   //长度为0
}
public Link(int al[]){                        //带参数的线性表
this.size=0;
data=new int[maxSize];
for( int i=0;i<al.length;i++){            //复制数组的内容到线性表
reDtata(al.length);              //判断线性表长度可够
this.data[i]=al[i];
size++;                           //元素个数累积相加
}
}
//判断线性表长度是否足够
public void reDtata(int a){
if(a==maxSize){                            //如果线性表存满了,则线性表长度加10
this.maxSize=this.maxSize+10;
int newData[]=new int[maxSize];        //复制线性表的内容到新的长度的线性表
for(int i=0;i<a;i++){
newData[i]=data[i];
}
this.data = newData;
}
}
//删除元素
public  void det(int d){
int i;
for(i=0;i<size;i++){
if(data[i]==d){
for(i++;i<size;i++){
data[i-1]=data[i];

}
size--;
}
}
}
public void add(int d){
reDtata(size);
this.data[size]=d;
size++;
}
public int getSize(){
return size;
}
public int getMaxSize(){
return maxSize;
}
public int getData(int p){
return data[p];
}
}

public class egg {
//求集合的并集
public static void binji(int a[],int b[]){
Link lin1=new Link(a);
Link lin2=new Link(b);

for(int i=0;i<lin2.getSize();i++){                                //把线性表lin2复制到lin1中
lin1.add(lin2.getData(i));
}
int k=0,n=0;
while(k<lin1.getSize()){                                          //在小于c数组的长度时
for(int m=k+1;m<lin1.getSize();m++){                          //从当前数组的下一个元素比较
if(lin1.getData(k)==lin1.getData(m)){                     //当发现有相同元素时,删除其中一个
lin1.det(lin1.getData(m));
n=lin1.getSize();                                     //更新线性表的元素个数
}
}
k++;
}
System.out.print("a,b集合的并集为:");
for(int i=0;i<n;i++){                                     //输出线性表
System.out.print(lin1.getData(i)+"  ");
}
System.out.println(" ");
}
//求集合的交集
public static void jiaoji(int a[],int b[]){
Link lin1=new Link(a);
Link lin2=new Link(b);
Link lin3=new Link();                                      //空的线性表,后面会将相同的元素复制到lin3中
for(int i=0;i<lin2.getSize();i++){                         //把数组lin2复制到lin1中
lin1.add(lin2.getData(i));
}
int k=0,n=0;
while(k<lin1.getSize()){
for(int m=k+1;m<lin1.getSize();m++){
if(lin1.getData(k)==lin1.getData(m)){              //当发现有相同元素时,添加到lin3中
lin3.add(lin1.getData(k));

}
}
k++;
}
n=lin3.getSize();
System.out.print("a,b集合的交集为:");
for(int i=0;i<n;i++){                                     //输出线性表
System.out.print(lin3.getData(i)+"  ");
}
System.out.println(" ");
}

//求两个集合相减
public static void jianfa(int a[],int b[]){
Link lin1=new Link(a);
Link lin2=new Link(b);
for(int k=0;k<lin1.getSize();k++){
for(int m=0;m<lin2.getSize();m++){
if(lin1.getData(k)==lin2.getData(m)){
lin1.det(lin2.getData(m));                    //删除两个线性表中相同的元素
k=0;
}
}
}
int n=0;
n=lin1.getSize();
System.out.print("a-b的集合为:");
for(int i=0;i<n;i++){                                     //输出线性表
System.out.print(lin1.getData(i)+"  ");
}
System.out.println(" ");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int maa[]={1,5,2,4,6,9};
int naa[]={6,7,9,8};
binji(maa,naa);                                          //求两个集合的并集
jiaoji(maa,naa);                                         //求两个集合的交集
jianfa(maa,naa);                                         //求集合a与b的差
}
}


运行结果演示

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: