编写程序,实现链栈的创建、进栈和出栈等基本操作算法。
时间: 2024-01-24 20:17:07 浏览: 67
栈的创建、入栈、出栈算法
以下是链栈的基本操作算法示例,使用C语言实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链栈节点
typedef struct StackNode {
int data;
struct StackNode* next;
} StackNode;
// 定义链栈结构体
typedef struct LinkStack {
StackNode* top;
int size;
} LinkStack;
// 初始化链栈
LinkStack* initLinkStack() {
LinkStack* stack = (LinkStack*)malloc(sizeof(LinkStack));
stack->top = NULL;
stack->size = 0;
return stack;
}
// 判断链栈是否为空
int isEmpty(LinkStack* stack) {
return stack->size == 0;
}
// 获取链栈大小
int getSize(LinkStack* stack) {
return stack->size;
}
// 进栈
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(isEmpty(stack)) {
printf("栈已空,无法出栈。\n");
return -1;
}
StackNode* node = stack->top;
int data = node->data;
stack->top = node->next;
free(node);
stack->size--;
return data;
}
// 获取栈顶元素
int getTop(LinkStack* stack) {
if(isEmpty(stack)) {
printf("栈已空,无法获取栈顶元素。\n");
return -1;
}
return stack->top->data;
}
// 打印链栈元素
void printLinkStack(LinkStack* stack) {
printf("链栈元素:");
StackNode* node = stack->top;
while(node != NULL) {
printf("%d ", node->data);
node = node->next;
}
printf("\n");
}
int main() {
LinkStack* stack = initLinkStack();
// 进栈
push(stack, 1);
push(stack, 2);
push(stack, 3);
// 打印链栈元素
printLinkStack(stack);
// 获取栈顶元素
printf("栈顶元素:%d\n", getTop(stack));
// 出栈
int data = pop(stack);
printf("出栈元素:%d\n", data);
// 打印链栈元素
printLinkStack(stack);
// 获取栈顶元素
printf("栈顶元素:%d\n", getTop(stack));
// 销毁链栈
StackNode* node = stack->top;
while(node != NULL) {
StackNode* temp = node;
node = node->next;
free(temp);
}
free(stack);
return 0;
}
```
运行结果:
```
链栈元素:3 2 1
栈顶元素:3
出栈元素:3
链栈元素:2 1
栈顶元素:2
```
阅读全文