链式队列操作的实现(无头节点)

#include<stdio.h>

//定义节点的结构体 
typedef struct qnode{
	DataType data;
	struct qnode *next;
}LQNode;

//定义队头指针队尾指针的结构体 
typedef struct{
	//队头指针 
	LQNode *front;
	//队尾指针 
	LQNode *rear;
}LQueue; 

//初始化链式队列Q
void QueueInitiate(LQueue *Q){
	//定义初始队尾指针下标值 
	Q->rear = NULL;
	//定义初始对头指针下标值 
	Q->front = NULL;
} 

//非空否(判断链式队列Q非空否)
int QueueNotEmpty(LQueue Q){
	//判断链式队列Q是否为空 
	if(Q->rear->next==Q->rear){
		//若为空,返回0 
		return 0;
	} 
	else{
		//若不为空返回1 
		return 1;
	}
}

//入队列(将x的值从队尾插入到链式队列Q) 
int QueueAppend(LQueue *Q,DataType x){
	LQNode *p;
	//申请新节点 
	p = (LQNode *)malloc(sizeof(LQNode));
	//将x的值赋值给p节点的数据域 
	p->data = x;
	//将p指向的指针域指向空值 
	p->next = NULL;
	//保持循环,将插入的节点指向头节点 
	p->next=Q->rear->next;
	//将p接到队尾 
	Q->rear->next=p;
	//尾指针后移
	Q->rear=p;
	//入队列成功,返回1 
	return 1;
}

//出队列(删除队列Q的队头元素并赋值给d) 
int QueueDelete(LQueue *Q,DataType *d){
	LQNode *p;
	//判断链式队列Q是否为空 
	if(Q->rear->next==Q->rear){
		printf("队列已空无数据元素出列!\n");
		//若为空,则返回0 
		return 0;
	}
	//若不为空 
	else{
		//将队头的元素值赋值给d 
		*d = Q->front->data;
		p = Q->front;
		//出队列节点脱链 
		Q->front = Q->front->next;
		//删除最后一个节点,要置最后一个节点为空 
		if(Q->front == NULL){
			Q->rear = NULL;
		} 
		//释放空间 
		free(p);
		//出队列成功,返回1 
		return 1;
	}
} 

//取对头数据元素(将队头的元素赋值给d带回输出) 
int QueueGet(LQueue Q,DataType *d){
	//判断链式队列Q是否为空 
	if(Q->rear->next==Q->rear){
		printf("队列已空无数据元素出队列!\n");
		//若为空,则返回0 
		return 0;
	}
	//否则 
	else{
		//将队头元素值赋值给d 
		*d = Q.front->data;
		//取得成功返回1 
		return 1;
	}
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值