#include<iostream>
//#include<stdio.h>
//#include<stdlib.h>
using namespace std;
//const int Qsize=100;
template<class T>
class Seqqueue{
private:
int front;
int rear;
T *data;
int num;
int Qsize;
public:
Seqqueue(int max=10):Qsize(max)
{
front=0;
rear=0;
num=0;
data=new T[Qsize];
}
~Seqqueue()
{delete []data;}
void In(T x);
void Out();
T Getfirst()const;
int Length()const;
bool Isempty()const;
bool Isfull()const;
void Print()const;
};
template<class T>
void Seqqueue<T>::In(T x)
{
data[rear]=x;
rear=(rear+1)%Qsize;
num++;
}
template<class T>
void Seqqueue<T>::Out()
{
front=(front+1)%Qsize;
num--;
}
template<class T>
T Seqqueue<T>::Getfirst()const
{return data[front];}
template<class T>
int Seqqueue<T>::Length()const
{return num;}
template<class T>
bool Seqqueue<T>::Isempty()const
{return num==0;}
template<class T>
bool Seqqueue<T>::Isfull()const
{return num==Qsize;}
template<class T>
void Seqqueue<T>::Print()const
{
int p=front;
int i=1;
while(p!=rear)
{
cout<<"第"<<i<<"个元素为:"<<data[p]<<endl;
i++;
p=(p+1)%Qsize;
}
}
void main()
{
Seqqueue<int> *s=new Seqqueue<int>(9);
cout<<"队列为空则返回1,否则返回0:"<<s->Isempty()<<endl;
cout<<"依次插入20~27八个元素:"<<endl;
s->In(20);
s->In(21);
s->In(22);
s->In(23);
s->In(24);
s->In(25);
s->In(26);
s->In(27);
cout<<"此时队列全部元素为:"<<endl;
s->Print();
cout<<"队列已满则返回1,否则返回0:"<<s->Isfull()<<endl;
cout<<"队列元素个数为:"<<s->Length()<<endl;
cout<<"取出队头元素为:"<<endl;
s->Out();
cout<<"列出此时队列全部元素:"<<endl;
s->Print();
}
一、实验目的
1、 熟练掌队列的结构特点,掌握队列的顺序存储结构和实现。
二、实验内容
1、自己确定结点的具体数据类型和问题规模;
2、建立一个顺序队列,实现队列的入队和出队操作。
三、运行结果截图
五、心得
在开始实验前我以为队列和栈的程序只是在指针的操作方面的小细节上有些差别,但是敲起代码来才发现这两者的顺序存储的结构和实现还是有许多细节是有区别的。没有提前正确理解栈和队列也是我为什么编写程序到编译成功花去了那么多的时间。说到底还是自己的知识不够牢固。
而且做这次实验我开始是按照书本循环队列那一小节的例题进行程序设计的,误以为循环队列才是队列顺序存储成功实现的例子,在进行摸索查询过程中才明白自己当初的错误。