目录
- 1. 讲解:
- 2. C++代码实现:
- 小结:
1. 讲解:
两个指针,一个将0作为栈底,一个将maxsize作为栈底,向里面填充。栈满的判断条件为:S.top0 == S.top1 - 1
2. C++代码实现:
#include <stdlib.h>
#include <iostream>
using namespace std;
#define MaxSize 10
#define ElemType int
typedef struct {
ElemType data[MaxSize];
int top0;
int top1;
}ShStack;
// 初始化栈
void InitStack(ShStack &S) {
S.top0 = -1;
S.top1 = MaxSize;
}
// 判断栈空
bool StackEmpty(ShStack S) {
if (S.top0 == -1 && S.top1 == MaxSize) return true;
else return false;
}
// 入栈0
bool Push0(ShStack& S, ElemType e) {
if (S.top0 == S.top1 - 1) return false; // 如果栈满则失败
S.data[++S.top0] = e; // 栈顶指针加一
return true;
}
// 入栈1
bool Push1(ShStack& S, ElemType e) {
if (S.top0 == S.top1 - 1) return false; // 如果栈满则失败
S.data[--S.top1] = e; // 栈顶指针加一
return true;
}
// 出栈0
bool Pop0(ShStack& S, ElemType& e) {
if (S.top0 == -1) return false; // 如果栈空则失败
e = S.data[S.top0--]; // 栈顶指针减一
return true;
}
// 出栈1
bool Pop1(ShStack& S, ElemType& e) {
if (S.top1 == MaxSize) return false; // 如果栈空则失败
e = S.data[S.top1++]; // 栈顶指针减一
return true;
}
// 读栈0
bool GetTop0(ShStack& S, ElemType& e) {
if (S.top0 == -1) return false; // 如果栈空则失败
e = S.data[S.top0]; // 栈顶指针减一
return true;
}
// 读栈1
bool GetTop1(ShStack& S, ElemType& e) {
if (S.top1 == MaxSize) return false; // 如果栈空则失败
e = S.data[S.top1]; // 栈顶指针减一
return true;
}
int main() {
ShStack S;
InitStack(S);
// 入栈操作
for (int i = 0; i < 5; ++i) {
Push0(S, i); // 向栈0中入栈
Push1(S, i + 5); // 向栈1中入栈
}
// 出栈操作
ElemType e;
while (Pop0(S, e)) {
cout << "Pop from Stack 0: " << e << endl;
}
while (Pop1(S, e)) {
cout << "Pop from Stack 1: " << e << endl;
}
// 读栈操作
if (GetTop0(S, e)) {
cout << "Top element of Stack 0: " << e << endl;
}
else {
cout << "Stack 0 is empty." << endl;
}
if (GetTop1(S, e)) {
cout << "Top element of Stack 1: " << e << endl;
}
else {
cout << "Stack 1 is empty." << endl;
}
return 0;
}
小结:
关注我给大家分享更多有趣的知识,以下是个人公众号,提供 ||代码兼职|| ||代码问题求解||
添加我的公众号即可: