数据结构:链式队列-接口函数实现

时间:2024-06-07 10:12:33
/*注:定义存储指向队头结点与指向队尾结点的指针后,在函数中调用
	  两个结构体时,要注意其中的关系,不要因为队头的结点的指针
	  指向的结点地址的再次指向而造成混乱
*/

void InitLNode(LiNode &B);  //声明函数InitLNode用于初始化链式队列
bool InputLNode(LiNode &B);	//声明函数InputLNode用于在队列中输出数据
bool LNodeEmpty(LiNode& B);	//声明函数LNodeEmpty用于判断队列是否为空
void InsertLNode(LiNode &B);//声明函数InsertLNode用于在队列中输入数据
bool DestroyQueue(LNode& A);//声明函数DestroyQueue用于销毁队列

//在队列中输出数据
bool InputLNode(LiNode &B) {						
	if (LNodeEmpty(B)) {
		return false;
	}else{
		LNode Q = B.front->next;	//定义LNode类型的指针变量Q指向头结点的下一个结点
		printf("输出数据为:%d", Q->data);//输出数据
		B.front->next = Q->next;                        
		if(B.rear == Q){	    //判断输出的结点是否为最后一个结点
			B.rear = B.front;	//将其队列置空
		}
		return true;
	}
}

//判断队列是否为空
bool LNodeEmpty(LiNode &B){			
	if(B.front == B.rear){
		printf("传入的链式队列为空");
		return true;
	}else{
		return false;
	}
}

//在队列中输入数据
void InsertLNode(LiNode &B){						
	Elemtype i;				//定义int类型的变量i接受键盘键入的数据
	LNode W = (QNode*)malloc(sizeof(QNode));//定义LNode类型w向计算机的堆内申请存储空间
	printf("请输入要插入的数据");
	scanf_s("%d", &i);
	W->data = i;
	W->next = NULL;
	B.rear->next = W;
	B.rear = W;					//更新尾结点的指向
}

//初始化链式队列
void InitLNode(LiNode &B){	
	B.front=B.rear=(QNode*)malloc(sizeof(QNode));		
	B.front->next = NULL;						//更新结点中next的指向
	printf("初始化链式队列成功\n");
}