双向静态队列的创建

#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; 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨启飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值