模拟队列的时候有时会出现数据丢失的情况
#include<iostream>
#include<vector>
using namespace std;
struct QUEUE {
int* pBASE;
int front;
int rear;
};
int init(QUEUE*);//初始化队列
void inqueue(QUEUE*,int);//入队
void traverse(QUEUE*,int);//遍历
bool full(QUEUE*,int);//判断是否满
bool empty(QUEUE*);//判断是否空
int main() {
QUEUE newQUEUE;
int val = init(&newQUEUE);
inqueue(&newQUEUE, val);
inqueue(&newQUEUE, val);
inqueue(&newQUEUE, val);
inqueue(&newQUEUE, val);
traverse(&newQUEUE,val);
system("pause");
return 0;
}
int init(QUEUE* pQUEUE) {
int i;
cout << "请输入数组长度" << endl;
cin >> i;
i += 1;
vector<int>arr;
arr.resize(i);
QUEUE newQUEUE;
pQUEUE->pBASE = &arr[0];
pQUEUE->front = 0;
pQUEUE->rear = 0;
return i;
}//初始化队列
void inqueue(QUEUE* pQUEUE, int val) {
int m = 0;
if (full( pQUEUE,val)) {
cout << "队列已满,无法添加" << endl;
}
else {
cout << "请输入要添加的数据" << endl;
cin >> m;
pQUEUE->pBASE[pQUEUE->rear]=m;
pQUEUE->rear = (pQUEUE->rear+1)%val;
cout << pQUEUE->pBASE[pQUEUE->rear - 1] << endl;//在将此行注释掉时就会出现数据大量丢失,不注释掉的话数组第一个元素就会丢失
}
}//入队
bool full(QUEUE* pQUEUE,int val) {
if ((pQUEUE->rear + 1) % val == pQUEUE->front) {
return true;
}
else
return false;
}//判断是否满
bool empty(QUEUE* pQUEUE) {
if (pQUEUE->front == pQUEUE->rear) {
return false;
}
else
return true;
}//判断是否空
void traverse(QUEUE* pQUEUE,int val) {
int x;
for (int x = 0; x < val-1; x++) {
cout << pQUEUE->pBASE[x] << endl;
}
}//遍历
想知道为什么会出现这种情况