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;
}
#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;
}
相关文章推荐
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- 顺序队列的基本操作实现c++
- c++实现基本循环队列操作
- c++ 队列基本操作实现
- 链式队列的基本操作实现c++
- C++实现普通队列,循环队列的基本操作(初始化,入队,出队,获取队列首元素等)
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- 实验4:栈和队列的基本操作实现及其应用之《顺序栈》
- 循环队列的定义、入队、出队等操作 C++代码实现
- c++ -- 栈和队列的基本操作
- 制作一个菜单,用队列实现基本操作