JAVA数据结构之顺序表

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

 

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的差
	     }
}


运行结果演示





  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值