我的作业需要解决方案。 我需要不断递增数据,即使该值与q.rear不同。 因为我需要在排队时逐一显示所有数组。 现在的问题是,当我出列时,q.rear值减少,而数据值没有减少。 但是当我将它排回队列时,q.rear值增加了,而数据值没有增加。 那么如何在排队时保持数据值始终递增呢?
#include <iostream>
#define MAX 20
using namespace std;
struct Queue {
int front, rear, data[MAX], dummy, bejat;
}Q;
bool isFull() {
return Q.rear == MAX;
}
bool isEmpty() {
return Q.rear == 0;
}
void printQueue() {
if (isEmpty()) {
cout << "no queue"<<endl;
} else {
cout << "QUEUE : ";
for (int i = Q.front; i < Q.rear; i++) {
cout << Q.data[i] << ((Q.rear-1 == i) ? "" : ",");
}
cout << endl;
}
}
void enqueue() {
if (isFull()) {
cout << "Full!"<<endl;
} else {
int data;
int a[] = {0,1,3,5,7,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
for (data = 0; data <= Q.rear; data++) {
a[data];
}
Q.data[Q.rear] = a[data];
Q.bejat = a[data];
Q.dummy = data;
Q.rear++;
cout << "Adding Data\n";
printQueue();
}
}
void dequeue() {
if (isEmpty()) {
cout << "The queue still empty!"<<endl;
} else {
cout << "Picking data \"" << Q.data[Q.front] << "\"..." << endl;
for (int i = Q.front; i < Q.rear; i++) {
Q.data[i] = Q.data[i + 1];
}
Q.rear--;
printQueue();
}
}
int main() {
int choose;
do {
cout<< "-------------------\n"
<< " Menu Optoions\n"
<< "-------------------\n"
<< " [1] Enqueue \n"
<< " [2] Dequeue\n"
<< " [3] Exit \n\n"
<< "Array : "<< Q.bejat<<"\n"
<< "Q.Rear: "<<Q.rear<<"\n"
<< "Data(Dummy) : "<< Q.dummy<<"\n"
<< "Insert options : "; cin >> choose;
switch (choose) {
case 1:
enqueue();
break;
case 2:
dequeue();
break;
case 3:
cout << "Thank you\n\n";
break;
default:
cout << "Option not available\n\n";
break;
}
} while (choose !=3);
return 0;
}
如果我没听错的话,你可能想要这样的东西:
//... void enqueue() { if (isFull()) { cout << "Full!"<<endl; } else { int data; int a[] = {0,1,3,5,7,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}; for (data = 0; data <= Q.rear; data++) { a[data] = a[data] ; //<-- this needs some data input } Q.data[Q.rear] = a[data]; Q.bejat = a[data]; Q.dummy = data; Q.rear++; cout << "Adding Data\n"; printQueue(); } } //...