java之数据结构(一)

用山东理工大学的oj重新写一下题,以前拿C++的,现在工作需要转java。希望可以坚持下去不摸了(大误)oj路标:https://acm.sdut.edu.cn/  虽然毕业了但还是母校的oj好用。

1. 1070

C语言实验——最值

Description

有一个长度为n的整数序列,其中最大值和最小值不会出现在序列的第一和最后一个位置。
请写一个程序,把序列中的最小值与第一个数交换,最大值与最后一个数交换。输出转换好的序列。

Input

输入包括两行。
第一行为正整数n(1≤n≤10)。
第二行为n个正整数组成的序列。

Output

输出转换好的序列。数据之间用空格隔开。

Sample

Input 

6
2 3 8 1 4 5

Output 

1 3 5 2 4 8

找最大最小值的问题,先选择数据结构,明显选择数组就行。注意:1.输入流的设置  int 类型的变量在输入流中的读取为 in.nextInt( ) ;  2.一维数组的定义 

import java.util.*;

public class Main2{
	
	public static void main(String[] args)
	{
		// 打开输入流
		Scanner in = new Scanner(System.in);
		int count,Max = 0,Min = 65532;
		int Maxp = 0,Minp = 0;
		
		//  定义int型数组,注意表达式
		int[] list = new int[10];
		count = in.nextInt();
		
		for(int i = 0;i<count;i++)
		{
			list[i] = in.nextInt();
			if(list[i]>Max){
				Max = list[i];
				Maxp = i;
			}
			else if(list[i]<Min){
				Min = list[i];
				Minp = i;
			}
		}
		swap(list,Minp,0);
		swap(list,Maxp,count-1);
		OutPut(list,count);
		// System.out.print(Max);
		
		// 关闭输入流
		in.close();
	}
	
	public static void swap(int[]l,int a,int b)
	{
		int tmp = l[a];
		l[a] = l[b];
		l[b] = tmp;
	}
	
	public static void OutPut(int[]l,int count)
	{
		for(int i = 0;i<count;i++)
		{
			System.out.print(l[i]);
			if(i<count-1){
				System.out.print(" ");
			}
		}
	}
}

 

2.1191 

C语言实验——整数位

Description

输入一个不多于5位的正整数,要求:
(1)求出它是几位数;
(2)分别输出每一位数字;
(3)按逆序输出各位数字。

Input

输入一个不多于5位的正整数。

Output

输出数据有3行,第一行为正整数位数,第二行为各位数字,第三行为逆序的各位数字。

Sample

Input 

123

Output 

3
1 2 3
3 2 1

 

数据结构采用String ,Java中的String类型不能直接通过下标访问字符,可以将其转为字符数组char[],或用.charAt(i)进行访问

String 的长度为 s.length( );  String 在输入流中的读取 为 in.nextLine( ); 读取下一行

import java.util.*;

public class Main3{
	public static void main(String[] args)
	{
		String word = null;
		Scanner in = new Scanner(System.in);
		word = in.nextLine();
		
		int len = word.length();
		System.out.println(len);
		
		Show(word,len);
		
		String word_r = Reverse(word);
		Show(word_r,len);
		
		in.close();
	}
	
	public static String Reverse(String s)
	{
		//  特别注意,Java中的String类型要转化为char[] 数组,才能通过下标进行访问字符
		char[] temp = s.toCharArray();
		String re = "";
		int len = s.length();
		for(int i = len-1;i>=0;i--)
		{
			re+=temp[i];
		}
		return re;
	}
	
	public static void Show(String s,int len)
	{
		char[] temp = s.toCharArray();
		for(int i = 0;i<len;i++)
		{
			System.out.print(temp[i]);
			if(i<len-1){
				System.out.print(" ");
			}
			else{
				System.out.print("\n");
			}
		}
	}
}

3. 2116

数据结构实验之链表一:顺序建立链表

Description

输入N个整数,按照输入的顺序建立单链表存储,并遍历所建立的单链表,输出这些数据。

Input

第一行输入整数的个数N;
第二行依次输入每个整数。

Output

输出这组整数。

Sample

Input 

8
12 56 4 6 55 15 33 62

Output 

12 56 4 6 55 15 33 62

Hint

不得使用数组!

出现了一些问题,超时和内存过大。样例已过

方法:1.尾插法建立链表,自定义结点,Java 中没有指针。

import java.util.*;

public class Main{
	
	public static void main(String[] args)
	{
		Scanner in = new Scanner(System.in);
		int count = 0;
		count = in.nextInt();
		
		Node head = new Node(0);    //建立一个头结点
		Node start = head.next;
		
		for(int i = 0;i<count;i++)
		{
			int x = in.nextInt();
			start = Insert_tail(x,start,head);
		}
		
		Node p = head.next;
		
		while(p!= null)
		{
			System.out.print(p.data);
			if(p!=start)
			{
				System.out.print(" ");
			}
			p = p.next;
		}
		in.close();
	}
	
	public static Node Insert_tail(int data,Node start,Node head)
	{
		Node temp = new Node(data);
		if(start== null)
		{
			start = temp;
			head.next = start;
		}
		else if(start!=null)
		{
			start.next = temp;
		}
		return temp;
	}
}

class Node{
	int data;
	Node next = null;
	Node(int x)
	{
		data = x;
	}
}

 

2. 利用LinkedList结构,通过迭代器去访问链表

建立一个Integer类型的Linkedlist,int在这里并不能使用。Iterator  iter = list.iterator( ),循环终止iter.hasNext()。访问下一步iter.next(); 添加元素list.add();

import java.util.*;
import java.lang.*;


public class Main{
	public static void main(String[] args)
	{
		LinkedList<Integer> list = new LinkedList<Integer>();
		Scanner in = new Scanner(System.in);
		int count,data,step = 0;
		count = in.nextInt();
		for(int i = 0;i<count;i++)
		{
			data = in.nextInt();
			list.add(data);
		}
		
		for(Iterator iter = list.iterator(); iter.hasNext();)  
        {
			System.out.print(iter.next());
			if(iter.hasNext())
			{
				System.out.print(" ");
			}
		}
		
		in.close();
	}
}

3.同样是LinkedList结构,通过for循环来访问链表.Linkedlist 支持 下标访问

import java.util.*;
import java.lang.*;


public class Main{
	public static void main(String[] args)
	{
		LinkedList<Integer> list = new LinkedList<Integer>();
		Scanner in = new Scanner(System.in);
		int count,data,step = 0;
		count = in.nextInt();
		for(int i = 0;i<count;i++)
		{
			data = in.nextInt();
			list.add(data);
		}
		
		int size = list.size();   //  size() 是linkedlist的方法之一,还有方法为first(),last()
		for(int i = 0;i<size;i++)
		{
			System.out.print(list.get(i));
			if(i<size-1){
				System.out.print(" ");
			}
		}
		in.close();
	}
}

 

 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页