实现顺序栈各种基本运算的算法
时间: 2023-12-01 16:39:21 浏览: 197
实顺序栈的基本算法包括初始化、入栈、出栈、取栈顶元素、遍历、置空等操作。下面是各种基本运算的算法:
1. 初始化操作:创建一个空栈,即将栈顶指针指向-1。
2. 入栈操作:将元素压入栈顶,即将栈顶指针加1,然后将元素存入该位置。
3. 出栈操作:将栈顶元素弹出,即将栈顶指针减1,然后返回该位置的元素。
4. 取栈顶元素操作:返回栈顶元素,即返回栈顶指针所指位置的元素。
5. 遍历操作:从栈底到栈顶依次输出栈中元素。
6. 置空操作:将栈清空,即将栈顶指针重置为-1。
下面是一个主程序的示例,它实现了上述基本运算:
```
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE];
int top;
} SequenStack;
void Init_SequenStack(SequenStack* s) {
s->top = -1;
}
void Push_SequenStack(SequenStack* s, int x) {
if (s->top == MAXSIZE - 1) {
printf("Stack overflow!\n");
exit(1);
}
s->top++;
s->data[s->top] = x;
}
int Pop_SequenStack(SequenStack* s) {
if (s->top == -1) {
printf("Stack underflow!\n");
exit(1);
}
int x = s->data[s->top];
s->top--;
return x;
}
int GetTop_SequenStack(SequenStack* s, int* x) {
if (s->top == -1) {
printf("Stack is empty!\n");
return 0;
}
*x = s->data[s->top];
return 1;
}
void Traverse_SequenStack(SequenStack* s) {
if (s->top == -1) {
printf("Stack is empty!\n");
return;
}
for (int i = 0; i <= s->top; i++) {
printf("%d ", s->data[i]);
}
printf("\n");
}
void Clear_SequenStack(SequenStack* s) {
s->top = -1;
}
int main() {
SequenStack s;
Init_SequenStack(&s);
Push_SequenStack(&s, 1);
Push_SequenStack(&s, 2);
Push_SequenStack(&s, 3);
int x;
GetTop_SequenStack(&s, &x);
printf("Top element: %d\n", x);
Traverse_SequenStack(&s);
Pop_SequenStack(&s);
Traverse_SequenStack(&s);
Clear_SequenStack(&s);
Traverse_SequenStack(&s);
return 0;
}
```
阅读全文