链式栈总代码
时间: 2023-07-10 16:20:56 浏览: 41
完整的链式栈代码如下所示:
```
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
// 定义链式栈节点结构体
typedef struct StackNode
{
int data; // 数据域
struct StackNode* next; // 指向下一个节点的指针
}StackNode;
// 定义链式栈结构体
typedef struct LinkStack
{
StackNode* top; // 指向栈顶节点的指针
int size; // 栈的大小
}LinkStack;
// 入栈操作
void Push(LinkStack* stack, int data)
{
StackNode* node = (StackNode*)malloc(sizeof(StackNode));
node->data = data;
node->next = stack->top;
stack->top = node;
stack->size++;
}
// 出栈操作
int Pop(LinkStack* stack)
{
if (stack->size == 0)
return -1; // 栈为空,返回-1表示出错
StackNode* node = stack->top;
int data = node->data;
stack->top = stack->top->next;
free(node);
stack->size--;
return data;
}
// 取栈顶元素
int Top(LinkStack* stack)
{
if (stack->size == 0)
return -1; // 栈为空,返回-1表示出错
return stack->top->data;
}
// 判断栈是否为空
bool IsEmpty(LinkStack* stack)
{
return stack->size == 0;
}
// 主函数
int main()
{
LinkStack stack; // 定义链式栈
stack.top = NULL; // 初始化栈顶指针
stack.size = 0; // 初始化栈的大小为0
// 测试入栈操作
Push(&stack, 1);
Push(&stack, 2);
Push(&stack, 3);
// 测试出栈操作
int data = Pop(&stack);
if (data != -1)
printf("出栈元素为:%d\n", data);
// 测试取栈顶元素
int top_data = Top(&stack);
if (top_data != -1)
printf("栈顶元素为:%d\n", top_data);
// 测试判断栈是否为空
bool is_empty = IsEmpty(&stack);
if (is_empty)
printf("栈为空\n");
else
printf("栈不为空,大小为:%d\n", stack.size);
return 0;
}
```
上面的代码实现了链式栈的基本操作,包括入栈、出栈、取栈顶元素和判断栈是否为空。可以根据需要进行修改和扩展。