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的差 } }
运行结果演示
相关文章推荐
- 数据结构和算法 C/C++ Java 和 C# 版 - (2)线性表 精准表述 实现
- 数据结构_树形结构_二叉树
- 数据结构和算法 C/C++ Java 和 C# 版 - (1)线性表 精准表述
- HDU 5023 A Corrupt Mayor's Performance Art (线段树区间更新,入门详解)
- 数据结构例程——应用图的广度优先遍历思路求解问题
- 数据结构例程——应用图的深度优先遍历思路求解问题
- 数据结构例程——非连通图的遍历
- 数据结构实验之数组三:快速转置
- Matlab使用Java的数据结构类型
- c++ primer第五版(中文)习题答案 第二章第六节-自定义数据结构
- 数据结构实验之串一:KMP简单应用
- 第七周 数据结构实践项目-对栈【项目5 -排队看病模拟】
- 【数据结构与算法分析】1.4 用printOut函数输出任意实数
- 2014年腾讯,百度,微软,阿里巴巴(北京站)校园招聘笔试题(涉及C,C++,JAVA,数据结构)
- 【数据结构】·【链表】·【JAVA版】
- 数据结构学习(1)-链表
- java 数据结构
- 数据结构--图 的JAVA实现(下)
- C++数据结构环形队列Deque实现
- POJ 1226 Substrings (后缀数组)