本关任务是实现 step2/LnkStack.cpp 中的LS_IsEmpty、LS_Length、LS_Push、LS_Pop和LS_Top五个操作函数,以实现判断栈是否为空、求栈的长度、进栈、出栈以及获取栈顶元素等功能。c代码
时间: 2023-06-07 16:11:01 浏览: 212
如下:
```
#include<iostream>
#include<cstring>
using namespace std;
#define MAXSIZE 100 // 定义栈的最大空间
// 定义栈的数据结构
typedef struct {
int data[MAXSIZE]; // 存放栈中元素
int top; // 栈顶指针,指向栈顶元素所在位置的下标
} LnkStack;
// 判断栈是否为空
bool LS_IsEmpty(LnkStack* s) {
return s->top == -1;
}
// 求栈的长度
int LS_Length(LnkStack* s) {
return s->top + 1;
}
// 进栈
bool LS_Push(LnkStack* s, int e) {
if(s->top == MAXSIZE - 1) return false; // 栈满,无法进栈
s->data[++s->top] = e; // 栈顶指针加 1,进栈
return true;
}
// 出栈
bool LS_Pop(LnkStack* s, int* e) {
if(s->top == -1) return false; // 栈为空,无法出栈
*e = s->data[s->top--]; // 栈顶指针减 1,出栈
return true;
}
// 获取栈顶元素
bool LS_Top(LnkStack* s, int* e) {
if(s->top == -1) return false; // 栈为空,无栈顶元素
*e = s->data[s->top]; // 获取栈顶元素,但不出栈
return true;
}
int main() {
LnkStack s;
memset(s.data, 0, sizeof(s.data));
s.top = -1;
// 测试栈是否为空
cout << "栈是否为空:" << LS_IsEmpty(&s) << endl;
// 测试进栈
for(int i = 0; i < 5; i++) {
LS_Push(&s, i + 1);
}
// 测试求栈的长度
cout << "栈的长度:" << LS_Length(&s) << endl;
// 测试出栈和获取栈顶元素
int e = 0;
LS_Pop(&s, &e);
cout << "出栈元素:" << e << endl;
cout << "栈顶元素:" << (LS_Top(&s, &e) ? to_string(e) : "不存在") << endl;
// 清空栈
while(!LS_IsEmpty(&s)) {
LS_Pop(&s, &e);
}
return 0;
}
```
这段代码实现了一个栈的数据结构,包括栈的初始化、栈的判空、求栈的长度、进栈、出栈和获取栈顶元素等操作。
阅读全文