스택
스택은입니다 마지막 아웃 데이터 구조. 순서가 먼저 꺼낸 마지막에 넣어 무엇에 따라 어떤 난해한 개념, 당신은 당신이 데리고하고자 할 때, 용기에 넣어하고자 할 때 많은 것들,하지 않을 때, 우리는 스택을 생각해야한다.
스택 상자 유추 책 데이터 스택의 비유. 이제 빈 상자가 책을 넣고, 첫 번째 책이 상자의 아래쪽에 위치하는,이 다음 두 번째, 세 번째 .... 선물을 넣어 상자에서 책을 제거 할 때, 먼저 상단이 책 수 (책의 마지막 릴리스를하기보다는 책의 시작 부분을 넣어)해야한다 제거합니다. 도면은 스택으로 요소의 공정 개략도에 도시되어있다.
이 스택은 데이터 구조 자바 코드 (실행하여 배열)에 의해 달성된다.
당신의 MyStack.java 범주 쓰기 :
public class MyStack {
//使用数组来实现栈,声明一个数组
int[] Arr;
//构造方法
public MyStack() {
Arr = new int[0];
}
//压入元素的方法push
public void push(int element) {
//创建一个新数组
int[] newArr = new int[Arr.length+1];
//将原数组的元素赋值到新数组
for(int i=0; i<Arr.length; i++) {
newArr[i] = Arr[i];
}
//将新增加的元素放入新数组中
newArr[Arr.length] = element;
//使用新数组替换原数组
Arr = newArr;
}
//取出栈顶元素
public int pop() {
//若栈中没有元素,则取出的元素的下标为0-1=-1,超出下标界限。因此要抛出异常
if(Arr.length == 0) {
throw new RuntimeException("下标越界");
}
//取出数组中最后一个元素
int element = Arr[Arr.length-1];
//创建一个新的数组
int[] newArr = new int[Arr.length-1];
//将原数组中除最后一个元素以外的其他元素复制到新数组
for(int i=0; i<Arr.length-1; i++) {
newArr[i] = Arr[i];
}
//将新数组替换原数组
Arr = newArr;
//返回栈顶元素
return element;
}
//查看栈顶元素
public int look() {
//将数组中最后一个元素返回
return Arr[Arr.length-1];
}
//判断栈是否为空
public boolean isEmpty() {
return Arr.length==0;
}
}
쓰기 테스트 클래스의 TestStack :
public class TestStack {
public static void main(String[] args) {
//创建一个栈
MyStack ms = new MyStack();
//向栈中压入数据
ms.push(1);
ms.push(2);
ms.push(3);
//查看栈顶元素
System.out.println(ms.look());
//取出栈顶元素
System.out.println(ms.pop());
System.out.println(ms.pop());
//判断栈是否为空
System.out.println(ms.isEmpty());
}
}
둘째, 큐
큐 반대 스택은 스택은 마지막 아웃 데이터 구조이며, 큐 A는 FIFO의 데이터 구조. 이 데이터 구조는 큐가 문을지나 이제 경우이 구조가 대기열과 동일하기 때문에, 큐라고하는 이유는, 첫째 이동 (데이터 큐를 삽입하는) 사람들의 상단에 있어야합니다. 다음 그림은 큐의 개략적 인 구성을 나타낸다 :
하자의 큐는 자바 코드를 사용하여 (배열을 사용하여 구현).
당신의 MyQueue.java 범주 쓰기 :
public class MyQueue {
int[] Arr;
public MyQueue() {
Arr = new int[0];
}
//入队
public void add(int element) {
//创建一个新数组
int[] newArr = new int[Arr.length+1];
//将原数组的元素赋值到新数组
for(int i=0; i<Arr.length; i++) {
newArr[i] = Arr[i];
}
//将新增加的元素放入新数组中
newArr[Arr.length] = element;
//使用新数组替换原数组
Arr = newArr;
}
//取出队列元素
public int poll() {
//取出数组中第1个元素
int element = Arr[0];
//创建一个新的数组
int[] newArr = new int[Arr.length-1];
//将原数组中除第一个元素以外的其他元素复制到新数组
for(int i=0; i<newArr.length; i++) {
newArr[i] = Arr[i+1];
}
//将新数组替换原数组
Arr = newArr;
//返回队列中的元素
return element;
}
//判断栈是否为空
public boolean isEmpty() {
return Arr.length==0;
}
}
그런 다음 쓰기 테스트 클래스의 TestQueue.java :
public class TestQueue {
public static void main(String[] args) {
//创建一个队列
MyQueue mq = new MyQueue();
//将元素入队
mq.add(1);
mq.add(2);
mq.add(3);
mq.add(4);
//出队
System.out.println(mq.poll());
//判断队列是否为空
System.out.println(mq.isEmpty());
}
}