스택(Stack)에 대해 설명하고 예제소스를 구현해보아라

  • 후입선출(LIFO : Last In Fisrt Out) 방식의 자료구조
  • 후입선출이란 나중에 들어간 것이 먼저 나온다는 뜻이다. 
  • 배열 정수형 스택 예제
  • isFull() : 스택이 가득차있는지 확인하는 함수
  • isEmpty() : 스택이 비워져있는지 확인하는 함수
  • push(int data) : 스택에 자료를 넣는 함수
  • pop() : 스택에 있는 자료를 빼는 함수
#include <iostream>
#include <stdio.h>
#define MAX_SIZE 100

class stack
{
private:
	int nArray[MAX_SIZE];
	int index;

public:
	stack();
	bool isFull();
	bool isEmpty();
	void push(int data);
	int pop();
};

stack::stack()
{
	index = -1;
}

bool stack::isEmpty()
{
	if (index <= -1) return true;
	else			 return false;
}

bool stack::isFull()
{
	if (index >= MAX_SIZE-1) return true;
	else					 return false;

}

void stack::push(int data)
{
	if (isFull()) 
	{
		printf("꽉 찼습니다");
		return;
	}
	nArray[++index] = data;
}

int stack::pop()
{
	if (isEmpty())
	{
		printf("스택이 비었습니다");
		return -1;
	}
	return nArray[index--];
}

int main()
{
	stack st;
	int input;

	scanf_s("%d", &input);
	st.push(input);

	printf("%d", st.pop());

	return 0;
}

큐(Queue)에 대해 설명하고 예제소스를 구현해보아라

    • 선입선출(FIFO : First In Fisrt Out) 방식의 자료구조
    • 선입선출이란 먼저 들어간 것이 먼저 나온다는 뜻이다. (ex : 화장실 줄을 생각해보자)
    • 원형큐(Circular Queue)예제
    • 앞당김 작업 없이 지속적인 큐의 사용을 위해 사용
    • isFull() : 큐에 가득차있는지 확인하는 함수
    • isEmpty() : 큐가 비워져있는지 확인하는 함수
    • enqueue(int data) : 큐에 자료를 넣는 함수
    • dequeue() : 큐에 있는 자료를 빼는 함수
#include <iostream>
#include <stdio.h>
# define MAX_SIZE 5

class Queue
{
private:
	int nArray[MAX_SIZE];
	int index_front;
	int index_back;

public:
	Queue();

	bool isEmpty();
	bool isFull();
	void enqueue(int data);
	int dequeue();

};

Queue::Queue()
{
	index_front = 0;
	index_back = 0;
}

bool Queue::isEmpty()
{
	if (index_front == index_back)  return true;
	else				return false;
}

bool Queue::isFull()
{
	if ((index_back + 1)%MAX_SIZE == index_front)    return true;
	else	 					 return false;
}

void Queue::enqueue(int data)
{
	if (isFull())
	{
		printf("큐 FULL\n");
		return;
	}

	index_back = (index_back + 1) % MAX_SIZE;
	nArray[index_back] = data;

	return;
}

int Queue::dequeue()
{
	if (isEmpty()) 
	{
		printf("큐 Empty\n");
		return -1;
	}

	index_front = (index_front + 1) % MAX_SIZE;
	return nArray[index_front];
}

int main()
{
	Queue tq;
	for (int i = 1; i < 6; i++)
	{
		tq.enqueue(i);
	}

	printf("pop 한번 %d\n", tq.dequeue());
	tq.enqueue(11);

	while (!tq.isEmpty())
	{
		printf("%d\n", tq.dequeue());
	}

	printf("%d\n", tq.isFull());
	printf("%d\n", tq.isEmpty());

	return 0;
}

 

 

+ Recent posts