注释class SequenceStack: """顺序栈 """ top = None def __init__(self): """初始化顺序栈 """ self.MaxStackSize = int(input("输入栈的大小:")) self.s = [None for x in range(0, self.MaxStackSize)] self.top = -1 def IsEmptyStack(self): """判断栈是否为空 """ if self.top == -1: return True else: return False def PushStack(self, element): """入栈 """ if self.top < self.MaxStackSize - 1: self.top = self.top + 1 self.s[self.top] = element else: print("栈满!") self.StackTraverse() return def PopStack(self): """出栈 """ if self.IsEmptyStack(): print("栈空!") return else: iTop = self.top self.top = self.top - 1 return self.s[iTop] def StackTraverse(self): """遍历顺序栈 """ if self.IsEmptyStack(): print("栈空!") return else: print("当前栈底至栈顶数据分别为:") for i in range(0, self.top + 1): print(self.s[i], end=' ') print("") def GetTopStack(self): """获取顺序栈顶数据 """ if self.IsEmptyStack(): print("栈空!") return else: return self.s[self.top] def GetStackLength(self): """获取当前栈长度 """ if self.IsEmptyStack(): print("栈空!") return else: return self.top + 1 def CreateStackByInput(self): """创建顺序栈 """ data = input("请输入数据,按#结束:") while data != '#': self.PushStack(data) data = input("请输入数据,按#结束:") self.StackTraverse() ss = SequenceStack() ss.CreateStackByInput() element = input("输入入栈数据:") ss.PushStack(element=element) print("当前栈长度为:", ss.GetStackLength()) print("当前栈顶数据为:", ss.GetTopStack()) print("出栈数据为:", ss.PopStack()) class SequenceStack: """顺序栈 """ t
时间: 2023-06-06 19:06:34 浏览: 104
照顺序栈入栈顺序输入,以空格分隔:") dataList = data.split(" ") for i in range(0, len(dataList)): self.PushStack(dataList[i])
这是一个顺序栈的定义,包括初始化、判断栈空、入栈、出栈、遍历栈、获取栈顶元素、获取栈长度和创建栈等方法。其中,初始化方法会让用户输入栈的大小,入栈方法检查栈是否已满,若已满就输出提示信息。创建栈方法让用户输入一串数据,按顺序入栈。
相关问题
class SequenceStack: """顺序栈 """ top = None def __init__(self): """初始化顺序栈 """ self.MaxStackSize = int(input("输入栈的大小:")) self.s = [None for x in range(0, self.MaxStackSize)] self.top = -1 def IsEmptyStack(self): """判断栈是否为空 """ if self.top == -1: return True else: return False def PushStack(self, element): """入栈 """ if self.top < self.MaxStackSize - 1: self.top = self.top + 1 self.s[self.top] = element else: print("栈满!") self.StackTraverse() return def PopStack(self): """出栈 """ if self.IsEmptyStack(): print("栈空!") return else: iTop = self.top self.top = self.top - 1 return self.s[iTop] def StackTraverse(self): """遍历顺序栈 """ if self.IsEmptyStack(): print("栈空!") return else: print("当前栈底至栈顶数据分别为:") for i in range(0, self.top + 1): print(self.s[i], end=' ') print("") def GetTopStack(self): """获取顺序栈顶数据 """ if self.IsEmptyStack(): print("栈空!") return else: return self.s[self.top] def GetStackLength(self): """获取当前栈长度 """ if self.IsEmptyStack(): print("栈空!") return else: return self.top + 1 def CreateStackByInput(self): """创建顺序栈 """ data = input("请输入数据,按#结束:") while data != '#': self.PushStack(data) data = input("请输入数据,按#结束:") self.StackTraverse() ss = SequenceStack() ss.CreateStackByInput() element = input("输入入栈数据:") ss.PushStack(element=element) print("当前栈长度为:", ss.GetStackLength()) print("当前栈顶数据为:", ss.GetTopStack()) print("出栈数据为:", ss.PopStack()) class SequenceStack: """顺序栈 """ t
照顺序入栈,输入exit结束:") while data != 'exit': self.PushStack(data) data = input("请输入数据,按照顺序入栈,输入exit结束:")
该类为一个顺序栈,通过输入栈的大小和数据,创建一个新的顺序栈。通过IsEmptyStack可以判断该栈是否为空,通过PushStack可以往栈中添加元素,当栈满时会提示栈满。通过PopStack可以弹出栈顶元素,当栈为空时会提示栈空。通过StackTraverse可以遍历栈中所有元素,当栈为空时也会提示栈空。通过GetTopStack可以获取栈顶元素,当栈为空时会提示栈空。通过GetStackLength可以获取当前栈的长度。该类还提供了一个方法CreateStackByInput,用于通过输入数据创建一个新的顺序栈。
根据要求与指导得设计思路与实现步骤(文字或图表说明) 2.实现过程及程序代码(截图说明,以能看清注释为准) 3.程序运行结果(截图说明)
### 项目设计思路与实现步骤
#### 1. 设计思路与实现步骤
**顺序栈**
1. **使用数组来模拟连续存储空间**
- 使用动态数组来实现栈的存储,以便可以根据需要调整栈的大小。
2. **数据成员**
- `int topIndex`:指示栈顶所在位置的下标。
- `int maxStackSize`:保存栈的最大容量。
- `T* pItems`:指向动态数组的指针。
3. **基本操作**
- `bool IsEmpty()`:判断栈是否为空。
- `bool IsFull()`:判断栈是否已满。
- `T Top()`:返回栈顶元素。
- `void Push(T newItem)`:向栈中添加元素。
- `T Pop()`:从栈中移除并返回栈顶元素。
4. **异常处理**
- 使用断言(assert)对异常情况进行报错,例如栈空时调用Pop操作,或者栈满时调用Push操作。
**链式栈**
1. **使用链表来实现栈**
- 每个节点包含一个数据项和一个指向下一个节点的指针。
2. **数据成员**
- `Node<T>* top`:指向栈顶节点的指针。
3. **基本操作**
- `bool IsEmpty()`:判断栈是否为空。
- `T Top()`:返回栈顶元素。
- `void Push(T newItem)`:向栈中添加元素。
- `T Pop()`:从栈中移除并返回栈顶元素。
#### 2. 实现过程及程序代码
**顺序栈代码示例**
```cpp
#include <iostream>
using namespace std;
template <typename T>
class ArrayStack {
public:
ArrayStack(int size) : maxStackSize(size), topIndex(-1) {
pItems = new T[maxStackSize];
}
~ArrayStack() {
delete[] pItems;
}
bool IsEmpty() const {
return topIndex == -1;
}
bool IsFull() const {
return topIndex == maxStackSize - 1;
}
T Top() const {
assert(!IsEmpty());
return pItems[topIndex];
}
void Push(T newItem) {
assert(!IsFull());
pItems[++topIndex] = newItem;
}
T Pop() {
assert(!IsEmpty());
return pItems[topIndex--];
}
private:
int topIndex;
int maxStackSize;
T* pItems;
};
int main() {
ArrayStack<int> intStack(5);
intStack.Push(1);
intStack.Push(2);
intStack.Push(3);
cout << "Top element is: " << intStack.Top() << endl;
intStack.Pop();
cout << "After pop, top element is: " << intStack.Top() << endl;
return 0;
}
```
**链式栈代码示例**
```cpp
#include <iostream>
using namespace std;
template <typename T>
struct Node {
T data;
Node* next;
};
template <typename T>
class LinkedListStack {
public:
LinkedListStack() : top(nullptr) {}
~LinkedListStack() {
while (!IsEmpty()) {
Pop();
}
}
bool IsEmpty() const {
return top == nullptr;
}
T Top() const {
assert(!IsEmpty());
return top->data;
}
void Push(T newItem) {
Node<T>* newNode = new Node<T>;
newNode->data = newItem;
newNode->next = top;
top = newNode;
}
T Pop() {
assert(!IsEmpty());
T item = top->data;
Node<T>* temp = top;
top = top->next;
delete temp;
return item;
}
private:
Node<T>* top;
};
int main() {
LinkedListStack<int> stack;
stack.Push(1);
stack.Push(2);
stack.Push(3);
cout << "Top element is: " << stack.Top() << endl;
stack.Pop();
cout << "After pop, top element is: " << stack.Top() << endl;
return 0;
}
```
#### 3. 程序运行结果
**顺序栈运行结果**
```
Top element is: 3
After pop, top element is: 2
```
**链式栈运行结果**
```
Top element is: 3
After pop, top element is: 2
```
以上是顺序栈和链式栈的设计思路、实现步骤以及部分代码示例。具体的代码截图和详细的运行结果截图可以在实际开发环境中生成并附在项目报告中。
阅读全文