请根据以下要求编写程序实验内容与要求 编写一个程序实现顺序栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能 (1)初始化顺序栈 (2)插入元素 (3)删除栈顶元素 (4)取栈顶元素 (5)遍历顺序栈 (6)置空顺序栈
时间: 2023-12-28 11:05:03 浏览: 84
好的,以下是基于C语言的实现代码,满足上述要求:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100 // 栈的最大长度
// 定义顺序栈结构体
typedef struct {
int top; // 栈顶指针
int data[MAX_SIZE]; // 存储数据的数组
} SeqStack;
// 初始化顺序栈
void init_stack(SeqStack *stack) {
stack->top = -1; // 栈顶指针初始化为-1,表示空栈
}
// 判断栈是否为空
int is_empty(SeqStack *stack) {
return stack->top == -1;
}
// 判断栈是否已满
int is_full(SeqStack *stack) {
return stack->top == MAX_SIZE - 1;
}
// 入栈操作
int push(SeqStack *stack, int data) {
if (is_full(stack)) {
printf("Stack overflow.\n");
return 0;
}
stack->data[++stack->top] = data; // 先移动栈顶指针,再插入数据
return 1;
}
// 出栈操作
int pop(SeqStack *stack) {
if (is_empty(stack)) {
printf("Stack underflow.\n");
return 0;
}
stack->top--; // 直接移动栈顶指针,等待被覆盖的数据会被回收
return 1;
}
// 返回栈顶元素
int top(SeqStack *stack) {
if (is_empty(stack)) {
printf("Stack is empty.\n");
return -1;
}
return stack->data[stack->top];
}
// 遍历顺序栈
void traverse(SeqStack *stack) {
if (is_empty(stack)) {
printf("Stack is empty.\n");
return;
}
printf("Stack elements: ");
for (int i = stack->top; i >= 0; i--) {
printf("%d ", stack->data[i]);
}
printf("\n");
}
// 置空顺序栈
void clear(SeqStack *stack) {
stack->top = -1;
}
int main() {
SeqStack stack;
init_stack(&stack);
// 测试入栈操作
push(&stack, 1);
push(&stack, 2);
push(&stack, 3);
push(&stack, 4);
// 测试遍历顺序栈
traverse(&stack);
// 测试取栈顶元素
printf("Top element: %d\n", top(&stack));
// 测试出栈操作
pop(&stack);
// 测试遍历顺序栈
traverse(&stack);
// 测试置空顺序栈
clear(&stack);
// 测试遍历顺序栈
traverse(&stack);
return 0;
}
```
在程序中,我们首先定义了一个顺序栈的结构体,并定义了各种基本操作的函数。接着,在主函数中,我们先初始化一个顺序栈,然后通过测试入栈、遍历、取栈顶元素、出栈、遍历以及置空操作来验证程序的正确性。
阅读全文