队列的基本操作

大家好,今天更新的是 “队列的基本操作”

队列可以用顺序表的方式进行存储,也可以用链表的形式存放

下面我要介绍的是链表的形式建立队列

 

注意: 队列就是要遵循“先进先出”的一种模式

 

/   hrad.h   //

#include <iostream>
using namespace std;

//所谓队列就是先进先出的线性表
//用链表表示队列简称"链表列"

struct QueueNode
{
 char data;
 QueueNode *next;
};
typedef QueueNode* QueuePtr;

struct LinkQueue
{
 QueuePtr front;
 QueuePtr rear;
};
为了方便起见,我们创建两个指针,一个指向队头,一个指向对尾
///因为我们对的队列的操作是在头和尾进行的

bool InitQueue ( LinkQueue &Q )
{
 Q.front=( QueuePtr) malloc ( sizeof(QueueNode) );//一个空的头节点
 if( !Q.front )
 {
  return false;
 }
 Q.rear=Q.front;//而rear是用来指向最后一个元素
 Q.front->next=NULL; 
 return true;
}

void DestroyQueue( LinkQueue &Q )
{
 while( Q.front )
 {
  Q.rear = Q.front ->next;
  free ( Q.front );
  Q.front=Q.rear;
 }
 cout<<"整个队列删除完毕"<<endl;
}

bool EnterQueue ( LinkQueue &Q )
{
 QueuePtr p;
 p = (QueuePtr) malloc ( sizeof(QueueNode) );
 if( !p )
 {
  return false ;
 }
 cout<<"输入新插入节点的信息:";
 cin>>p->data;
 p->next=NULL;
 Q.rear->next=p;   ///其实这里只有尾指针的移动,头指针完全没动
 Q.rear=p;   ///最后这一步是尾指针指向p(最后一个元素)
 return true;
}

///第一个元素出列
bool DeQueue( LinkQueue &Q )
{
 QueuePtr p;
 if( Q.front == Q.rear )
 {
  cout<<"这是一个空的;队列"<<endl;
  return false;
 }
 p=Q.front->next;  p指向的是第一个元素
 cout<<"第一个元素 "<< p->data << " 出列"<<endl;
 Q.front->next=p->next;  //一动指针
 if( Q.rear == p )   //在删除这个元素之前需要稍加一个判断
 {
  Q.front==Q.rear;  //看队列中是不是只有p一个元素
 }
 free(p);
 return true;
}

 

 

//   main.cpp

#include "head.h"


bool InitQueue ( LinkQueue &Q );
bool EnterQueue ( LinkQueue &Q );
bool DeQueue( LinkQueue &Q );

void main()
{
 LinkQueue Q;
 InitQueue(Q);
 for( int i=1; i<=3; i++ )
 {
  EnterQueue(Q);
 }
 DeQueue(Q);
}

 

好的,代码就介绍到这里,希望你能看懂

在下技术有限,难免有错,请见谅!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值