#include <iostream>
using namespace std;
typedef int DataType;
#define MAXSIZE 100
struct DataNode{
DataType data;
DataNode *pNextNode;
DataNode(DataType data2);
};
DataNode::DataNode(DataType data2)
{
data=data2;
}
class MyQueue
{
public:
MyQueue();
~MyQueue();
bool clearQueue();
bool IsQueueEmpty();
int GetQueueLength();
bool GetQueueHead(DataType &data);
bool DeleteQueueHead(DataType &data);
bool InsertQueueEnd(DataType data);
private:
DataNode *QueueHead;
DataNode *QueueEnd;
int QueueLength;
};
int MyQueue::GetQueueLength()
{
return QueueLength;
}
bool MyQueue::clearQueue()
{
while(QueueHead!=QueueEnd)
{
DataNode *p=NULL;
p=QueueHead->pNextNode;
QueueHead->pNextNode=p->pNextNode;
if(p==QueueEnd)QueueHead=QueueEnd;
delete p;
}
QueueLength=0;
return true;
}
bool MyQueue::IsQueueEmpty()
{
if(QueueHead==QueueEnd)
return true;
else
{
return false;
}
}
bool MyQueue::DeleteQueueHead(DataType &data)
{
if(QueueHead==QueueEnd)
return false;
DataNode *p=NULL;
p=QueueHead->pNextNode;
data=p->data;
QueueHead->pNextNode=p->pNextNode;
if(p==QueueEnd)QueueEnd=QueueHead;
delete p;
--QueueLength;
return true;
}
bool MyQueue::GetQueueHead(DataType &data)
{
if(QueueHead==QueueEnd)
return false;
data=QueueHead->pNextNode->data;
--QueueLength;
return true;
}
bool MyQueue::InsertQueueEnd(DataType data)
{
DataNode *node=new DataNode(data);//应该判断new出错怎么办,但是一般new不会出错
node->pNextNode=NULL;
QueueEnd->pNextNode=node;
QueueEnd=node;
++QueueLength;
return true;
}
MyQueue::MyQueue()
{
QueueHead=new DataNode(0);
QueueHead->pNextNode=NULL;
QueueEnd=QueueHead;
QueueLength=0;
}
MyQueue::~MyQueue()
{
}
void main()
{
MyQueue test;
for(int i=0;i<10;++i)
{
test.InsertQueueEnd(i);
}
cout<<test.IsQueueEmpty()<<"空不空"<<test.GetQueueLength()<<endl;
/*test.clearQueue();
cout<<test.IsQueueEmpty()<<"空不空"<<test.GetQueueLength()<<endl;*/
DataType num;
for(int i=0;i<10;++i)
{
test.DeleteQueueHead(num);
cout<<num<<endl;
}
cout<<test.IsQueueEmpty()<<" "<<test.GetQueueLength()<<endl;
}
C++链队列类实现
最新推荐文章于 2023-11-05 18:11:54 发布