C语言如何定义一个栈
时间: 2024-11-10 13:12:22 浏览: 3
在C语言中,定义一个栈通常需要以下几个步骤:
1. **选择数据结构**: 栈是一种线性数据结构,常见的数据结构有数组和链表。这里我们以动态内存分配的链表为例,因为它的大小可以根据需要自动调整。
```c
typedef struct Node {
int data; // 存储的数据元素
struct Node* next; // 指向下一个节点的指针
} StackNode;
```
2. **创建栈结构**:
定义一个名为Stack的结构体,包含一个指向栈顶的指针top,表示栈的状态。
```c
struct Stack {
StackNode* top; // 栈顶指针
int size; // 栈的当前容量
};
```
3. **初始化**:
初始化函数用于创建一个新的空栈,并设置top指针为NULL。
```c
void createStack(Stack** stack) {
*stack = (Stack*)malloc(sizeof(Stack));
(*stack)->top = NULL;
(*stack)->size = 0;
}
```
4. **操作栈**:
- `push()`:将元素添加到栈顶。
- `pop()`:从栈顶删除并返回元素。
- `isEmpty()`:检查栈是否为空。
- `isFull()`:判断栈是否已满,可以基于当前size和预设的最大容量来计算。
```c
// 添加元素
void push(Stack* s, int value) {
StackNode* newNode = (StackNode*)malloc(sizeof(StackNode));
newNode->data = value;
newNode->next = s->top;
s->top = newNode;
if (s->size == s->size_limit) { // 防止溢出
printf("Stack is full.\n");
}
s->size++;
}
// 删除并返回栈顶元素
int pop(Stack* s) {
if (isEmpty(s)) {
printf("Stack is empty.\n");
return -1; // 或者抛出错误
}
StackNode* temp = s->top;
int value = temp->data;
s->top = s->top->next;
free(temp); // 释放已删除节点
s->size--;
return value;
}
// 判断栈是否为空
int isEmpty(Stack* s) {
return s->top == NULL;
}
// 判断是否已满(假设最大容量是MAX_SIZE)
bool isFull(Stack* s) {
return s->size == s->size_limit;
}
```
阅读全文