数据结构(队列)

队列是只允许在一端进行插入操作,在另一端进行删除操作的线性表。先进先出(First in First out)

循环队列的结构

struct SqQueue{
    int data[MAXSIZE];
    int front;   //头指针
    int rear;    //尾指针
};

初始化

void Initqueue(SqQueue Q){
    Q->front=0;
    Q->rear=0;
}

求队列长度

int QueueLength(SqQueue Q){
    return (Q.rear-Q.front+MAXSIZE) % MAXSIZE;
}

 

入队  出队

bool Enqueue(SqQueue Q,int x){
	if((Q->rear+1)%MAXSIZE==Q->front){
		return false;
	}
	Q->data[Q->rear]=x;
	Q->rear=(Q->rear+1)%MAXSIZE;  //整合rear和front大小的问题 
	return true;
} 

bool Dequeue(SqQueue Q){
	if(Q->front == Q->rear){
		return false;
	}
	Q->front=(Q->front+1)%MAXSIZE;
	return true;
} 

 

队列的链式存储   头结点front>>队头a1>>结点a2>>队尾rear

结构

typedef struct QueuePrt *Next;
struct QueuePrt{   //结点结构 
	int data;
	Next next;
};

struct Linlqueue{  //链表结构
	Next front,rear;
}; 

入队和出队

bool EnQueue(LinkQueue Q,int e){
	QueuePrt s=(QueuePrt)malloc(sizeof(struct QueuePrt));
	if(!s){
		return false;
	} 
	s->data=e;
	s->next=NULL;
	Q->rear->next=s;
	Q->rear=s;
	return true;
}

bool DeQueue(LinkQueue Q){
	QueuePrt p;
	if(Q->front==Q->rear)
		return false;
	p=Q->front->next;
	Q->front->next=p->next;
	if(Q->rear==p){  //若链表处头结点外剩下一个元素,需要rear指向头结点 
		Q->rear=Q->front;
	}
	free(p);
	
	return true;
}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值