用c语言编写两个双向栈,实现存储结构,初始化,入栈,出栈,main函数打印
时间: 2024-10-18 17:21:43 浏览: 44
在C语言中,我们通常使用链表来实现双向栈,因为链表的数据结构支持动态添加和删除元素,这对于实现栈的操作非常方便。这里是一个简单的示例,包含了双向链表栈的定义、初始化、入栈、出栈以及main函数中的操作:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义双向链表节点结构
typedef struct Node {
int data; // 数据域
struct Node* prev; // 指向前一个节点
struct Node* next; // 指向下一个节点
} StackNode;
// 双向栈的定义
typedef struct {
StackNode* top;
int size;
} DoublyLinkedListStack;
// 初始化栈
void initStack(DoublyLinkedListStack* stack) {
stack->top = NULL;
stack->size = 0;
}
// 入栈操作
void push(DoublyLinkedListStack* stack, int value) {
StackNode* newNode = (StackNode*)malloc(sizeof(StackNode));
if (newNode == NULL) {
printf("Memory allocation failed.\n");
return;
}
newNode->data = value;
newNode->prev = stack->top;
if (stack->top != NULL) {
stack->top->next = newNode;
}
stack->top = newNode;
stack->size++;
}
// 出栈操作
int pop(DoublyLinkedListStack* stack) {
if (stack->top == NULL) {
printf("Stack is empty.\n");
return -1;
} else {
int value = stack->top->data;
StackNode* temp = stack->top;
stack->top = stack->top->next;
free(temp);
stack->size--;
return value;
}
}
// 主函数示例,用于测试栈
int main() {
DoublyLinkedListStack myStack;
initStack(&myStack);
push(&myStack, 10);
push(&myStack, 20);
push(&myStack, 30);
while (myStack.top != NULL) {
int value = pop(&myStack);
printf("Popped value: %d\n", value);
}
return 0;
}
```
在这个例子中,`push()` 函数将元素添加到栈顶,`pop()` 函数从栈顶移除并返回元素值。在`main()` 函数中,我们首先初始化栈,然后通过连续调用 `push()` 函数填充数据,最后通过循环不断调用 `pop()` 函数,并打印出栈中取出的元素。
阅读全文