Giúp giải quyết Queue as an array

// Em vua học hàng đợi kiểu mảng động trong C++. dưới đây là code về một số hàm của em, mà khi chạy em bị lỗi là toàn “hàng đợi đã đầy” trong khi em chỉ cấp cho capacity một số, chưa EnQueue nhưng đã bị báo lỗi trên, em nghĩ là mình sai ở hàm Size và hàm IsFull, anh chị nào biết có thể giúp em với ạ

Queue* CreateQueue(Queue*& q, int capacity)
{
	q = new Queue;
	if (q == NULL)
		return NULL;
	q->capacity = capacity;
	q->data = new int[capacity];
	if (q->data == NULL)
	{
		delete q;
		return NULL;
	}
	q->in = 0;
	q->out = -1;
}

int IsEmpty(Queue* q)
{
	if (q->out = -1)
		return 1;
	return 0;
}

int IsFull(Queue* q)
{
	int size = Size(q);
	if (size == q->capacity)
		return 0;
	return 1;
}

void EnQueue(Queue* q, int data)
{
	if (IsFull(q) == 1)
	{
		cout << "\nThe queue is full, overflown condition";
		return;
	}
	q->out++;
	q->out = data;
}

void DeQueue(Queue* q)
{
	if (IsEmpty(q) == 1)
	{
		cout << "\nThe queue is empty now";
		return;
	}
	q->in = 0;
	q->in++;
}

int Size(Queue* q)
{
	return q->in - q->out;
}

void PrintQueue(Queue* q)
{
	for (int i = 0; i <= q->out; i++)
	{
		cout << q->data[i] << "\t";
	}
}

void Empty(Queue* q)
{
	memset(q->data, 0, q->capacity * sizeof(int));
	delete q->data;
	memset(q, 0, sizeof(Queue));
	delete q;
	q = NULL;
}

Vấn đề ở đây. Bạn thử nghĩ xem các giá trị bạn trả về đã phù hợp chưa?

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?