数据结构-【队列】链式队列和循环队列

队列特性:先进先出(FIFO)——先进队列的元素先出队列。来源于我们生活中的队列(先排队的先办完事)。
其结构图如下所示:
单队列结构图
循环队列结构图
链式队列的实现:
#include <iostream>
#include <windows.h>
using namespace std;

typedef struct Queue
{
	int number;
	Queue *pNext;
}Qu;

Qu *pHead=NULL;
Qu *pEnd=NULL;

void InQueue(int num);
void OutQueue();
void Length();
bool Empty();
void Get_Head();
void Clear_Queue();
void Destory_Queue();
void Create_Queue();
void Traverse();

void Create_Queue() //常见队列;
{
	int num;
	cout<<"please input the data,end with 0:"<<endl;
	cin>>num;
	while(num!=0)
	{
		Qu *pp=new Qu;
		pp->number=num;
		pp->pNext=NULL;
		if(NULL==pHead)
		{
			pHead=pp;
			pEnd=pHead;
		}
		else
		{
			pEnd->pNext=pp;
			pEnd=pp;
		}
		cin>>num;
	}
}

void InQueue(int num)//入队列;
{
	Qu *temp=new Qu;
	temp->number=num;
	temp->pNext=NULL;
	pEnd->pNext=temp;
	pEnd=temp;
}

void OutQueue() //出队列;
{
	if(Empty())
	{
		cout<<"the queue is NULL!"<<endl;
		return;
	}
	else
	{
		Qu *p=NULL;
		p=pHead;
		cout<<"出队元素:"<<pHead->number<<endl;
		pHead=pHead->pNext;
		delete p;
	}
}

bool Empty()
{
	if(!pHead)
		return true;
	else
		return false;
}

void Get_Head() //队列头结点;
{
	if(Empty())
	{
		cout<<"the queue is NULL!"<<endl;
		return;
	}
	else
	{
		cout<<"队首元素:"<<pHead->number<<endl;
	}
}

void Length() //长度;
{
	int count=0;
	Qu *p=pHead;
	while(p)
	{
		count++;
		p=p->pNext;
	}
	cout<<"the length of the Queue is: "<<count<<endl;

}

void Clear_Queue() //清空队列;
{
	if(Empty())
	{
		cout<<"the queue is NULL!"<<endl;
		return;
	}
	else
	{
		while(pHead)
		{
			Qu *p=pHead;
			pHead=pHead->pNext;
			delete p;
		}
	}
}

void Destory_Queue()//销毁队列;
{
	if(Empty())
	{
		cout<<"the queue is NULL!"<<endl;
		return;
	}
	else
	{
		Clear_Queue();
	}
}


void Traverse() //遍历队列
{
	if(Empty())
	{
		cout<<"the queue si NULL!"<<endl;
		return;
	}
	else
	{
		Qu *p=pHead;
		while(p)
		{
			cout<<p->number<<" ";
			p=p->pNext;
		}

	}
}
void menue()
{
	while(1)
	{
		int choice=0;
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
		//设置代码输出的颜色代码,green,red,blue;
		cout<<"请选择你要执行的操作:"<<endl<<endl;
		cout<<"1.创建初始队列:"<<endl;
		cout<<"2.遍历队列:"<<endl;
		cout<<"3.返回队列的首个元素:"<<endl;
		cout<<"4.队列的长度:"<<endl;
		cout<<"5.出队:"<<endl;
		cout<<"6.入队:"<<endl;
		cout<<"7.清空队列:"<<endl;
		cout<<"8.销毁队列:"<<endl;
		cout<<"9.退出:"<<endl;

		cin>>choice;

		switch(choice)
		{
		case 1:Create_Queue();
			break;
		case 2:Traverse();
			break;
		case 3:Get_Head();
			break;
		case 4:Length();
			break;
		case 5:OutQueue();
			break;
		case 6:	
			int num;
			cout<<"please input the data to stack,end with 0:"<<endl;
			cin>>num;
			while(0!=num)
			{
				InQueue(num);
				cin>>num;
			}
			break;
		case 7:Clear_Queue();
			break;
		case 8:Destory_Queue();
			break;
		case 9:
			return;
		default:
			cout<<"你正确输入你要执行的操作:"<<endl;
		}
	}
}
int main()
{
	menue();
	system("pause");
	return 0;
}<strong>
</strong>
运行结果:

