일지

자료구조...55

niamdank 2020. 12. 30. 11:51

원형 큐 삽입 메서드 구현

 

CircularQueue.cpp

/// <summary>
/// CircularQueue의 끝 부분에 값을 추가한다.
/// </summary>
/// <param name="value">추가할 값</param>
void CircularQueue::Enqueue(int value)
{
	if (IsNeedToResize())
	{
		Resize();
	}

	m_items[m_front++] = value;
	m_count++;

	m_front = m_front % (m_capacity + 1);
}

/// <summary>
/// CircularQueue에 count만큼의 값을 삽입할 수 있는지 확인한다.
/// </summary>
/// <returns>삽입 가능 여부</returns>
bool CircularQueue::IsNeedToResize()
{
	return m_capacity < m_count + 1;
}

/// <summary>
/// 데이터 삽입 시 공간이 부족한 경우 공간을 2배로 늘려준다.
/// </summary>
void CircularQueue::Resize()
{
	int* newItems{ new int[m_capacity * 2]{ 0 } };
	for (size_t i = 0; i < m_count; i++)
	{
		newItems[i] = m_items[m_rear++];
		m_rear = m_rear % (m_capacity + 1);
	}

	m_capacity *= 2;
	m_rear = 0;
	m_front = m_count;

	delete[] m_items;
	m_items = newItems;
}