큐 스택 자바

스택

스택은입니다 마지막 아웃 데이터 구조. 순서가 먼저 꺼낸 마지막에 넣어 무엇에 따라 어떤 난해한 개념, 당신은 당신이 데리고하고자 할 때, 용기에 넣어하고자 할 때 많은 것들,하지 않을 때, 우리는 스택을 생각해야한다.

스택 상자 유추 책 데이터 스택의 비유. 이제 빈 상자가 책을 넣고, 첫 번째 책이 상자의 아래쪽에 위치하는,이 다음 두 번째, 세 번째 .... 선물을 넣어 상자에서 책을 제거 할 때, 먼저 상단이 책 수 (책의 마지막 릴리스를하기보다는 책의 시작 부분을 넣어)해야한다 제거합니다. 도면은 스택으로 요소의 공정 개략도에 도시되어있다.

이 스택은 데이터 구조 자바 코드 (실행하여 배열)에 의해 달성된다.

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

 

 

 

 

 

게시 20 개 원래 기사 · 원 찬양 2 · 조회수 1,590

추천

출처blog.csdn.net/weixin_42132733/article/details/105152706