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.输入流的设置 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();
}
}
上一篇: 如何解决html、body元的高度问题