C语言中编写顺序栈,实现顺序栈的基本运算
时间: 2024-12-19 15:17:40 浏览: 14
在C语言中,我们可以使用数组来实现一个简单的顺序栈(Sequential Stack)。以下是基本的顺序栈操作的实现:
1. 定义结构体(StackItem),包含数据元素和一个指向下一个元素的指针(这里假设整型):
```c
typedef struct {
int data;
int* top;
} Stack;
```
2. 初始化堆栈:
```c
Stack stack = {0, NULL};
```
这表示空栈,`top` 指向NULL。
3. 判断栈是否为空:
```c
int isEmpty(Stack s) {
return s.top == NULL;
}
```
4. 入栈(Push):
```c
void push(Stack* s, int value) {
if (isEmpty(*s)) {
s->data = value;
s->top = &s->data;
} else {
int* new_top = (int*)malloc(sizeof(int));
*new_top = value;
*s->top = *new_top; // 将当前栈顶的数据压入新位置
s->top = new_top; // 更新栈顶指针
}
}
```
5. 出栈(Pop):
```c
int pop(Stack* s) {
if (isEmpty(*s)) {
printf("Error: Stack is empty.\n");
return -1; // 或者抛出错误
} else {
int value = *s->top;
int* old_top = s->top;
s->top = (*s->top) == s->data ? NULL : (*s->top + 1);
free(old_top); // 释放内存
return value;
}
}
```
6. 查看栈顶元素(Peek)(非正式操作,因为没有实际修改栈的状态):
```c
int peek(Stack* s) {
if (isEmpty(*s)) {
printf("Error: Stack is empty.\n");
return -1;
} else {
return *s->top;
}
}
```
阅读全文