顺序表(顺序存储)循环队列类(初始化,入队,退队,输出排头与排尾指针及元素)

来源:互联网 发布:广州趣丸网络业绩 编辑:程序博客网 时间:2024/05/22 00:13
循环队列类:文件名 sq_Queue.h
判断队列有无数据根据s的值可判断,如果s=0,则说明为空,反之,不为空时,还要判断是否为满,满的条件是(s==0&&(rear==front));
注意:入队与出队,rear和front 都是加1;
#include <iostream>using namespace std;template <class T>class sq_Queue{private:int mm;//存储空间容量int front;int rear;int s;//标志T * q;public:sq_Queue(int);void prt_sq_Queue();int flag_sq_Queue();void ins_sq_Queue(T);T del_sq_Queue();};template <class T>sq_Queue<T>::sq_Queue(int m){mm=m;q=new T[mm];front=mm;rear=mm;s=0;return;}template <class T>void sq_Queue<T>::prt_sq_Queue(){int i;cout<<"front="<<front<<endl;cout<<"rear="<<rear<<endl;if(s==0){cout<<"队列空"<<endl;return;}i=front;do {i=i+1;if(i==mm+1)i=1;cout<<q[i-1]<<endl;} while (i!=rear);return;}template <class T>int sq_Queue<T>::flag_sq_Queue(){if((s==1)&&(rear==front)){cout<<"队列满"<<endl;return (-1);}if(s==0){cout<<"队列空"<<endl;return 0;}return 1;}template <class T>void sq_Queue<T>::ins_sq_Queue(T b){if((s==1)&&(rear==front)){cout<<"Queue overflow"<<endl;return;}rear=rear+1;if(rear==mm+1)rear=1;q[rear-1]=b;s=1;return;}template <class T>T sq_Queue<T>::del_sq_Queue(){T y;if(s==0){cout<<"queue is empty"<<endl;return (0);}front=front+1;if(front==mm+1)//特别要注意等号“==”而不是“=“front=1;y=q[front-1];if(rear==front)s=0;return y;}


2.具体事例:文件名test3.cpp

#include "sq_Queue.h"#include <stdlib.h>int main(){sq_Queue<int> q(10);cout<<"输出排头与队尾指针已经队中元素"<<endl;q.prt_sq_Queue();q.ins_sq_Queue(50);q.ins_sq_Queue(60);q.ins_sq_Queue(70);q.ins_sq_Queue(80);q.ins_sq_Queue(90);q.ins_sq_Queue(100);cout<<"输出排头与队尾指针已经队中元素"<<endl;q.prt_sq_Queue();cout<<"输出退队元素"<<endl;cout<<q.del_sq_Queue()<<endl;cout<<q.del_sq_Queue()<<endl;cout<<q.del_sq_Queue()<<endl;cout<<"再次输出排头与队尾指针已经队中元素"<<endl;q.prt_sq_Queue();system("pause");//可能是我的vs2010有点问题,ctrl+F5的结果一闪而过,以此采取此方法
return 0;}

3.实验结果

输出排头与队尾指针已经队中元素front=10rear=10队列空输出排头与队尾指针已经队中元素front=10rear=65060708090100输出退队元素506070再次输出排头与队尾指针已经队中元素front=3rear=68090100请按任意键继续. . .



 

原创粉丝点击