循环队列:
实现代码:
#include <iostream>
#include <windows.h>
using namespace std;
#define  MAXSIZE 20

int front=0;
int rear=0;
int data[MAXSIZE];

bool Empty();
bool Full();
void InQueue();
void OutQueue();
void Length();
void Clear_Queue();
void Get_Head();
void Traverse();

void InQueue(int num)
{
	if(Full())
	{
		cout<<"the QUEUE is FULL!"<<endl;
		return;
	}
	else
	{
		data[rear]=num;	
		<span style="color:#ff0000;">rear=(rear+1) % MAXSIZE; //入队;</span>
	}
}
bool Empty()
{
	<span style="color:#ff0000;">if(rear==front)   //判断循环队列为空;</span>
		return true;
	else
		return false;
}
bool Full()
{
	<span style="color:#ff0000;">if((rear+1) % MAXSIZE==front)//判断循环队列已满;</span>
		return true;
	else 
		return false;
}
void OutQueue()
{
	if(Empty())
	{
		cout<<"the QUEUE is FULL!"<<endl;
		return;
	}
	else
	{
		cout<<data[front]<<" ";
		data[front]=0;
		<span style="color:#ff0000;">front=(front+1)%MAXSIZE;  //出队列;</span>
	}
}

void Length()
{
	<span style="color:#ff0000;">int count=(rear-front+MAXSIZE)%MAXSIZE;  //长度;</span>
	cout<<"队列的长度:"<<count<<endl;
}

void Traverse()
{
	int fronts=front;
	int rears=rear;
	if(Empty())
	{
		cout<<"the queue is NULL!"<<endl;
		return;
	}
	while(rears!=fronts)
	{
		cout<<data[fronts]<<" ";
		fronts++;
	}
}

void Clear_Queue()
{
	data[MAXSIZE]=0;
	cout<<"the queue has been Cleared!"<<endl;
}

void Get_Head()
{
	cout<<"队首元素:"<<data[front]<<endl;

}

void Create_Queue()
{
	int num;
	cout<<"please input the number,end with 0"<<endl;
	cin>>num;
	while(num!=0)
	{
		if(Full())
		{
			cout<<"the queue is full!"<<endl;
			return;
		}
		data[rear]=num;
		rear=(rear+1)%MAXSIZE;
		cin>>num;
	}
}
void menue()
{
	while(1)
	{
		int choice=0;
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
		//设置代码输出的颜色代码,green,red,blue;
		cout<<"请选择你要执行的操作:"<<endl<<endl;
		cout<<"1.创建初始队列:"<<endl;
		cout<<"2.遍历队列:"<<endl;
		cout<<"3.返回队列的首个元素:"<<endl;
		cout<<"4.队列的长度:"<<endl;
		cout<<"5.出队:"<<endl;
		cout<<"6.入队:"<<endl;
		cout<<"7.清空队列:"<<endl;
		cout<<"8.退出:"<<endl;

		cin>>choice;
		switch(choice)
		{
		case 1:Create_Queue();
			break;
		case 2:Traverse();
			break;
		case 3:Get_Head();
			break;
		case 4:Length();
			break;
		case 5:OutQueue();
			break;
		case 6:	
			int num;
			cout<<"please input the data to stack,end with 0:"<<endl;
			cin>>num;
			while(0!=num)
			{
				InQueue(num);
				cin>>num;
			}
			break;
		case 7:Clear_Queue();
			break;
		case 8:
			return;
		default:
			cout<<"你正确输入你要执行的操作:"<<endl;
		}
	}
}
int main()
{
	menue();
	system("pause");
	return 0;
}

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值