双向栈的初始化,判空判满,入栈以及出栈的代码 用C语言实现
时间: 2024-10-12 11:14:38 浏览: 107
双向栈(也称为双端队列,Deque)允许在两端进行插入和删除操作。在C语言中,我们通常使用动态数组或者链表来实现它。这里是一个简单的链式双向栈的结构和基本操作的示例:
```c
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* prev;
struct Node* next;
} StackNode;
typedef struct DStack {
StackNode* top; // 栈顶指针
StackNode* bottom; // 栈底指针
int size; // 栈元素数量
} DStack;
// 初始化空栈
DStack* initDStack() {
DStack* stack = (DStack*)malloc(sizeof(DStack));
if (!stack) {
printf("Memory allocation failed.\n");
return NULL;
}
stack->top = stack->bottom = NULL;
stack->size = 0;
return stack;
}
// 判空
int isEmpty(DStack* stack) {
return stack->top == NULL;
}
// 判满
int isFull(DStack* stack) {
return stack->size == MAX_SIZE; // 假设MAX_SIZE是预设的最大容量
}
// 入栈(数据放在栈顶)
void push(DStack* stack, int value) {
StackNode* newNode = (StackNode*)malloc(sizeof(StackNode));
if (!newNode) {
printf("Memory allocation failed.\n");
return;
}
newNode->data = value;
newNode->prev = stack->top;
if (stack->top != NULL)
stack->top->next = newNode;
else
stack->bottom = newNode;
stack->top = newNode;
stack->size++;
}
// 出栈(弹出栈顶元素)
int pop(DStack* stack) {
if (isEmpty(stack)) {
printf("Stack is empty.\n");
return -1; // 返回错误码,表示栈为空
}
StackNode* poppedNode = stack->top;
stack->top = stack->top->next;
if (stack->top != NULL)
stack->top->prev = NULL;
else
stack->bottom = NULL;
free(poppedNode);
stack->size--;
return poppedNode->data;
}
```
阅读全文
相关推荐
![7z](https://img-home.csdnimg.cn/images/20241231044736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![docx](https://img-home.csdnimg.cn/images/20241231044901.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![txt](https://img-home.csdnimg.cn/images/20241231045021.png)
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)