数据结构链栈 c语言
时间: 2024-09-26 16:00:58 浏览: 39
链栈是一种线性数据结构,它遵循“先进后出”(Last In First Out, LIFO)的原则。在C语言中,你可以通过定义一个节点结构体和两个指针(顶指针top和栈底指针bottom)来实现链栈。链栈的基本操作包括:
1. **创建栈**:初始化一个空链栈,top和bottom都指向NULL。
2. **入栈(push)**:将新元素添加到栈顶,更新top指针指向新的节点。
3. **出栈(pop)**:如果栈非空,删除并返回栈顶元素,然后调整top指针。
4. **查看栈顶元素(peek)**:获取栈顶元素,但不移除,仅查看。
5. **判断栈是否为空(is_empty)**:检查top是否等于bottom,如果相等则为空。
6. **获取栈大小(get_size)**:在实际应用中可能需要维护一个额外的数据成员记录当前元素的数量,因为链表没有固定大小。
以下是一个简单的链栈实现示例:
```c
typedef struct Node {
int data;
struct Node* next;
} StackNode;
typedef struct {
StackNode* top;
int size; // 栈大小
} Stack;
Stack* stack_create() {
Stack* s = (Stack*)malloc(sizeof(Stack));
s->top = NULL;
s->size = 0;
return s;
}
void stack_push(Stack* s, int value) {
StackNode* newNode = (StackNode*)malloc(sizeof(StackNode));
newNode->data = value;
newNode->next = s->top;
s->top = newNode;
s->size++;
}
int stack_pop(Stack* s) {
if (s->top == NULL)
return -1; // 栈空处理
int poppedValue = s->top->data;
StackNode* temp = s->top;
s->top = s->top->next;
free(temp);
s->size--;
return poppedValue;
}
// 其他辅助函数...
```
阅读全文