您的位置:首页 > 编程语言 > C语言/C++

C++队列实现的基本操作

2014-04-11 22:06 477 查看
#include <iostream>

#include <stdio.h>

#include <stdlib.h>

using namespace std;

typedef int elemType;

typedef struct nodet       //结点的结构

{

 elemType data;

 struct nodet *next;

}node_t;

typedef struct queuet      //队列的结构

{

 node_t *front;

 node_t *rear;

}queue_t;

void initQueue(queue_t *Q) //队列的初始化

{

 Q->front=NULL;

 Q->rear=NULL;

}

queue_t *insertQueue(queue_t *Q, elemType x)//队列的入队操作

{

 node_t *s;

 s=(node_t *)malloc(sizeof(node_t));

 if(s==NULL)

 {

  cout<<"空间分配出错!"<<endl;

  exit(1);  //exit(0)用于子程序中表示正常退出

            //exit(1)表示异常退出

 }

 s->data=x;

 s->next=NULL;

 if(Q->front==NULL)

 {

  Q->front=s;

  Q->rear=s;

 }

 else

 {

  Q->rear->next=s;

  Q->rear=s;

 }

 return Q;

}

int lengthQueue(queue_t *Q)

{

 int len=0;

 node_t *p=Q->front;

 while(p!=NULL)

 {

  len++;

  p=p->next;

 }

 return len;



queue_t *delQueue(queue_t *Q)   //队列的出队操作

{

 node_t *p;

 elemType x;

 if(Q->front==NULL)

 {

  cout<<"队列为空,不能删除!"<<endl;

  exit(1);

 }

 x=Q->front->data;

 p=Q->front;

 Q->front=Q->front->next;

 if(Q->front==Q->rear)  //队列中就一个元素,将队列置空

 {

  Q->front=NULL;

  Q->rear=NULL;

 }

 free(p);

 return Q;

}

elemType readheadQueue(queue_t *Q) //读取队首元素

{

 if(Q->front==NULL)

 {

  cout<<"队列为空!";

  exit(1);

 }

 else

  return Q->front->data;

}

bool Is_emptyQueue(queue_t *Q)  //判断队列是否为空

{

 if(Q->front==NULL&&Q->rear==NULL)

  return true;

 else

  return false;

}

queue_t *clearQueue(queue_t *Q)  //清空队列

{

 node_t *p=Q->front;

 while(p!=NULL)

 {

  Q->front=Q->front->next;

  free(p);

  p=Q->front;

 }

 Q->rear=NULL;

 return Q;

}

void print(queue_t *Q)  //打印队列

{

 node_t *p=Q->front;

 if(Q->front!=NULL)

  while(p!=NULL)

  {

   cout<<p->data<<" ";

   p=p->next;

  }

 else

  cout<<"队列为空!"<<endl;

}

int main()

{

 int len;

 bool A;

 elemType data;

 queue_t q1;  //

 queue_t *insertQ,*delQ,*clearQ;

 int a[8]={1,2,3,4,5,6,7,8};

 int i;

 initQueue(&q1);

 for(i=0;i<8;i++)

 {

  insertQ=insertQueue(&q1,a[i]); //引用

 }

 cout<<"插入后的队列为:"<<endl;

 print(insertQ);

 cout<<endl;

 delQ=delQueue(&q1);

 cout<<"一个元素出队后的队列为:"<<endl;

 print(delQ);

 cout<<endl;

 len=lengthQueue(&q1);

 cout<<"队列的长度为:"<<endl;

 cout<<"答案是:"<<len<<endl;

 data=readheadQueue(&q1);

 cout<<"一个元素出队后的对头元素为:"<<endl;

 cout<<data<<endl;

 

 clearQ=clearQueue(&q1);

 cout<<"清空后的队列为:"<<endl;

 print(clearQ);

 cout<<endl;

 A=Is_emptyQueue(&q1);

 cout<<"队列是空的吗?"<<endl;

 cout<<"答案是:";

 if (A)

  cout<<"是"<<endl;

 else

  cout<<"不是"<<endl;

 return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