C/C++教程

C/C++实现链式队列

本文主要是介绍C/C++实现链式队列,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

基本功能

1.初始化链式队列:带头结点
2.入队
3.出队
4.输出队列

 

代码

链式队列用单链表来实现,所以掌握了单链表就掌握了链式队列。

不同的是,在定义结点、定义队列时和单链表有点区别。链式队列比单链表多了两个指针,分别指向队头和队尾结点,所以定义队列时,不仅定义结点,还要定义这两个指针。

#include <iostream>
#include <stdlib.h>

using namespace std;

typedef int ElemType;

//链式队列结点 
typedef struct LinkNode{
	ElemType data;
	struct LinkNode *next;
}LinkNode;
//链式队列指针
typedef struct LinkQueue{
	LinkNode *front,*rear;
}LinkQueue;

void InitQueue(LinkQueue &Q);//初始化链式队列:带头结点
void EnQueue(LinkQueue &Q,ElemType x);//入队 
bool DeQueue(LinkQueue &Q,ElemType x);//出队 
bool OutPutQueue(LinkQueue Q);//输出队列 

//初始化:带头结点 
void InitQueue(LinkQueue &Q){
	Q.front=Q.rear=(LinkNode *)malloc(sizeof(LinkNode));//建立头结点
	Q.front->next=NULL; 
}

//入队
void EnQueue(LinkQueue &Q,ElemType x){
	LinkNode *s;
	s=(LinkNode *)malloc(sizeof(LinkNode));
	s->data=x;
	s->next=NULL;
	Q.rear->next=s;
	Q.rear=s;
} 

//出队 
bool DeQueue(LinkQueue &Q,ElemType x){
	if(Q.front==Q.rear)return false;
	LinkNode *p=Q.front->next;
	x=p->data;
	Q.front->next=p->next;
	if(Q.rear==p){
		Q.rear=Q.front;
	}
	free(p);
	return true;
}

//输出队列
bool OutPutQueue(LinkQueue Q){
	if(Q.front==Q.rear){
		printf("队列为空\n"); 
		return false;
	}
	LinkNode *p=Q.front->next;
	while(p!=NULL){
		printf("%d ",p->data);
		p=p->next;
	}
	return true;
}

int main(){
	ElemType x;
	LinkQueue Q;
	InitQueue(Q);
	
	EnQueue(Q,1);
	EnQueue(Q,2);
	EnQueue(Q,3);
	EnQueue(Q,4);
	EnQueue(Q,5);
	DeQueue(Q,x);
	DeQueue(Q,x);
	DeQueue(Q,x);
	DeQueue(Q,x);
	DeQueue(Q,x);
	
	if(DeQueue(Q,x)){
		printf("出队成功\n");
	}else{
		printf("出队失败\n");
	}
	
	OutPutQueue(Q);
	
	return 0;
}
这篇关于C/C++实现链式队列的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!