链队列之C++实现

            链队列时建立在单链表的基础之上的。由于是动态分配节点内存,所以无需判满。

          链队列的形式如下:

1、队列空

链队列之C++实现

2、队列存在数据

链队列之C++实现

 

         下面介绍下C++实现的链队列,VC6下调试通过。

1、文件组织

链队列之C++实现

 

2、lq.h链队列类的说明

#ifndef _LQ_H_

#define _LQ_H_



typedef int dataType;



struct node                 //队列节点

{

	dataType data;          //数据域

	node *next;             //指针域

};



class lq

{

public:

	lq();                     //构造函数

	~lq();                    //析构函数

	void push(dataType var);  //入队

	void pop();               //出队

	dataType front();         //取对头元素,对头不变化

	bool isEmpty();           //判空.head=tail=NULL时队列为空



private:

	node *head;               //对头指针

	node *tail;               //队尾指针

};



#endif


3、lq.cpp链队列的定义

#include <iostream>

#include "lq.h"

using namespace std;



lq::lq()

{

	head = NULL;           //head=tail=NULL时队列为空

	tail = NULL;

}



lq::~lq()

{

	node *ptr = NULL;



	while(head != NULL)

	{

		ptr = head->next;

		delete head;

		head = ptr;

	}

}



void lq::push(dataType var)

{

	node *ptr = new node;



	ptr->data = var;

	ptr->next = NULL;

	if(tail != NULL)         

	{

		tail->next = ptr;       //不是入队的第一个节点

	}

	else

	{

		head = ptr;				//如果是入队的第一个节点

	}

	tail = ptr;

}



void lq::pop()

{

	node *ptr = head->next;



	delete head;

	head = ptr;



	if(head == NULL)         //head时要将tail也赋为NULL

	{

		tail = NULL;

	}

}



dataType lq::front()

{

	return head->data;

}



bool lq::isEmpty()

{

	return head == NULL && tail == NULL;

}


4、main.cpp

#include <iostream>

#include "lq.h"

using namespace std;



int main()

{

	lq exp;

	int i =0;



	for(i=0;i<100;i++)

	{

		exp.push(i);

	}



	for(i=0;i<200;i++)

	{

		if(!exp.isEmpty())

		{

			cout<<exp.front()<<endl;

			exp.pop();

		}

	}



	if(exp.isEmpty())

	{

		cout<<"队列为空!"<<endl;

	}



	return 0;

}

你可能感兴趣的:(C++)