本关任务:编写一个能为栈也能为队列的线性表。 相关知识 为了完成本关任务,你需要掌握:1.如何定义抽象类,2.如何封装栈和队列,3.如何实现类模板。 题目内容 设置一个vlist线性表类,抽象函数in(),out(),表示进表和出表,由Stack类和Quene类继承vlist,实现vlist指针既能是栈也可以是队列的功能。同时还可对不同的数据类型进行进表和出表。 代码提示 template class vlist//定义抽象类vlist, { public: virtual void in(T &e)=0; virtual T out()=0; }; template class Element//定义线性表元素,用于存储数据 { public: T data; Element *next; Element(){} }; 编程要求 根据提示,在右侧编辑器补充代码。 测试说明 平台会对你编写的代码进行测试,开始你的任务吧,祝你成功!
时间: 2024-02-06 12:08:54 浏览: 107
```C++
#include <iostream>
using namespace std;
template <typename T>
class vlist//定义抽象类vlist
{
public:
virtual void in(T &e)=0;
virtual T out()=0;
};
template <typename T>
class Element//定义线性表元素,用于存储数据
{
public:
T data;
Element<T> *next;
Element(){}
};
template <typename T>
class Stack : public vlist<T>//继承vlist类,实现栈的功能
{
private:
Element<T> *top;
public:
Stack() { top = NULL; }
~Stack() { delete top; }
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 <typename T>
class Quene : public vlist<T>//继承vlist类,实现队列的功能
{
private:
Element<T> *front, *rear;
public:
Quene() { front = rear = NULL; }
~Quene() { delete front; }
void in(T &e) {//进队
Element<T> *p = new Element<T>;
p->data = e;
p->next = NULL;
if (rear == NULL)
front = rear = p;
else {
rear->next = p;
rear = p;
}
}
T out() {//出队
T e = front->data;
Element<T> *p = front;
front = front->next;
delete p;
if (front == NULL)
rear = NULL;
return e;
}
};
int main() {//测试
Stack<int> s;
for (int i = 1; i <= 5; i++)
s.in(i);
for (int i = 1; i <= 5; i++)
cout << s.out() << " ";
cout << endl;
Quene<char> q;
for (char i = 'a'; i <= 'f'; i++)
q.in(i);
for (int i = 1; i <= 6; i++)
cout << q.out() << " ";
cout << endl;
return 0;
}
```
阅读全文