补充一下,我只需要一维数组
时间: 2024-10-10 11:04:33 浏览: 3
如果只使用一维数组来实现类似于堆栈的数据结构,你可以创建一个数组并维护两个指针,一个(`top`)指示栈顶元素的位置,另一个(`bottom`)用于标记数组下标的起始点。以下是一个基本的一维数组实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX_SIZE 10 // 定义数组的最大容量
typedef struct {
int data[MAX_SIZE];
int top; // 栈顶指针
int bottom; // 下标起始点
} Stack;
// 初始化堆栈
void stack_init(Stack* s) {
s->top = s->bottom = 0;
}
// 判断栈是否为空
bool stack_is_empty(const Stack* s) {
return s->top == s->bottom;
}
// 向堆栈中添加元素(模拟push操作)
void stack_push(Stack* s, int value) {
if (s->top == MAX_SIZE - 1) {
printf("Error: Stack overflow.\n");
return;
}
s->data[s->top++] = value;
}
// 从堆栈中移除元素并返回(模拟pop操作)
int stack_pop(Stack* s) {
if (stack_is_empty(s)) {
printf("Error: Pop from empty stack.\n");
return -1;
}
int popped_value = s->data[s->top - 1];
s->top--;
return popped_value;
}
// 获取堆栈顶部元素但不移除(模拟peek操作)
int stack_peek(const Stack* s) {
if (stack_is_empty(s)) {
printf("Error: Peek on empty stack.\n");
return -1;
}
return s->data[s->top - 1];
}
int main() {
Stack myStack;
stack_init(&myStack);
stack_push(&myStack, 5);
stack_push(&myStack, 10);
if (!stack_is_empty(&myStack)) {
printf("Stack is not empty.\n");
} else {
printf("Stack is empty.\n");
}
int popped = stack_pop(&myStack);
printf("Popped value: %d\n", popped);
int peeked = stack_peek(&myStack);
printf("Peeked value: %d\n", peeked);
return 0;
}
```
在这个一维数组实现中,当你需要更多的元素时,可以调整`MAX_SIZE`,但这会占用更多的内存空间。请注意,这种方法可能会导致效率较低,因为它在查找、插入和删除元素时都需要移动大量数据。