要求编写功能函数实现堆栈的定义,分别基于顺序栈和链栈: (1)编写进栈函数push(); (2)编写出栈函数pop(); (3)编写判断栈满和栈空的函数 (4)遍历栈,并输出元素。
时间: 2024-05-09 09:20:38 浏览: 108
1. 基于顺序栈的实现:
```c++
#define MAXSIZE 100 // 定义栈的最大容量为100
typedef struct {
int data[MAXSIZE]; // 栈的元素数组
int top; // 栈顶指针
} SqStack; // 定义顺序栈结构体
// 初始化栈
void InitStack(SqStack &s) {
s.top = -1; // 栈顶指针初始化为-1,表示空栈
}
// 进栈操作
bool Push(SqStack &s, int x) {
if (s.top == MAXSIZE - 1) { // 栈满
return false;
}
s.top++; // 栈顶指针加1
s.data[s.top] = x; // 将元素x压入栈顶
return true;
}
// 出栈操作
bool Pop(SqStack &s, int &x) {
if (s.top == -1) { // 栈空
return false;
}
x = s.data[s.top]; // 取出栈顶元素
s.top--; // 栈顶指针减1
return true;
}
// 判断栈是否为空
bool IsEmpty(SqStack s) {
return (s.top == -1);
}
// 判断栈是否已满
bool IsFull(SqStack s) {
return (s.top == MAXSIZE - 1);
}
// 遍历栈
void TraverseStack(SqStack s) {
int i = s.top;
while (i >= 0) {
cout << s.data[i] << " ";
i--;
}
cout << endl;
}
```
2. 基于链栈的实现:
```c++
typedef struct LinkNode {
int data; // 栈元素
struct LinkNode *next; // 下一个结点指针
} LinkNode, *LinkStack; // 定义链栈结构体
// 初始化栈
void InitStack(LinkStack &s) {
s = NULL; // 栈顶指针初始化为空
}
// 进栈操作
bool Push(LinkStack &s, int x) {
LinkNode *p = new LinkNode; // 创建新结点
p->data = x; // 将元素x存入新结点
p->next = s; // 新结点插入栈顶
s = p; // 更新栈顶指针
return true;
}
// 出栈操作
bool Pop(LinkStack &s, int &x) {
if (s == NULL) { // 栈空
return false;
}
x = s->data; // 取出栈顶元素
LinkNode *p = s; // 保存栈顶结点指针
s = s->next; // 栈顶指针下移
delete p; // 释放原栈顶结点
return true;
}
// 判断栈是否为空
bool IsEmpty(LinkStack s) {
return (s == NULL);
}
// 遍历栈
void TraverseStack(LinkStack s) {
while (s != NULL) {
cout << s->data << " ";
s = s->next;
}
cout << endl;
}
```
阅读全文