C语言编写一个程序实现顺序栈的以下基本运算: 初始化顺序栈 插入元素 删除栈顶元素 取栈顶元素 遍历顺序栈 置空顺序栈
时间: 2024-10-21 16:14:40 浏览: 19
表达式求值顺序栈实现包括小数点运算(C语言版).docx
在C语言中,我们可以使用数组或链表来实现顺序栈的基本操作。这里提供一种使用数组实现的简单示例:
```c
#include <stdio.h>
#define MAX_SIZE 50
// 定义顺序栈结构体
typedef struct {
int top; // 栈顶指针
int data[MAX_SIZE]; // 存储栈元素
} Stack;
// 初始化顺序栈
void init(Stack* s) {
s->top = -1;
}
// 判断栈是否为空
int isEmpty(Stack* s) {
return s->top == -1;
}
// 插入元素到栈顶
void push(Stack* s, int value) {
if (s->top < MAX_SIZE - 1) {
s->data[++s->top] = value;
printf("Inserted element %d into the stack.\n", value);
} else {
printf("Stack is full. Cannot insert.\n");
}
}
// 删除并返回栈顶元素
int pop(Stack* s) {
if (!isEmpty(s)) {
int value = s->data[s->top];
s->top--;
printf("Popped element from stack: %d\n", value);
return value;
} else {
printf("Stack is empty. No element to pop.\n");
return -1; // 返回错误码表示无元素可弹出
}
}
// 取栈顶元素但不删除
int peek(Stack* s) {
if (!isEmpty(s)) {
printf("Top element of stack: %d\n", s->data[s->top]);
return s->data[s->top];
} else {
printf("Stack is empty.\n");
return -1; // 返回错误码表示无元素在栈顶
}
}
// 遍历顺序栈(仅适用于数组实现)
void traverse(Stack* s) {
if (isEmpty(s)) {
printf("Stack is empty.\n");
} else {
printf("Stack elements: ");
for (int i = 0; i <= s->top; i++) {
printf("%d ", s->data[i]);
}
printf("\n");
}
}
// 置空顺序栈
void clear(Stack* s) {
s->top = -1;
printf("Stack cleared.\n");
}
// 主函数演示栈的操作
int main() {
Stack myStack;
init(&myStack);
push(&myStack, 10);
push(&myStack, 20);
push(&myStack, 30);
traverse(&myStack); // 输出:Stack elements: 10 20 30
printf("Top element: %d\n", peek(&myStack)); // 输出:Top element: 30
pop(&myStack); // 输出:Popped element from stack: 30
traverse(&myStack); // 输出:Stack elements: 10 20
clear(&myStack); // 输出:Stack cleared.
return 0;
}
```
这个示例展示了如何在C语言中实现一个简单的顺序栈,并完成了初始化、插入、删除、查看栈顶元素、遍历以及清空栈的基本操作。
阅读全文