본문 바로가기
C++/자료구조

[C++]원형큐

by 덤더리덤떰 2023. 11. 14.

 

circular_queue.cpp
#include "cir_queue.h"
#include <iostream>
using namespace std;
bool cir_queue::IsEmpty() {
	return front == rear ;
}
bool cir_queue::IsFull() {
	return (rear+1)%size == front%size;
}
void cir_queue::enqueue(int item) {
	if (IsFull()) {
		cout << "Since Queue is Full, you can't enqueue" << endl;
		return;
	}
	else {
		que[(++rear)%size] = item;
	}
}
int cir_queue::dequeue() {
	if (IsEmpty()) {
		cout << "Since Queue is empty, you can't dequeue" << endl;
		return -1;
	}
	else {
		return que[(++front) % size];
	}
}

void cir_queue::printQueue() {
	if (IsEmpty()) {
		cout << "Queue is empty" << endl;
		return;
	}
	else {
		int start = (front + 1) % size;
		int end = (rear + 1) % size;
		while (start != end) {
			cout << que[start] << " ";
			start++;
			start %= size;
		}
		cout << endl;
	}
}

int cir_queue::peek() {
	if (IsEmpty()) {
		cout << "Queue is empty" << endl;
		return -1;
	}
	else {
		return que[(front+1)%size];
	}
}

 

cir_queue.h
#pragma once

class cir_queue
{
private:
	int* que;
	int front;
	int rear;
	int size;
public:
	cir_queue(int queue_size):front(0),rear(0),size(queue_size) {
		que = new int[queue_size];
	}
	~cir_queue() {
		delete[]que;
	}
	bool IsEmpty();
	bool IsFull();
	void enqueue(int item);
	int dequeue();
	void printQueue();
	int peek();
};

 

cir_queue.cpp
#include "cir_queue.h"
#include <iostream>
using namespace std;
bool cir_queue::IsEmpty() {
	return front == rear ;
}
bool cir_queue::IsFull() {
	return (rear+1)%size == front%size;
}
void cir_queue::enqueue(int item) {
	if (IsFull()) {
		cout << "Since Queue is Full, you can't enqueue" << endl;
		return;
	}
	else {
		que[(++rear)%size] = item;
	}
}
int cir_queue::dequeue() {
	if (IsEmpty()) {
		cout << "Since Queue is empty, you can't dequeue" << endl;
		return -1;
	}
	else {
		return que[(++front) % size];
	}
}

void cir_queue::printQueue() {
	if (IsEmpty()) {
		cout << "Queue is empty" << endl;
		return;
	}
	else {
		int start = (front + 1) % size;
		int end = (rear + 1) % size;
		while (start != end) {
			cout << que[start] << " ";
			start++;
			start %= size;
		}
		cout << endl;
	}
}

int cir_queue::peek() {
	if (IsEmpty()) {
		cout << "Queue is empty" << endl;
		return -1;
	}
	else {
		return que[(front+1)%size];
	}
}

'C++ > 자료구조' 카테고리의 다른 글

[C++]AVL Tree  (0) 2023.12.07
[C++]Reverse doubly linked list with sentinel nodes  (1) 2023.11.29
[C++]Doubly linked list with sentinel nodes  (3) 2023.11.29
[c++] 스택 활용한 수식 계산  (0) 2023.11.16
[c++]스택  (0) 2023.11.13