数据结构与算法-----队列-使用链表(链式结构)实现

数据结构:队列结构特点

1.基本特征:先进先出

2.基本操作:从后端(rear)压入(push),从前端(front)弹出(pop)

3.实现要点:初始化空间、从后端指针压入,从前端指针弹出,判空(链表结构只需要判空,不考虑容量不足情况)

下面使用链表实现队列结构,那么成员变量就是front和rear两个节点结构的指针变量,front指向前端,rear指向后端

#include <iostream>
using namespace std;
class Queue{
public:
	Queue(void):front(NULL),rear(NULL){}
	~Queue(void){
		for(Node *p;front;front=p){
			p=p->next;
			delete front;	
		}	
	}
	void push(int data){
		Node *node=new Node(data);
		if(rear)
			rear->next=node;
		else//如果是第一个节点,那么需要把front也指向node
			front=node;	
		rear=node;
	}
	int pop(){
		if(empty())
			throw UnderFlow();
		int pdata;
		Node *p=front;
		pdata=front->data;
		delete front;
		front=NULL;
		front=p->next;	
		if(front==NULL)//如果删除的是最后一个节点,那么需要把rear也置为NULL
			rear=NULL;	
		return pdata;	
	}
	bool empty(){
		return rear==NULL && front==NULL;	
	}
private:
	class UnderFlow:public exception{
	public:
		const char* what() const throw(){
			return "下溢";	
		}	
	};
	class Node{
		public:
			Node(int pdata=0,Node *pnext=NULL):data(pdata),next(pnext){}
			~Node(void){}
			int data;
			Node *next;
	};
	Node *front;//前端
	Node *rear;//后端
};
int main(){
	try{
		Queue q;
		for(int i=1;i<=10;++i){
			q.push(i);
		}
		while(!q.empty())
			cout<<q.pop()<<endl;
	}
	catch(exception& ex){
		cout << ex.what() << endl;
		return -1;
	}	
}</span>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值