数据结构——13 队列链表描述

队列——链表描述


队列——入队、出队、打印(链表描述)
为了方便出队操作,建立队列的时候,队列的方向和队列里元素的方向连接相反

#include <iostream>
using namespace std;
struct node               //定义一个结构体,它是队列里的元素
{
  int x;
  node* next;
};

class queue
{
public:
	queue():size(0)       //构造函数初始化队列里元素的个数为0,并new一个节点
	{
		front=rear=new node; 
	}    
	~queue();                           //析构函数删除队列
	int dequeue();                      //出队
	void enqueue(int n);                //进对
private:
    node *front;                            //队列头指针
	node *rear;                         //队列尾指针
    int size;                               //队列里元素的个数
};

queue::~queue()                           
{
  node *p=front;
  while(p!=NULL)
  {	  
	  front=front->next;      //从front删除元素
	  delete [] p;                
	  p=front;
  }
}

void queue::enqueue(int n)        //入队操作,增加一个元素放在队尾
{
    node* temp=new node;          //定义一个临时指针
	if(size==0)               //如果size=0,表示队列没有元素,但构造函数new了一个node节点,所以直接把它当作第一个节点,此时,front和rear都指向它
	{
		rear->x=n;
		rear->next=NULL;
//rear=temp;       //这里不知道为什么这样不行,直接把temp赋值给rear,可能rear->next出问题
	}
	else                      //size不为0,往尾巴上续
	{
		temp->x=n;
		rear->next=temp;          
		temp->next=NULL;
		rear=temp;                 
	}
	size++;                   //栈里元素个数加1
}

int queue::dequeue()              //出对操作,返回出队元素值,并删除该元素
{
    node* temp;                   //定义一个临时node指针
    int out;                      //返回值
	if(size)                  //用size判断是否栈里还有元素
	{
		temp=front;                 
		front=temp->next;
		out=temp->x;
		delete []temp;           
        size--;
        return out;
	}
	else
	{
		cout<<"队列已经为空!"<<endl;
		exit(0);
	}
}


int main()
{
  queue que;
  cout<<"The enqueue of que are: ";
  for(int i=1;i<=20;i++)
  {
	  cout<<i<<"  ";
	  que.enqueue(i);
  }
  cout<<endl;


  cout<<"The dequeue of que are: ";
  for(i=1;i<=10;i++)
    cout<<que.dequeue()<<"  ";
	cout<<endl;
  return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值