使用c语言编写一个程序:使用栈存储元素可以实现入栈、出栈
时间: 2024-10-19 10:13:17 浏览: 45
在C语言中,我们可以使用数组或链表结构来实现栈数据结构。这里以链表为例,因为链表操作更方便插入和删除元素。下面是一个简单的链式栈(仅包含基本功能)的实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义栈节点结构体
typedef struct Node {
int data; // 存储的数据
struct Node* next; // 指向下一个节点的指针
} StackNode;
// 初始化一个空栈
StackNode* initStack() {
StackNode* stack = (StackNode*)malloc(sizeof(StackNode));
if (stack == NULL) {
printf("Memory allocation failed.\n");
return NULL;
}
stack->next = NULL;
return stack;
}
// 入栈(添加元素)
void push(StackNode** top, int value) {
StackNode* newNode = (StackNode*)malloc(sizeof(StackNode));
if (newNode == NULL) {
printf("Memory allocation failed.\n");
return;
}
newNode->data = value;
newNode->next = (*top)->next;
(*top)->next = newNode;
(*top) = newNode; // 更新栈顶指针
}
// 出栈(删除并返回顶部元素)
int pop(StackNode** top) {
if (*top == NULL) {
printf("Stack is empty.\n");
return -1;
}
int value = (*top)->data;
StackNode* temp = *top;
*top = (*top)->next; // 移除栈顶元素
free(temp); // 释放内存
return value;
}
// 查看栈顶元素(不修改栈)
int peek(StackNode* top) {
if (top == NULL) {
printf("Stack is empty.\n");
return -1;
}
return top->data;
}
int main() {
StackNode* stack = initStack();
if (stack != NULL) {
push(&stack, 5);
push(&stack, 10);
push(&stack, 15);
printf("Top element: %d\n", peek(stack));
printf("Popped element: %d\n", pop(&stack));
printf("Top element after pop: %d\n", peek(stack));
// 清理堆内存
while (pop(&stack) != -1);
free(stack);
}
return 0;
}
```
在这个例子中,我们首先创建了一个`StackNode`结构体来表示栈中的每个元素,并实现了初始化栈、入栈、出栈以及查看栈顶元素的操作。注意,在实际应用中,你需要处理可能出现的错误情况,例如当栈为空时的特殊情况。
阅读全文