欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java之基本数据结构

程序员文章站 2022-04-16 22:10:07
...

用山东理工大学的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.输入流的设置   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)进行访问

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();
	}
}

 

 

相关标签: java