队列 队列(Queue)是限定只能在表的一端进行插入和在另一端进行删除操作的线性表。 与栈的比较:
1.队列先进先出,栈先进后出。
2.从"数据结构"的角度看,它们都是线性结构,即数据元素之间的关系相同。
但它们是完全不同的数据类型。除了它们各自的基本操作集不同外,主要区别是对插入和删除操作的"限定":
栈是限定只能在表的一端进行插入和删除操作的线性表;队列是限定只能在表的一端进行插入和在另一端进行删除操作的线性表。
队列同样分为顺序队列和链式队列,我们一般用链式队列:
#include <iostream> using namespace std; struct Node { int data; struct Node *next; }; class Queue { public: Queue( ) //构造函数,初始化一个空的链队列 { Node *s; s=new Node; s->next=NULL; front=rear=s; } ~Queue( ) //析构函数,释放链队列中各结点的存储空间 { while(front) { Node *p; p=front->next; delete front; front=p;} } void EnQueue(int v); //将元素x入队 int DeQueue(); //将队头元素出队 int GetQueue(); //取链队列的队头元素 bool IsEmpty( ); //判断链队列是否为空 void Intput(int n); void Output(); private: Node *front, *rear; //队头和队尾指针,分别指向头结点和终端结点 }; void Queue::EnQueue(int v) { Node *s; s=new Node; s->data=v; //申请一个数据域为x的结点s s->next=NULL; rear->next=s; //将结点s插入到队尾 rear=s; } int Queue::DeQueue() { Node *p; int x; if (rear==front) cout<<"Null"<<endl; p=front->next; x=p->data; //暂存队头元素 front->next=p->next; //将队头元素所在结点摘链 if (p->next==NULL) rear=front; //判断出队前队列长度是否为1 delete p; return x; } int Queue::GetQueue() { if (front!=rear) return front->next->data; } bool Queue::IsEmpty( ) { if(front==rear) return 1; else return 0; } void Queue::Intput(int n) { int v; for(int i =0; i<n; i++) { cout<<"请输入元素的值:"<<endl; cin>>v; EnQueue(v); } } void Queue::Output() { Node *p; p = front; while(p!=rear) { p=p->next; cout<<p->data<<" "; } cout<<endl; } int main() { Queue l; cout<<l.IsEmpty()<<endl; l.Intput(5); cout<<l.IsEmpty()<<endl; l.Output(); l.EnQueue(6); l.DeQueue(); l.Output(); }
时间: 2024-10-22 15:10:29