在C语言版数据结构中对于栈的四中基本操作样例输入为10次操作,每一次为基本操作中的一个比如输入第一次操作为push 5则代码怎么写
时间: 2024-09-25 15:20:54 浏览: 33
在 C 语言中,栈是一种线性的数据结构,常用于函数调用、表达式求值等场景。以下是基于数组实现的基本栈操作,包括 push(入栈)、pop(出栈)、peek(查看顶部元素但不移除)以及 isEmpty(判断栈是否为空):
```c
#include <stdio.h>
#define MAX_SIZE 100
// 定义栈结构
typedef struct {
int stack[MAX_SIZE];
int top; // 栈顶指针
} Stack;
// 初始化栈
void init(Stack *s) {
s->top = -1;
}
// 入栈(push)
void push(Stack *s, int value) {
if (s->top < MAX_SIZE - 1) {
s->stack[++s->top] = value;
printf("Pushed %d onto the stack.\n", value);
} else {
printf("Stack is full, cannot push.\n");
}
}
// 出栈(pop)
int pop(Stack *s) {
if (s->top >= 0) {
return s->stack[s->top--];
} else {
printf("Cannot pop from an empty stack.\n");
return -1; // 返回错误码表示栈空
}
}
// 查看栈顶元素(peek)
int peek(Stack *s) {
if (s->top >= 0) {
return s->stack[s->top];
} else {
printf("Cannot peek at an empty stack.\n");
return -1; // 返回错误码表示栈空
}
}
// 判断栈是否为空
int isEmpty(Stack *s) {
return s->top == -1;
}
int main() {
Stack myStack;
init(&myStack);
// 10 次操作示例(每次操作后都检查栈状态)
for (int i = 1; i <= 10; ++i) {
char operation[10];
scanf("%s", operation); // 输入操作指令
switch(operation[0]) {
case 'p': // Push
int value;
scanf("%d", &value);
push(&myStack, value);
break;
case 'o': { // Pop or Peek
if (operation[1] == 'p') {
int popped = pop(&myStack);
if (popped != -1)
printf("Popped: %d\n", popped);
else
printf("Nothing popped due to empty stack.\n");
} else { // Peek
int peak = peek(&myStack);
if (peak != -1)
printf("Peeked: %d\n", peak);
else
printf("Nothing to peek due to empty stack.\n");
}
break;
}
case 'e': { // Empty check
if (isEmpty(&myStack))
printf("Stack is empty.\n");
else
printf("Stack is not empty.\n");
break;
}
default:
printf("Invalid operation.\n");
break;
}
}
return 0;
}
```
上述代码实现了基本的栈操作,你可以按照提示输入10次操作指令和相应的值。注意,这个例子假设了所有输入都是正确的,并没有做太多的错误处理。在实际项目中,你需要添加更多的验证来确保输入的有效性。
阅读全文