c++设置一个vlist线性表类,抽象函数in(),out(),表示进表和出表,由Stack类和Quene类继承vlist,实现vlist指针既能是栈也可以是队列的功能。同时还可对不同的数据类型进行进表和出表。 并补充以下代码: #include <iostream> using namespace std; #include<string> #include"math.h" template<class T> class vlist//线性表抽象类 { public: virtual void in(T &e)=0; virtual T out()=0; }; template<class T> class Element { public: T data; Element<T> *next; Element(){} }; int main() { vlist<int> *intp; vlist<string> *strp; SStack<int> ints; Quene<int> intq; SStack<string> strs; Quene<string> strq; intp=&ints; int t=2; intp->in(t); t=3; intp->in(t); t=4; intp->in(t); for(int i=0;i<3;i++) cout<<intp->out(); intp=&intq; t=2; intp->in(t); t=3; intp->in(t); t=4; intp->in(t); for(int i=0;i<3;i++) cout<<intp->out(); strp=&strs; string str; cout<<endl; for(int i=0;i<3;i++) { cin>>str; strp->in(str); } for(int i=0;i<3;i++) cout<<strp->out()<<" "; cout<<endl; strp=&strq; for(int i=0;i<3;i++) { cin>>str; strp->in(str); } for(int i=0;i<3;i++) cout<<strp->out()<<" "; }
时间: 2024-01-16 08:04:10 浏览: 177
好的,这是一个比较典型的面向对象的编程题目。我根据题目描述,补充了一下代码,希望可以帮到你:
```c++
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
template <class T>
class Element {
public:
T data;
Element<T> *next;
Element() {
next = NULL;
}
};
template <class T>
class vlist//线性表抽象类
{
public:
virtual void in(T &e) = 0;
virtual T out() = 0;
};
template <class T>
class SStack : public vlist<T> {
public:
Element<T> *top;
SStack() {
top = NULL;
}
void in(T &e) {
Element<T> *p = new Element<T>();
p->data = e;
p->next = top;
top = p;
}
T out() {
T e = top->data;
Element<T> *p = top;
top = top->next;
delete p;
return e;
}
};
template <class T>
class Quene : public vlist<T> {
public:
Element<T> *head;
Element<T> *tail;
Quene() {
head = tail = NULL;
}
void in(T &e) {
Element<T> *p = new Element<T>();
p->data = e;
if (tail == NULL) {
head = tail = p;
} else {
tail->next = p;
tail = p;
}
}
T out() {
T e = head->data;
Element<T> *p = head;
head = head->next;
delete p;
if (head == NULL) {
tail = NULL;
}
return e;
}
};
int main() {
vlist<int> *intp;
vlist<string> *strp;
SStack<int> ints;
Quene<int> intq;
SStack<string> strs;
Quene<string> strq;
intp = &ints;
int t = 2;
intp->in(t);
t = 3;
intp->in(t);
t = 4;
intp->in(t);
for (int i = 0; i < 3; i++) {
cout << intp->out() << " ";
}
intp = &intq;
t = 2;
intp->in(t);
t = 3;
intp->in(t);
t = 4;
intp->in(t);
for (int i = 0; i < 3; i++) {
cout << intp->out() << " ";
}
strp = &strs;
string str;
cout << endl;
for (int i = 0; i < 3; i++) {
cin >> str;
strp->in(str);
}
for (int i = 0; i < 3; i++) {
cout << strp->out() << " ";
}
cout << endl;
strp = &strq;
for (int i = 0; i < 3; i++) {
cin >> str;
strp->in(str);
}
for (int i = 0; i < 3; i++) {
cout << strp->out() << " ";
}
return 0;
}
```
这个程序中,我们首先定义了一个抽象类 `vlist`,它包含了两个纯虚函数 `in()` 和 `out()`,表示线性表的进表和出表操作。然后,我们定义了两个类 `SStack` 和 `Quene` 分别继承了 `vlist` 类,实现了栈和队列的功能。
在 `SStack` 类中,我们使用一个指针 `top` 来表示栈顶元素。在进表操作中,我们创建一个新的元素,并把它放到栈顶,然后更新 `top` 指针。在出表操作中,我们首先取出栈顶元素,然后删除它并更新 `top` 指针。
在 `Quene` 类中,我们使用两个指针 `head` 和 `tail` 分别表示队列头和队列尾。在进表操作中,我们创建一个新的元素,并把它放到队列尾部,然后更新 `tail` 指针。在出表操作中,我们首先取出队列头元素,然后删除它并更新 `head` 指针。如果此时队列为空,我们还需要把 `tail` 指针设置为 `NULL`。
最后,我们在 `main` 函数中创建了四个对象:`ints`、`intq`、`strs` 和 `strq`,并把它们赋值给对应的指针。然后,我们分别进行了进表和出表操作,并输出了结果。
希望这个答案能够帮到你!
阅读全文