[데이터 구조] 대기 열의 세 가지 실현 방식
49390 단어 데이터 구조
대기 열 은 한 끝 에 만 삽입 되 고 다른 한 끝 에 만 삭제 되 는 질서 있 는 선형 표 입 니 다. 대기 열 에 첫 번 째 로 삽 입 된 요소 도 첫 번 째 로 삭 제 된 요소 이기 때문에 대기 열 은 선진 적 인 선 출 (FIFO) 선형 표 입 니 다.
2. 조작
1) 주요 조작
2) 보조 조작
1) 단순 순환 배열 기반 구현
package dataStructure;
public class ArrayQueue {
private int[] a;
private int front;
private int rear;
private int size;//
private int items ;
public ArrayQueue(int MaxSize) {
size = MaxSize;
a = new int[size];
front = 0;
rear = -1;
items = 0;
}
boolean isEmpty() {
return rear == -1;
}
boolean isFull() {
return items == size;
}
int size() {
return items;
}
void addQueue(int value) {
if(isFull()) {
System.out.println(" !");
return;
}
rear = ++rear % size;
items++;
a[rear] = value;
}
int delQueue() {
if(isEmpty()) {
System.out.println(" !");
return 0;
}
items--;
// front = ++front % size;
// return a[front];
return a[front++ % size];
}
int peek() {
if(isEmpty()) {
System.out.println(" !");
return 0;
}
return a[front];
}
int poll() {
if(isEmpty()) {
System.out.println(" !");
return 0;
}
return a[rear];
}
void dispaly() {
if(isEmpty()) {
System.out.println(" !");
return;
}
int item = front;
for(int i = 0; i < size() ; i++) {
System.out.print(a[item++ % size]+" ");
}
System.out.println();
}
public static void main(String[] args) {
ArrayQueue aq = new ArrayQueue(5);
aq.addQueue(1);
aq.addQueue(2);
aq.addQueue(6);
aq.addQueue(5);
aq.dispaly();
aq.delQueue();
aq.dispaly();
System.out.println(" :" + aq.size() + " : " + aq.size);
System.out.println(" :" + aq.peek());
System.out.println(" :" + aq.poll());
}
}
2) 동적 순환 배열 기반 구현
package dataStructure;
public class DynArrayQueue {
private int[] a;
private int front;
private int rear;
private int size;//
private int items ;
public DynArrayQueue(int MaxSize) {
size = MaxSize;
a = new int[size];
front = 0;
rear = -1;
items = 0;
}
void doubleArray() {
int[] newArray =new int[2 * size];
System.arraycopy(a, 0, newArray, 0, size);
size = 2 * size;
a = newArray;
}
boolean isEmpty() {
return rear == -1;
}
boolean isFull() {
return items == size;
}
int size() {
return items;
}
void addQueue(int value) {
if(isFull()) {
doubleArray();
}
rear = ++rear % size;
items++;
a[rear] = value;
}
int delQueue() {
if(isEmpty()) {
System.out.println(" !");
return 0;
}
items--;
// front = ++front % size;
// return a[front];
return a[front++ % size];
}
int peek() {
if(isEmpty()) {
System.out.println(" !");
return 0;
}
return a[front];
}
int poll() {
if(isEmpty()) {
System.out.println(" !");
return 0;
}
return a[rear];
}
void dispaly() {
if(isEmpty()) {
System.out.println(" !");
return;
}
int item = front;
for(int i = 0; i < size() ; i++) {
System.out.print(a[item++ % size]+" ");
}
System.out.println();
}
public static void main(String[] args) {
DynArrayQueue aq = new DynArrayQueue(2);
aq.addQueue(1);
aq.addQueue(2);
aq.addQueue(6);
aq.addQueue(5);
aq.dispaly();
aq.delQueue();
aq.dispaly();
System.out.println(" :" + aq.size() + " :" + aq.size);
System.out.println(" :" + aq.peek());
System.out.println(" :" + aq.poll());
}
}
3) 링크 기반 의 실현
package dataStructure;
class QueueNode<T> {
private T data;
private QueueNode<T> next = null;
public QueueNode(T data) {
this.data = data;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public QueueNode<T> getNext() {
return next;
}
public void setNext(QueueNode<T> next) {
this.next = next;
}
@Override
public String toString() {
return data + "->";
}
}
public class LLQueue<T> {
QueueNode<T> front;
QueueNode<T> rear;
public LLQueue() {
front = rear = null;
}
int size() {
int count = 0;
QueueNode<T> cur = front;
while(cur != null) {
count++;
cur = cur.getNext();
}
return count;
}
boolean isEmpty() {
//return size() == 0;
return front == null;
}
void addQueue(T data) {
QueueNode<T> node = new QueueNode<>(data);
if(isEmpty()) {
rear = front = node;
}else {
rear.setNext(node);
rear = node;
}
}
QueueNode<T> removeQueue() {
if(isEmpty()) {
System.out.println(" !");
return null;
}
if(front == rear)
return front = rear = null;
QueueNode<T> del = front;
front = front.getNext();
return del;
}
QueueNode<T> peek(){
return front;
}
QueueNode<T> poll(){
return rear;
}
void display(){
if(isEmpty()) {
System.out.println(" !");
return;
}
QueueNode<T> cur = front;
while(cur != null) {
System.out.print(cur.getData() + "->");
cur = cur.getNext();
}
System.out.println();
}
public static void main(String[] args) {
LLQueue<Integer> lq = new LLQueue<>();
lq.addQueue(2);
lq.addQueue(5);
lq.addQueue(7);
lq.display();
System.out.println(" :" + lq.removeQueue());
lq.display();
System.out.println(" :" + lq.size());
System.out.println(" :" + lq.peek());
System.out.println(" :" + lq.poll());
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.