JAVA
Stack, Queue
inderrom
2022. 10. 26. 01:25
package kr.or.ddit.basic;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
public class StackQueueTest {
/*
* - Stack ==> 후입선출(LIFO) 의 자료구조 (last in first out) 마지막에 들어간게 먼저 나온다.
*
* - Queue ==> 선입선출(FIFO) 의 자료구조 (first in first out) 처음 들어간게 먼저 나온다.
*
* - Stack과 Queue는 LinkedList를 이용하여 사용할 수 있다.
* - 메서드를 호출할때마다 정보가 담기고 삭제하면 그전작업으로 돌아가는 거 -> 콜스택
*
* */
public static void main(String[] args) {
/*
* - Stack의 명령
* 1. 자료 입력: push(입력값)
* 2. 자료 출력 : pop() ==> 자료를 꺼내온 후 꺼내온 자료를 Stack에서 삭제한다.
* peek() ==> 삭제없이 자료를 꺼내온다.
* */
// 객체 생성
// 방법 1
Stack<String> stack = new Stack<String>(); // Stack클래스 이용
// 방법2
LinkedList<String> stack2 = new LinkedList<String>(); // LinkedList클래스 이용
// 리스트로 생성 했다면, 위에 명령만 사용
stack.push("홍길동");
stack.push("일지매");
stack.push("변학도");
stack.push("강감찬");
System.out.println("현재 stack값 : " + stack);
String data = stack.pop();
System.out.println("꺼내온 값 : " + data);
System.out.println("꺼내온 값 : " + stack.pop());
System.out.println("현재 stack값 : " + stack);
stack.push("성춘향");
System.out.println("추가 후 stack값 : " + stack);
System.out.println("꺼내온 값 : " + stack.pop());
System.out.println();
System.out.println("삭제없이 꺼내온 값 : " + stack.peek());
System.out.println("현재 stack값 :" + stack);
System.out.println("---------------------------------------");
/*
* - Queue의 명령 1. 자료 입력 : offer(입력값) 2. 자료 입력 : poll() ==> 자료를 꺼내오고 꺼내온 자료를
* Queue에서 삭제한다. : peek() ==>
*/
Queue<String> queue = new LinkedList<String>();
queue.offer("홍길동");
queue.offer("일지매");
queue.offer("변학도");
queue.offer("강감찬");
System.out.println("현재 queue값 :" + queue);
String temp = queue.poll();
System.out.println("꺼내온 값 : " + temp);
System.out.println("꺼내온 값 : " + queue.poll());
System.out.println("현재 queue값 :" + queue);
System.out.println();
queue.offer("성춘향");
System.out.println("현재 queue값 :" + queue);
System.out.println();
System.out.println("꺼내온 값 : " + queue.poll());
System.out.println("현재 queue값 :" + queue);
System.out.println();
System.out.println("삭제없이 꺼내온 값 : " + queue.peek());
System.out.println("현재 queue값 :" + queue);
}
}
package kr.or.ddit.basic;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
public class StackQueueTest {
/*
* - Stack ==> 후입선출(LIFO) 의 자료구조 (last in first out) 마지막에 들어간게 먼저 나온다.
*
* - Queue ==> 선입선출(FIFO) 의 자료구조 (first in first out) 처음 들어간게 먼저 나온다.
*
* - Stack과 Queue는 LinkedList를 이용하여 사용할 수 있다.
* - 메서드를 호출할때마다 정보가 담기고 삭제하면 그전작업으로 돌아가는 거 -> 콜스택
*
* */
public static void main(String[] args) {
/*
* - Stack의 명령
* 1. 자료 입력: push(입력값)
* 2. 자료 출력 : pop() ==> 자료를 꺼내온 후 꺼내온 자료를 Stack에서 삭제한다.
* peek() ==> 삭제없이 자료를 꺼내온다.
* */
// 객체 생성
// 방법 1
Stack<String> stack = new Stack<String>(); // Stack클래스 이용
// 방법2
LinkedList<String> stack2 = new LinkedList<String>(); // LinkedList클래스 이용
// 리스트로 생성 했다면, 위에 명령만 사용
stack.push("홍길동");
stack.push("일지매");
stack.push("변학도");
stack.push("강감찬");
System.out.println("현재 stack값 : " + stack);
String data = stack.pop();
System.out.println("꺼내온 값 : " + data);
System.out.println("꺼내온 값 : " + stack.pop());
System.out.println("현재 stack값 : " + stack);
stack.push("성춘향");
System.out.println("추가 후 stack값 : " + stack);
System.out.println("꺼내온 값 : " + stack.pop());
System.out.println();
System.out.println("삭제없이 꺼내온 값 : " + stack.peek());
System.out.println("현재 stack값 :" + stack);
System.out.println("---------------------------------------");
/*
* - Queue의 명령 1. 자료 입력 : offer(입력값) 2. 자료 입력 : poll() ==> 자료를 꺼내오고 꺼내온 자료를
* Queue에서 삭제한다. : peek() ==>
*/
Queue<String> queue = new LinkedList<String>();
queue.offer("홍길동");
queue.offer("일지매");
queue.offer("변학도");
queue.offer("강감찬");
System.out.println("현재 queue값 :" + queue);
String temp = queue.poll();
System.out.println("꺼내온 값 : " + temp);
System.out.println("꺼내온 값 : " + queue.poll());
System.out.println("현재 queue값 :" + queue);
System.out.println();
queue.offer("성춘향");
System.out.println("현재 queue값 :" + queue);
System.out.println();
System.out.println("꺼내온 값 : " + queue.poll());
System.out.println("현재 queue값 :" + queue);
System.out.println();
System.out.println("삭제없이 꺼내온 값 : " + queue.peek());
System.out.println("현재 queue값 :" + queue);
}
}
**문제
package kr.or.ddit.basic;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
/*
문제) 학번, 이름, 국어점수, 영어점수, 수학점수, 총점, 등수를
멤버로 갖는 Student클래스를 만든다.
이 클래스의 생성자에서는 학번, 이름, 국어점수, 영어점수, 수학점수만
인수값으로 받아서 초기화 처리를 한다.
이 Student객체는 List에 저장하여 관리한다.
List에 저장된 데이터들을 학번의 오름차순으로 정렬할 수 있는 내부 정렬 기준을 구현하고,
총점의 역순으로 정렬하는데 총점이 같으면 이름의 오름차순으로 정렬이 되는
외부 정렬 기준 클래스를 작성하여 정렬된 결과를 출력하시오.
(단, 등수는 List에 전체 데이터가 추가된 후에 구하도록 한다.)
*/
public class StudentTest {
public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<Student>();
list.add(new Student(2022, "박승배", 37, 55, 60));
list.add(new Student(2023, "김승배", 50, 88, 20));
list.add(new Student(2020, "선승배", 70, 30, 99));
list.add(new Student(2021, "구승배", 90, 10, 67));
list.add(new Student(2029, "곽승배", 100, 77, 42));
list.add(new Student(44443,"팔승배",98,77,44));
for(int i = 0 ;i < list.size(); i++) {
for(int j = 0; j < list.size(); j++) {
list.get(i).setGrade(list.get(j).getSum());
}
}
System.out.println("정렬 전 ...");
for(Student st : list) {
System.out.println(st.toString());
}
System.out.println("---------------------------------------------");
//오름차순
Collections.sort(list);
System.out.println("총점의 오름차순으로 정렬하기");
for(int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println("---------------------------------------------");
Collections.sort(list, new sumStudent());
System.out.println("총점의 역순으로 정렬하기");
for(int i = 0 ; i < list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println();
}
}
class sumStudent implements Comparator<Student>{
@Override
public int compare(Student s1, Student s2) {
if(s1.getSum() == s2.getSum()) {
return s1.getName().compareTo(s2.getName());
}else {
return s1.getSum()-s2.getSum();
}
}
}
class Student implements Comparable <Student>{
private int num;
private String name;
private int kor;
private int eng;
private int math;
private int sum ;
private int grade =1;
public Student(int num, String name, int kor, int eng, int math) {
super();
this.num = num;
this.name = name;
this.kor = kor;
this.eng = eng;
this.math = math;
this.sum = kor+eng+math;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getKor() {
return kor;
}
public void setKor(int kor) {
this.kor = kor;
}
public int getEng() {
return eng;
}
public void setEng(int eng) {
this.eng = eng;
}
public int getMath() {
return math;
}
public void setMath(int math) {
this.math = math;
}
public int getSum() {
return sum;
}
public void setSum(int sum) {
this.sum = sum;
}
public int getGrade() {
return grade;
}
public void setGrade(int sum) {
if(sum > this.sum) this.grade ++;
}
@Override
public String toString() {
return "[학번 : " + num + ", 이름 : " + name + ", 국어점수 : " + kor + ", 영어점수 : " + eng + ", 수학점수 : " + math + ", 총합 : "
+ sum + ", 석차 : " + grade + "]";
}
@Override
public int compareTo(Student snum) {
return this.getNum()-snum.getNum(); //오름차순이라 - 를 해준다
}
}