队列的链接存储结构——基本操作的实现

来源:互联网 发布:剑网三男神脸数据 编辑:程序博客网 时间:2024/06/13 22:22

文章内容:入队、出队、读取队头元素等操作的代码以及实现结果截图


链接存储结构队列的类定义

#include<iostream>using namespace std;struct Node{int data;Node*next;};class Linkqueue{public:Linkqueue();   /*初始化一个队列*/~Linkqueue();void Enqueue(int x);   /*将x入队*/int Getqueue();int Dequeue();   /*出队*/int Deonequeue();int Empty(){   /*判断队列是否为空*/if(front==rear)   {    return 1;}else{return 0;} }private:Node*front,*rear;};

成员函数定义

int Linkqueue::Getqueue(){int s;if(front!=rear) s=front->next->data;return s;}Linkqueue::Linkqueue(){Node*s;s=new Node;s->next=NULL;front=rear=s;}Linkqueue::~Linkqueue(){Node*t;while(front!=NULL){  t=front;  front=front->next;  delete t;}}void Linkqueue::Enqueue(int x){  Node*s;  s=new Node;  s->data=x;  s->next=NULL;  rear->next=s;  rear=s;}int Linkqueue::Dequeue(){  if(front==rear) throw"下溢";  else{    Node*p;p=new Node;p=front->next;int x=p->data; front->next=p->next;if(p->next=NULL) front=rear;delete p;return x;  }   }int Linkqueue::Deonequeue(){  if(front==rear) throw"下溢";  else{    Node*p;p=new Node;p=front->next;int x=p->data; front->next=p->next;delete p;return x;  }   }

主函数

int main(){    int i;Linkqueue one;one.Enqueue(3);one.Enqueue(4);one.Enqueue(5);cout<<'\n'<<"请输入入队的数"<<endl;cin>>i;one.Enqueue(i);if(one.Empty()){cout<<"没有内容!"; }else{cout<<'\n';cout<<"有数字!"; cout<<'\n'<<"队头为:";cout<<one.Getqueue();cout<<'\n'<<endl;    cout<<"弹出队头:";cout<<one.Dequeue();cout<<'\n'<<"此时队头:";cout<<one.Getqueue();    } cout<<'\n'<<endl;  return 0;}


运行截图



心得:

1.要注意这种循环队列的判空操作为:front==rear是否成立,若成立则为空,反之则反。

初始化

2.初始化一个空的链队列,要申请一个头结点,然后让队列头指针和列尾指针均指向头结点。

3.链队列的基本实现本质上也是单链表的操作简化,插入只考虑在链队列的尾部进行,删除只考虑在链队列头部进行,其时间复杂度均为O(1)



原创粉丝点击