请实现一个队列,既可以存放整数,又可以存放字符串。简单的说,队列是一种数据结构,按照先进先出的顺序管理进、出队列的元素。本题要求完成: (1) 实现描述队列的类Queue,其中定义了队列的大小Size(即队列中可以存放的元素个数) ,并包括进队列函数Add,出队列函数Delete、显示队列头部元素的函数Head和显示队列尾部元素的函数Tail。 (2) 定义基类Element,至少包含纯虚函数ShowMe。 (3) 从基类Element中派生整数类MyInteger和字符串类MyString, 具体实现上述纯虚函数ShowMe,显示该元素的类型和相应的值。 (4) 重载输入“>>”*作符,使得可以通过cin直接读入上述整数类和字符串类的对象值。 (5) 编写main函数,测试上述所要求的各种功能,即可以根据菜单命令增加队列元素、删除 队列元素、显示队列头部元素和队列尾部元素,其中的元素可以是整数和/或字符串。 提示: 虚拟基类Element的定义至少包括以下纯虚函数ShowMe, 这是我24号的考题! class Element { // …… public: virtual void ShowMe () = 0; // …… };
*/
#include "stdafx.h" #include "iostream.h" #include "string.h" const max=1000; #define NULL 0
class Element { public: virtual void ShowMe () = 0; };
class MyInteger:public Element { int a; public: MyInteger(){a=0;} friend istream &operator>>(istream &is, MyInteger &MyI); int Get() {return a;}; void ShowMe() { cout<<"整数:"<}; istream &operator>>(istream &is, MyInteger &MyI) { cout<<" 请输入整数:"; is>>MyI.a; return is; }
class MyString:public Element { char s[100]; public: friend istream &operator>>(istream &is, MyString &MyS); void ShowMe() { cout<<"字符串:"<}; istream &operator>>(istream &is, MyString &MyS) { cout<<" 请输入字符串:"; is>>MyS.s; return is; }
class Queue { int size; Element *Elm[max]; MyInteger MyI[max]; MyString MyS[max]; public: Queue(){ for (int i=0; iElm[i]=NULL; size=-1; } void add(MyInteger &My) { if (full()) cout<<"队列已满"<else { MyI[++size]=My; Elm[size]=new MyInteger; Elm[size]=&MyI[size]; } }
void add(MyString &My) { if (full()) cout<<"队列已满"<else { MyS[++size]=My; Elm[size]=new MyString; Elm[size]=&MyS[size]; } }
void tail() { if(empty()) cout<<"队列为空"<else{ cout<<" 队列的尾元素为"; Elm[size]->ShowMe(); } } void head() { if(empty()) cout<<"队列为空"<else{ cout<<" 队列的头元素为"; Elm[0]->ShowMe(); } }
void del() { if(empty()) cout<<"队列为空"<else{ cout<<" 出队列的元素为"; Elm[size--]->ShowMe(); } } bool empty()
{ return (bool)(size==-1); } bool full() { return (bool)(size==max-1); } };
void main() { MyInteger my1; MyString my2; Queue queue; int s=1; while(s) { cout<<"Please select 1-6 "<cout<<" 1: 整数进队列;"<cout<<" 2: 字符串进队列;"<cout<<" 3: 显示队列头元素;"<cout<<" 4: 显示队列尾元素"<cout<<" 5: 出队列;"<cout<<" 6: 退出程序"<cout<<"--------------------------------------"<cout<<"请选择您的*作:"; cin>>s; switch(s) { case 1: cin>>my1; queue.add(my1); break; case 2: cin>>my2; queue.add(my2); break; case 3: queue.head(); break; case 4: queue.tail(); break; case 5: queue.del(); break; default: s=0; break; } } } |