简单的循环队列和链式队列

循环队列

#include<stdio.h>
#include<malloc.h>
typedef struct Queue{
	int *pBase;
	int front;
	int rear;
}Que;
void init(Que *p){
	p->pBase = (int *)malloc(sizeof(int) * 6);
	p->front=p->rear=0;
}
bool en(Que *p,int val){
	if((p->rear+1)%6==p->front){
		printf("溢出了");
		return false;
	}
	else{
		p->pBase[p->rear]=val;
		p->rear = (p->rear+1)%6 ;
		return true;
	}
}
void print(Que *p)
{
	int a;
	a=(p->front)%6;
	for(;a!=p->rear;a=a%6){
	printf("%d ",p->pBase[a]);
	a++;
	}
}
bool De(Que *p,int *e)
{
	if(p->rear==p->front){
		printf("队列为空");
		return false;
	}
	else{
		*e=p->pBase[p->front];
		p->front=(p->front+1)%6;
		return true;
	}
}

int main(){
	Que Q;
	init(&Q);
	en(&Q,1);
	en(&Q,2);
	en(&Q,3);
	en(&Q,4);
	print(&Q);
	int b;
	De(&Q,&b);
	printf("出队为%d\n",b);
	print(&Q);
	return 0;
}

链式队列

#include<stdio.h>
#include<malloc.h>
typedef struct Qnode
{
	int date;
	struct Qnode *next;
}Qn,*QNO;
typedef struct{
	QNO front;
	QNO rear;
}Link;
void init(Link &Q){
	Q.front=Q.rear=new Qn;
	Q.front->next=NULL;
}
void inset(Link &Q,int e){
	QNO p;
	p=new Qn;
	p->date=e;
	p->next=NULL;
	Q.rear->next=p;
	Q.rear=p;
}
bool print(Link &Q){
	if(Q.rear==Q.front){
		printf("队列为空");
		return false;
	}
	else{
		QNO p;
		for(p=Q.front->next;p!=Q.rear->next;p=p->next){
			printf("%d ",p->date);
		}
		return true;
	}
}
bool sta(Link &Q,int *e){
	if(Q.rear==Q.front){
		printf("队列为空");
		return false;
	}
	else
	{
		QNO p;
		p=Q.front->next;
		*e=Q.front->next->date;
		Q.front->next=Q.front->next->next;
		if(Q.rear==Q.front->next){
			Q.rear=Q.front;
		}
		delete p;
		return true;
	}
}
int main(){
	Link Q;
	init(Q);
	inset(Q,1);
	inset(Q,2);
	inset(Q,3);
	print(Q);
	int e;
	sta(Q,&e);
	printf("出队为%d\n",e);
	print(Q);
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值