编写一个程序实现顺序栈的各种基本运算。
时间: 2023-05-31 15:19:52 浏览: 120
### 回答1:
好的,以下是实现顺序栈的基本运算的程序:
1. 定义栈的结构体和相关变量
```
#define MAXSIZE 100 // 栈的最大容量
typedef struct {
int data[MAXSIZE]; // 存储栈中元素的数组
int top; // 栈顶指针
} SqStack;
SqStack s; // 定义一个顺序栈s
s.top = -1; // 初始化栈顶指针为-1,表示栈为空
```
2. 实现入栈操作
```
int Push(SqStack *s, int x) {
if (s->top == MAXSIZE - 1) { // 栈满,无法入栈
return ;
}
s->top++; // 栈顶指针加1
s->data[s->top] = x; // 将元素x入栈
return 1;
}
```
3. 实现出栈操作
```
int Pop(SqStack *s, int *x) {
if (s->top == -1) { // 栈空,无法出栈
return ;
}
*x = s->data[s->top]; // 将栈顶元素赋值给x
s->top--; // 栈顶指针减1
return 1;
}
```
4. 实现获取栈顶元素操作
```
int GetTop(SqStack s, int *x) {
if (s.top == -1) { // 栈空,无法获取栈顶元素
return ;
}
*x = s.data[s.top]; // 将栈顶元素赋值给x
return 1;
}
```
5. 实现判断栈是否为空操作
```
int IsEmpty(SqStack s) {
if (s.top == -1) { // 栈空
return 1;
}
return ;
}
```
6. 实现清空栈操作
```
void ClearStack(SqStack *s) {
s->top = -1; // 将栈顶指针置为-1,表示栈为空
}
```
以上就是实现顺序栈的基本运算的程序。
### 回答2:
顺序栈是一种常见的数据结构,它是一种栈模型,具有后进先出(Last In First Out, LIFO)的特点。顺序栈基于数组实现,可以进行push(入栈)、pop(出栈)、peek(查看栈顶元素)以及isEmpty(判断是否为空)等各种基本运算。
以下是一个实现顺序栈基本运算的示例程序:
```python
class Stack:
def __init__(self):
self.items = []
def isEmpty(self):
return self.items == []
def push(self, item):
self.items.append(item)
def pop(self):
return self.items.pop()
def peek(self):
return self.items[len(self.items)-1]
def size(self):
return len(self.items)
stack = Stack()
stack.push('A')
stack.push('B')
stack.push('C')
print(stack.peek()) # 输出 'C'
print(stack.pop()) # 输出 'C'
print(stack.pop()) # 输出 'B'
print(stack.isEmpty()) # 输出 False
print(stack.pop()) # 输出 'A'
print(stack.isEmpty()) # 输出 True
```
在上述程序中,我们定义了一个Stack类,并使用一个空白的列表self.items来存储栈元素。isEmpty()方法用于判断栈是否为空,push()方法用于将元素入栈,pop()方法用于将栈顶元素出栈,peek()方法用于查看栈顶元素,size()方法用于返回栈的大小。我们通过一系列的stack操作对栈进行操作,最后输出了栈是否为空以及出栈的元素。
总之,顺序栈是一种非常常见的数据结构,在程序开发中经常使用。了解和掌握顺序栈的基本运算对于提高编写程序的效率和质量有着非常重要的作用。
### 回答3:
顺序栈是一种非常常见的栈数据结构,它采用数组作为存储结构,并支持基本的入栈、出栈、判空、获取栈顶元素等操作。
下面是一个C++实现顺序栈各种基本运算的程序:
```cpp
#include <iostream>
using namespace std;
#define MAXSIZE 100 // 栈的最大长度
// 定义顺序栈结构体
typedef struct Stack {
int data[MAXSIZE]; // 存储栈元素的数组
int top; // 栈顶指针
} SqStack;
// 初始化栈
void InitStack(SqStack &s) {
s.top = -1; // 栈顶指针初始化为-1
}
// 判断栈是否为空
bool IsEmpty(SqStack s) {
return s.top == -1;
}
// 判断栈是否已满
bool IsFull(SqStack s) {
return s.top == MAXSIZE-1;
}
// 获取栈顶元素
int GetTop(SqStack s) {
if(IsEmpty(s)) {
cout << "栈为空,不能取栈顶元素\n";
return -1;
}
return s.data[s.top];
}
// 入栈
bool Push(SqStack &s, int elm) {
if(IsFull(s)) {
cout << "栈已满,无法入栈\n";
return false;
}
s.top++; // 栈顶指针加1
s.data[s.top] = elm; // 将新元素放到栈顶
return true;
}
// 出栈
bool Pop(SqStack &s, int &elm) {
if(IsEmpty(s)) {
cout << "栈为空,无法出栈\n";
return false;
}
elm = s.data[s.top]; // 取出栈顶元素
s.top--; // 栈顶指针减1
return true;
}
int main() {
SqStack s;
InitStack(s);
Push(s, 1);
Push(s, 2);
Push(s, 3);
int elm;
Pop(s, elm);
cout << "出栈的元素是:" << elm << endl;
cout << "栈顶元素是:" << GetTop(s) << endl;
if(IsEmpty(s))
cout << "栈为空,不能出栈\n";
else
cout << "栈不为空\n";
if(IsFull(s))
cout << "栈已满,不能入栈\n";
else
cout << "栈未满,可以入栈\n";
return 0;
}
```
上面的程序中,我们先定义了一个顺序栈结构体,其中包含了一个存储栈元素的数组和一个栈顶指针。然后,我们依次实现了初始化栈、判空、判满、入栈、出栈、获取栈顶元素等各种基本运算。
最后,在程序的主函数中,我们演示了对栈进行入栈、出栈、获取栈顶元素、判空、判满操作的示例。运行程序,可以得到如下的结果:
```
出栈的元素是:3
栈顶元素是:2
栈不为空
栈未满,可以入栈
```
在实际开发中,我们可以根据具体情况对顺序栈进行灵活应用,如实现逆波兰表达式求值、括号匹配判断等等。