#include<stdio.h>
#include<malloc.h>
struct Queue {
int* pdata;
int front;
int later;
};
void init_Queue(struct Queue*ps) {
ps-> pdata = (int*)malloc(sizeof(int) * 8); //bug:int* pdata = (int*)malloc(sizeof(int) * 8); 这样写的话就不是队列分配内存空间了,而是普通的
//动态数组分配内存空间了,要指明是哪个队列分配的内存空间
ps-> front = 0; // bug:int front这里也是错了
ps-> later = 0; // bug:int later
}
bool is_full(struct Queue* ps) {
if (ps->front == (ps->later + 1) % 8) {
return true;
}
else {
return false;
}
}
bool enter_Queue(struct Queue* ps, int val) {
if (is_full(ps)) {
return false;
}
else {
ps->pdata[ps->later] = val;
ps->later = (ps->later + 1) % 8;
return true;
}
}
bool is_empty(struct Queue* ps) {
if (ps->front == ps->later) {
printf("队列是空的");
return true;
}
else {
return false;
}
}
bool out_Queue(struct Queue* ps, int* pval) {
if (is_empty(ps)) {
printf("队列是空的");
return false;
}
*pval = ps->pdata[ps->front]; //bug: ps->pdata[ps->front] =*pval;
ps->front = (ps->front + 1) % 8;
return true;
}
void display(struct Queue* ps) {
int i = ps->front;
while (i != ps->later) {
printf("%d", ps->pdata[i]);
i = (i + 1) % 8;
}
return;
}
int main() {
Queue Q;
int pval;
init_Queue(&Q);
enter_Queue(&Q, 3);
enter_Queue(&Q, 4);
enter_Queue(&Q, 5);
enter_Queue(&Q, 6);
enter_Queue(&Q, 7);
enter_Queue(&Q, 8);
enter_Queue(&Q, 9);
enter_Queue(&Q, 10);
enter_Queue(&Q, 11);
enter_Queue(&Q, 12);
display(&Q);
printf("\n");
if (out_Queue(&Q, &pval)) {
printf("出队成功,出队的元素是:%d", pval);
}
printf("\n");
display(&Q);
return 0;
}
bug:ps-> pdata = (int*)malloc(sizeof(int) * 8); //bug:int* pdata = (int*)malloc(sizeof(int) * 8); 这样写的话就不是队列分配内存空间了,而是普通的
//动态数组分配内存空间了,要指明是哪个队列分配的内存空间
ps-> front = 0; // bug:int front这里也是错了
ps-> later = 0; // bug:int later*pval = ps->pdata[ps->front]; //bug: ps->pdata[ps->front] =*pval;
5104

被折叠的 条评论
为什么被折叠?



