链栈的基本操作纯C语言
时间: 2023-06-19 17:04:57 浏览: 48
链栈是一种基于链表实现的栈结构,其基本操作包括入栈、出栈、判断栈是否为空和获取栈顶元素等。
首先,我们需要定义链栈的节点结构体:
```c
typedef struct node {
int data; // 数据域
struct node *next; // 指向下一节点的指针
} Node;
```
然后定义链栈结构体:
```c
typedef struct {
Node *top; // 栈顶指针
int size; // 栈内元素个数
} LinkedStack;
```
接下来,我们可以实现链栈的基本操作:
1. 初始化链栈
```c
void initStack(LinkedStack *stack) {
stack->top = NULL;
stack->size = 0;
}
```
2. 判断链栈是否为空
```c
int isEmpty(LinkedStack *stack) {
return stack->top == NULL;
}
```
3. 入栈操作
```c
void push(LinkedStack *stack, int value) {
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = value;
newNode->next = stack->top;
stack->top = newNode;
stack->size++;
}
```
4. 出栈操作
```c
int pop(LinkedStack *stack) {
if (isEmpty(stack)) {
printf("Stack is empty.\n");
return -1;
}
int value = stack->top->data;
Node *temp = stack->top;
stack->top = stack->top->next;
stack->size--;
free(temp);
return value;
}
```
5. 获取栈顶元素
```c
int getTop(LinkedStack *stack) {
if (isEmpty(stack)) {
printf("Stack is empty.\n");
return -1;
}
return stack->top->data;
}
```
完整的代码如下所示:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data; // 数据域
struct node *next; // 指向下一节点的指针
} Node;
typedef struct {
Node *top; // 栈顶指针
int size; // 栈内元素个数
} LinkedStack;
void initStack(LinkedStack *stack) {
stack->top = NULL;
stack->size = 0;
}
int isEmpty(LinkedStack *stack) {
return stack->top == NULL;
}
void push(LinkedStack *stack, int value) {
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = value;
newNode->next = stack->top;
stack->top = newNode;
stack->size++;
}
int pop(LinkedStack *stack) {
if (isEmpty(stack)) {
printf("Stack is empty.\n");
return -1;
}
int value = stack->top->data;
Node *temp = stack->top;
stack->top = stack->top->next;
stack->size--;
free(temp);
return value;
}
int getTop(LinkedStack *stack) {
if (isEmpty(stack)) {
printf("Stack is empty.\n");
return -1;
}
return stack->top->data;
}
int main() {
LinkedStack stack;
initStack(&stack);
// 入栈
push(&stack, 1);
push(&stack, 2);
push(&stack, 3);
// 获取栈顶元素并输出
printf("Top element: %d\n", getTop(&stack));
// 出栈
printf("Pop: %d\n", pop(&stack));
printf("Pop: %d\n", pop(&stack));
printf("Pop: %d\n", pop(&stack));
// 判断栈是否为空
printf("Is empty: %d\n", isEmpty(&stack));
return 0;
}
```