⑴ 建立一个空栈; ⑵ 对已建立的栈进行插入、删除、取栈顶元素等基本操作 用c语言
时间: 2024-11-12 12:44:19 浏览: 11
栈的一些基本操作:出入栈,获取栈顶指针等
在C语言中,我们可以使用数组或者链表来实现一个简单的栈结构。这里我们以动态数组为例说明:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 10 // 定义栈的最大容量
// 定义栈结构体
typedef struct {
int* data; // 存储数据的指针
int top; // 栈顶指针
int size; // 栈的当前大小
} Stack;
// 初始化一个空栈
Stack* createStack() {
Stack* stack = (Stack*)malloc(sizeof(Stack));
if (!stack) {
printf("内存分配失败!\n");
return NULL;
}
stack->data = (int*)malloc(MAX_SIZE * sizeof(int)); // 分配空间
if (!stack->data) {
free(stack);
printf("内存分配失败!\n");
return NULL;
}
stack->top = -1;
stack->size = 0;
return stack;
}
// 插入元素到栈顶
void push(Stack* stack, int value) {
if (stack- 1) {
printf("栈已满,无法再插入元素\n");
return;
}
stack->data[++stack->top] = value;
stack->size++;
}
// 删除栈顶元素并返回
int pop(Stack* stack) {
if (stack->top == -1) {
printf("栈为空,无法删除元素\n");
return -1;
}
int topValue = stack->data[stack->top];
stack->data[stack->top--] = 0; // 简化处理,实际应用中可以不赋值
stack->size--;
return topValue;
}
// 获取栈顶元素(不删除)
int peek(Stack* stack) {
if (stack->top == -1) {
printf("栈为空,无法获取栈顶元素\n");
return -1;
}
return stack->data[stack->top];
}
// 释放栈内存
void destroyStack(Stack* stack) {
free(stack->data);
free(stack);
}
int main() {
Stack* stack = createStack();
if (stack) {
push(stack, 1);
push(stack, 2);
printf("栈顶元素: %d\n", peek(stack)); // 输出 2
printf("弹出元素: %d\n", pop(stack)); // 输出 2,栈顶变为1
destroyStack(stack); // 释放内存
}
return 0;
}
```
以上代码展示了如何创建、操作和销毁一个基于数组的简单栈。注意这只是一个基础示例,在实际项目中可能需要更复杂的数据结构来处理栈溢出等情况。
阅读全文