【发布时间】:2021-05-01 02:20:10
【问题描述】:
我正在学习 C++ 数据结构,关于使用数组和链表实现堆栈。该数组在 C++ 中是默认的,但我构建了一个链接列表类。下面的代码是我的链表头文件
#pragma once
#include "Node.h"
#include "Stack.h"
class LinkedList
{
public:
LinkedList() {head = NULL;}
Node* AddNode(int index, float x, bool doubly);
int FindNodeIndex(float x);
Node* FindNodeAddress(float x);
void DeleteNode(float x);
void DisplayList();
private:
Node* head;
friend class Stack;
};
其中也用到了Node头文件,不过这里不相关。然后我想同时使用数组和链表来实现堆栈。下面是我的 Stack 头文件:
#pragma once
class Stack
{
public:
Stack(int size = 10);
bool IsEmpty() { return top == -1;}
bool IsFull() { return top == maxTop;}
double Top();
void Push(const double x);
double Pop();
void DisplayStack();
void Clear();
private:
int maxTop;
int top;
double* values;
};
class Stack: public LinkedList
{
public:
Stack(){}
double Top()
{
if (!head)
{
std::cout << "The stack is empty." << std::endl;
return -1;
}
else
return head->data;
}
void Push(const double x) {AddNode(0,x);}
void DisplayStack() { DisplayList();}
}
在Top()方法中可以看到,该方法用于查找链表的顶部元素,使用了head变量(或显式,Node的指针),其中在数组的实现中,我有相同的 Top() 方法,但它只使用索引数组。编译器给我这个错误信息
Stack.h:20:7: error: redefinition of 'class Stack'
20 | class Stack: public LinkedList
我知道我可能在这里犯了一些错误,但我认为有必要编写两个 Stack 类,因为它们有不同的用途,例如 Top() 方法不能同时用于两者。是否可以将两者组合为一个 Stack 类,然后通知编译器是使用数组还是链表?
【问题讨论】:
-
class Stack和class Stack... 你不能这样做,你只能有一个Stack类(无论如何都要使用这个名称)。 -
是的,那么常见的方法是什么?我是否将
Stack定义为数组堆栈,然后将LLStack定义为链表堆栈?这个我已经想到了,但是为同一个想法创建两个类可以吗? -
类不能被“重载”,如果它们被定义在同一个命名空间中,它们必须有不同的名称。
-
我明白了。非常感谢!
标签: c++ arrays data-structures linked-list stack