用c语言编写代码判断栈空、栈满、入栈、出栈
时间: 2024-10-21 16:08:38 浏览: 49
在C语言中,我们通常使用数组或链表来实现一个简单的栈数据结构。这里是一个基本的链表栈的例子,包括判断栈空、栈满以及入栈和出栈操作:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
} StackNode;
struct Stack {
StackNode* top;
};
// 判断栈是否为空
int is_empty(Stack* s) {
return s->top == NULL;
}
// 判断栈是否已满 (假设最大容量为MAX_SIZE)
int is_full(Stack* s, int MAX_SIZE) {
if (s->top != NULL && (s->top - s->top->next) == (MAX_SIZE - 1)) {
return 1; // 栈已满
} else {
return 0; // 栈不满
}
}
// 入栈 (push) 操作
void push(Stack* s, int value) {
if (!is_full(s, MAX_SIZE)) { // 如果栈未满
StackNode* newNode = (StackNode*)malloc(sizeof(StackNode));
newNode->data = value;
newNode->next = s->top;
s->top = newNode;
printf("元素 %d 入栈。\n", value);
} else {
printf("栈已满,无法入栈。\n");
}
}
// 出栈 (pop) 操作
int pop(Stack* s) {
if (!is_empty(s)) { // 如果栈非空
StackNode* temp = s->top;
int value = temp->data;
s->top = temp->next;
free(temp); // 释放内存
return value; // 返回栈顶元素并移除
} else {
printf("栈为空,无法出栈。\n");
return -1; // 或者返回一个错误值表示栈空
}
}
// 示例主函数
int main() {
Stack stack;
stack.top = NULL;
push(&stack, 1);
push(&stack, 2);
push(&stack, 3);
int popped_value = pop(&stack);
if (popped_value != -1) {
printf("刚出栈的值是:%d\n", popped_value);
}
return 0;
}
```
这个例子展示了如何创建一个简单的栈,并演示了入栈和出栈的操作。注意,为了简单起见,这里并没有处理栈溢出的情况。在实际应用中,需要添加额外的检查以防止这种情况。
阅读全文