【发布时间】:2021-07-13 01:12:31
【问题描述】:
所以我正在尝试创建一个实现堆栈及其所有功能(push、pop、getTop 等)的 c++ 文件。我想使用模板,这样我就可以为多种数据类型创建这个 Stack 类。我正在使用链表来存储数据。这是我使用链表实现的一些堆栈示例。
#include<iostream>
using namespace std;
template <class T>
class Node{
public:
T data;
Node *next;
Node()
{
next = NULL;
}
};
class Stack
{
Node *top;
public:
Stack();
int isEmpty();
int isFull();
void push(T data);
T pop();
void display();
};
Stack :: Stack()
{
top = NULL;
}
int Stack :: isEmpty()
{
if(top == NULL)
{
return 1;
}
else
{
return 0;
}
}
int Stack :: isFull()
{
int temp;
Node *t = new Node;
if(t==NULL)
{
temp = 1;
}
else
{
temp = 0;
}
delete t;
return temp;
}
void Stack :: push(T data)
{
Node *n;
if(isFull())
{
cout<<"\nStack overflow";
}
else
{
n = new Node;
n->data = data;
n->next = top;
top = n;
}
}
int Stack :: pop()
{
Node *t;
T temp;
if(isEmpty())
{
return temp;
}
else
{
t = top;
top = top->next;
temp = t->data;
delete t;
return temp;
}
}
void Stack :: display()
{
Node *p = top;
while(p != NULL)
{
cout<<"\n"<<p->data;
p = p->next;
}
}
所以这是我正在尝试做的事情的预览,但我不想为不同的数据类型创建不同的节点和堆栈类。我如何使用模板来实现这一点。我自己尝试过,但我遇到了很多错误,似乎无法理解为什么。 谢谢。
【问题讨论】:
-
提供你尝试过的代码(即使失败了),这样你会得到更好的输入。
-
isFull内部到底发生了什么? -
试图弄清楚你的理解水平是什么:为什么你在定义
Node之前有一行template <class T>?为什么您在定义Stack之前没有有同一行? (除了这种差异之外,您的其他错误可能归结为了解您收到的错误消息。您确定不想询问编译器报告的第一个错误吗?)
标签: c++ templates linked-list stack