c语言双向链表实现栈
时间: 2024-10-07 14:04:02 浏览: 41
双向链表(Double-Linked-List)
在 C 语言中,双向链表可以用来实现栈数据结构,因为它们支持高效的插入和删除操作,即“后进先出”(LIFO,Last In First Out)。以下是使用结构体、指针以及自定义函数实现一个基本的双向链表栈的基本步骤:
1. **定义节点结构**:
```c
typedef struct Node {
int data;
struct Node* prev; // 指向前一个节点
struct Node* next; // 指向下一个节点
} StackNode;
```
2. **定义栈结构**:
```c
typedef StackNode* Stack;
Stack top = NULL; // 栈顶指针,初始为空
int stack_size; // 当前栈大小
```
3. **初始化栈**:
```c
void initStack(Stack* stack) {
*stack = NULL;
stack_size = 0;
}
```
4. **入栈(压栈)**:
```c
void push(Stack* stack, int value) {
StackNode* newNode = (StackNode*)malloc(sizeof(StackNode));
newNode->data = value;
newNode->next = top;
if (top != NULL)
top->prev = newNode;
top = newNode;
stack_size++;
}
```
5. **出栈(弹栈)**:
```c
int pop(Stack* stack) {
if (isEmpty(stack)) {
printf("Stack is empty.\n");
return -1;
}
StackNode* temp = top;
int value = temp->data;
top = top->next;
if (top) top->prev = NULL;
free(temp);
stack_size--;
return value;
}```
6. **其他辅助函数**:
- `isEmpty(stack)` 判断栈是否空
- `size(stack)` 返回当前栈的元素个数
阅读全文