C++实现顺序队列和链队列

一,队列的相关概念

1,队列的定义

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2,队列的应用

在这里插入图片描述

二,顺序队列实现

#include<iostream>
using namespace std;
#define MaxSize 100

template<typename T>
class Queue
{
    
    
	private:
		int front; //队头 
		int rear; //队尾 
		T *list;
	public:
		Queue();
		void Append(T i);
		void Serve();
		int GetLength();
		int Clear();
		int IsEmpty();		
		int IsFull();		
		T GetFront();
		~Queue();
};

template<typename T>
Queue<T>::Queue() //队列初始化 
{
    
    
	list = new T[MaxSize];
	front = 0;
	rear = 0;
}

template<typename T>
void Queue<T>::Append(T i) //入队列 
{
    
    
	if(!IsFull())
	{
    
    
		list[rear] = i;
		rear++;
	}	
	else
	{
    
    
		cout << "队列已满";
	}
}

template<typename T>
int Queue<T>::GetLength() //获得队列中的元素个数 
{
    
    
	return rear-front;
}

template<typename T>
int Queue<T>::Clear() //清空队列 
{
    
    
	rear = front = 0;
}

template<typename T>
void Queue<T>::Serve() //出队列 
{
    
    
   if(!IsEmpty())
   {
    
    
   	  front++;
	}	
	else
	{
    
    
		cout << "队列空";
	}
}

template<typename T>
int Queue<T>::IsEmpty() //判断队列是否为空 
{
    
    
	return rear == front;
}	
		
template<typename T>
int Queue<T>::IsFull() //判断队列是否已满 
{
    
    
	return rear == MaxSize;
}

template<typename T>
T Queue<T>::GetFront() //获得队头元素 
{
    
    
	if(!IsEmpty())
	{
    
    
		return list[front];
	}
}

template<typename T>
Queue<T>::~Queue() //销毁队列 
{
    
    
	delete []list;
}

int main()
{
    
    
	Queue<int> aa;
	for(int i=1; i<6; i++)
	{
    
    
		aa.Append(i);
	}
	aa.Serve();
	aa.Serve();
	for(int i=6; i<9; i++)
	{
    
    
		aa.Append(i);
	}
    aa.Serve();
    cout << aa.GetFront();
    cout << aa.GetLength();
 } 

三,链队列实现

#include<iostream>
using namespace std; 

template<typename T>
struct node  //队列存储的数据类型 
{
    
    
	T data;
	node<T>* next;
};

template<typename T>
class Queue
{
    
    
	private:
		int count; //队列中元素的个数 
		node<T>* front; //队头指针 
		node<T>* rear; //队尾指针 
	public:
	 	Queue();
	 	~Queue();
	 	bool IsEmpty();
	 	int GetFront(T& x);
	 	int Append(const T x);
	 	int Serve();
	 	int GetLength();
};

template<typename T>
Queue<T>::Queue() //队列初始化 
{
    
    
	count = 0;
	front = new node<T>();
	front->next = NULL;
	rear = front; 
}

template<typename T>
Queue<T>::~Queue() //销毁队列 
{
    
    
	while(!IsEmpty())
	{
    
    
		Serve();
	}
}

template<typename T>
bool Queue<T>::IsEmpty() //判断队列是否为空 
{
    
    
	return count == 0;
}

template<typename T>
int Queue<T>::GetFront(T& x) //获得队首元素 
{
    
    
	x = front->next->data;
	return 1;
}

template<typename T>
int Queue<T>::Append(const T x) //入队 
{
    
    
	node<T>* s = new node<T>();
	s->data = x;
	s->next = NULL;
	rear->next = s;
	rear = s;
	count++;
	return 1;
}

template<typename T>
int Queue<T>::Serve() //出队 
{
    
    
	if(IsEmpty())
	{
    
    
		return 0;
	}
	node<T>* t = front->next;
	front->next = t->next;
	delete t;
	count--;
	if(front->next==NULL)
	{
    
    
		rear = front;
	}
	return 1;
}

template<typename T>
int Queue<T>::GetLength() //获得队列中元素个数 
{
    
    
	return count;
}

int main()
{
    
    
	
}

猜你喜欢

转载自blog.csdn.net/qq_46027243/article/details/113811143