队列
简单的实现了push pop empty size;
和堆栈的链式实现一样,因为删除操作后需要执向下一个元素,所以队列的删除操作 pop 要在链表的头部实现
因为队列是 First In First Out,所以插入操作 push 要在链表尾插入。
【测试代码】
#include <cstdio> #include<iostream> #include<malloc.h> using namespace std; #define MaxSize 100 typedef int ElementType; ElementType ERROR = -1; struct QNode{ ElementType Data; QNode *Next; }; class LinkQueue{ public: LinkQueue(){//建立新节点,并将储存队列的头、尾指针,指向这一块区域 QNode* Q=(QNode*)malloc(sizeof(QNode)); Q->Data=0; Q->Next=NULL; rear=Q; front=Q; } bool empty(){ if(front == rear){ //头尾相遇,则队列为空 return true; } return false; } int size(){ QNode* tmp=front; int sz=0; while(tmp!=rear){ //从“头”走到 “尾” 长度即为队列大小 tmp=tmp->Next; sz++; } return sz; } void Push(ElementType X){ QNode* LastCell=(QNode*)malloc(sizeof(QNode)); LastCell->Data = X; LastCell->Next=NULL; //始终让结尾的Next为空 rear->Next = LastCell;//原队尾 的Next赋值为新建立的节点 rear=LastCell; //更新队尾 } ElementType Pop(){ QNode *FrontCell; ElementType FrontElem;//为了输出返回值而创立的临时节点 与变量 if(empty()){ cout<<"队列空"<<endl; return ERROR; } FrontCell = front; front = front->Next; //头结点始终不存数据,数据在头节点的下一个节点 FrontElem = FrontCell->Next->Data; free(FrontCell); return FrontElem; } private: QNode *rear; //指向队列尾节点 QNode *front; //指向队头节点 }; int main(){ LinkQueue Q; Q.Push(4); Q.Push(5); Q.Push(5); cout<<"大小为:"<<Q.size()<<endl; cout<<Q.Pop()<<endl; cout<<Q.Pop()<<endl; cout<<Q.Pop()<<endl; cout<<Q.Pop()<<endl; cout<<"大小为:"<<Q.size()<<endl; return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/chaiwenjun000/article/details/47377401