1004-线性表操作

线性表操作

时间限制(普通/Java)  :  1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 3488            测试通过 : 760 

题目描述

线性表是n个元素的有序集合(n≥0),n是线性表中元素的个数,称为线性表的长度。可以用一组地址连续的存储单元依次存储线性表中元素,采用这种存储方式的线性表称为顺序表。

请在顺序表上实现运算,实现顺序表的逆置,删除表中所有元素值等于x的元素。



输入

三组数据,顺序表元素类型分别为整型、字符型和实型。

每一组第一行给出元素数目n(0<n≤1000),第二行给出元素数值,第三行给出待删除的元素。

输出

三组数据,每一组第一行给出逆置后的顺序表元素,第二行是在此基础上删除指定元素后的顺序表元素,每一个输出元素后均有一个空格,如果元素全部被删除,那么输出一个空行。

样例输入

8
1 2 3 7 5 6 7 8 
7
3
a c m
h
4
1.2 3.4 5.6 7.8
1.2

样例输出

8 7 6 5 7 3 2 1 
8 6 5 3 2 1 
m c a 
m c a 
7.8 5.6 3.4 1.2 
7.8 5.6 3.4 

提示

该题属于南京邮电大学《数据结构A》实验一中的内容,验证的是课本代码,请慎重解答。

2014.12.30 输出格式做了必要说明。

题目来源

南京邮电大学《数据结构A》课程实验


我的答案(JAVA)

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;


public class Main {
	static class SeqList<T>{
		private List<T> list=new ArrayList<T>();
		private T value;
		
		public T getValue() {
			return value;
		}
		public void setValue(T value) {
			this.value = value;
		}
		public void add(T o){
			list.add(o);
		}
		public SeqList<T> remove(T o){
			List<T> tempList=new ArrayList<T>();
			for(T t:list){
				if(t.equals(o)){
					tempList.add(o);
				}
			}
			list.removeAll(tempList);
			return this;
		}
		public SeqList<T> reverse(){
			Collections.reverse(list);
			return this;
		}
		public void print(){
			for(T o:list){
				System.out.print(o+" ");
			}
			System.out.print("\n");
		}
	}

	public static void main(String[] args) {
		Scanner cin=new Scanner(System.in);
		int i,len;
		// 录入第一组数据
		SeqList<Integer> list1=new SeqList<Integer>();

		len=cin.nextInt();
		if (len <= 0 || len > 1000) {
			System.out.println("out of bounds");;
		}
		for(i=0;i<len;i++){
			list1.add(cin.nextInt());
		}
		list1.setValue(cin.nextInt());
		// 录入第二组数据
		SeqList<Character> list2 = new SeqList<Character>();

		len=cin.nextInt();
		if (len <= 0 || len > 1000) {
			System.out.println("out of bounds");;
		}
		for (i = 0; i < len; i++) {
			list2.add(cin.next().charAt(0));
		}
		list2.setValue(cin.next().charAt(0));
		// 录入第三组数据
		SeqList<Float> list3= new SeqList<Float>();
		len=cin.nextInt();
		if (len <= 0 || len > 1000) {
			System.out.println("out of bounds");;
		}
		for (i = 0; i < len; i++) {
			list3.add(cin.nextFloat());
		}
		list3.setValue(cin.nextFloat());
		
		// 处理第一粗数据
		list1.reverse().print();
		list1.remove(list1.getValue()).print();
		// 处理第二粗数据
		list2.reverse().print();
		list2.remove(list2.getValue()).print();
		// 处理第三粗数据
		list3.reverse().print();
		list3.remove(list3.getValue()).print();
		
		cin.close();
	}
}
第二种写法,没有本质差别,同样报  Memory Limit Exceed 错误(郁闷~)
import java.lang.reflect.Array;
import java.util.Scanner;
public class Main {
	static class SeqList<T>{
		private T[] arr;
		private int maxLen;
		private int n;
		
		public int getMaxLen() {
			return maxLen;
		}
		public void setMaxLen(int maxLen) {
			this.maxLen = maxLen;
		}
		public SeqList(Class<T> type,int len) {
			arr=(T[])Array.newInstance(type, len);
			maxLen=len;
			n=0;
		}
		public void add(T o){
			if(n>maxLen){
				System.out.println("out of bounds");
			}
			arr[n]=o;
			n++;
		}
		public void remove(T o){
			for(int i=0;i<n;i++){
				if(arr[i].equals(o)){
					for(int j=i;j<maxLen-1;j++){
						arr[j]=arr[j+1];
					}
					i--;
					n--;
				}
			}
		}
		public void print(){
			for(int i=n-1;i>=0;i--){
				System.out.print(arr[i]+" ");
			}
			System.out.print("\n");
		}
	}

	public static void main(String[] args) {
		Scanner cin=new Scanner(System.in);
		int i;
		// 录入第一组数据
		SeqList<Integer> list1=new SeqList<Integer>(Integer.class,cin.nextInt());
		for(i=0;i<list1.getMaxLen();i++){
			list1.add(cin.nextInt());
		}
		int value1=cin.nextInt();
		// 录入第二组数据
		SeqList<Character> list2=new SeqList<Character>(Character.class,cin.nextInt());
		for(i=0;i<list2.getMaxLen();i++){
			list2.add(cin.next().charAt(0));
		}
		char value2=cin.next().charAt(0);
		// 录入第三组数据
		SeqList<Float> list3=new SeqList<Float>(Float.class,cin.nextInt());
		for(i=0;i<list3.getMaxLen();i++){
			list3.add(cin.nextFloat());
		}
		float value3=cin.nextFloat();
		
		list1.print();
		list1.remove(value1);
		list1.print();
		
		list2.print();
		list2.remove(value2);
		list2.print();
		
		list3.print();
		list3.remove(value3);
		list3.print();
		
		cin.close();
	}
}



转载请指明出处: http://blog.csdn.net/fxdaniel/article/details/43272483

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值