abstract class IStack
时间: 2023-10-26 20:37:31 浏览: 120
抽象类 IStack 定义了一个栈(Stack)的基本特征和操作,但是没有实现具体的栈数据结构。其主要成员包括:
- push():将一个元素压入栈顶;
- pop():将栈顶元素弹出并返回;
- peek():返回栈顶元素但不弹出;
- isEmpty():判断栈是否为空;
- isFull():判断栈是否已满;
- size():返回栈中元素的个数。
通过继承 IStack 抽象类,可以实现具体的栈数据结构,如数组栈、链式栈等。
相关问题
1.栈是一种重要的数据结构,它是一种只允许在表的一端进行插入或删除操作的线性表。表中允许进行插入、删除操作的一端称为栈顶。表的另一端称为栈底。栈顶的当前位置是动态的,对栈顶当前位置的标记称为栈顶指针。当栈中没有数据元素时,称之为空栈。栈的插入操作通常称为进栈或入栈,栈的删除操作通常称为退栈或出栈。下面是一个整型栈类的定义: class IStack { public: Istack(); // 栈的构造函数 void Push(int &n); // 往栈顶增加元素 void Pop(); // 从非空栈的栈顶删除一个元素 int GetTop(); // 返回非空栈的栈顶元素 bool Empty(); // 判断栈是否为空 int Size(); // 返回栈中元素的个数 void ClearStack(); // 将栈清空 ~Istack(); // 栈的析构函数 private: int *elem; // 保存栈中各元素的数组 int Top; // 保存栈顶的当前位置 } 试编写一个动态栈(elem的元素数量不提前指定)的类模板(包括其成员函数的实现),以便为任何类型的对象提供栈结构的数据操作。然后在main()中实现整数栈和字符栈的各种操作。
以下是动态栈类模板的实现:
```c++
template<typename T>
class DynamicStack {
public:
DynamicStack() : top(-1), capacity(0), data(nullptr) {}
DynamicStack(int size) : top(-1), capacity(size), data(new T[size]) {}
~DynamicStack() { delete[] data; }
void push(const T& item) {
if (isFull()) {
T* newData = new T[capacity * 2];
for (int i = 0; i < capacity; i++) {
newData[i] = data[i];
}
delete[] data;
data = newData;
capacity *= 2;
}
top++;
data[top] = item;
}
T pop() {
if (isEmpty()) {
throw std::exception("Stack is empty");
}
top--;
return data[top + 1];
}
T peek() const {
if (isEmpty()) {
throw std::exception("Stack is empty");
}
return data[top];
}
bool isEmpty() const {
return top == -1;
}
bool isFull() const {
return top == capacity - 1;
}
int size() const {
return top + 1;
}
void clearStack() {
top = -1;
}
private:
int top;
int capacity;
T* data;
};
```
接下来在main()函数中实现整数栈和字符栈的各种操作:
```c++
int main() {
DynamicStack<int> intStack;
DynamicStack<char> charStack;
intStack.push(1);
intStack.push(2);
intStack.push(3);
while (!intStack.isEmpty()) {
std::cout << intStack.pop() << " ";
}
std::cout << std::endl;
charStack.push('a');
charStack.push('b');
charStack.push('c');
while (!charStack.isEmpty()) {
std::cout << charStack.pop() << " ";
}
std::cout << std::endl;
return 0;
}
```
这里首先创建了一个整数栈和一个字符栈,然后分别进行了push操作,最后用while循环取出栈中元素并输出。
阅读全文