编写一个程序,实现链栈的各种基本操作
时间: 2024-05-07 20:19:03 浏览: 112
链栈(Linked Stack)是一种基于链表实现的栈,其特点是插入和删除操作只在链表的头部进行,因此操作效率较高。下面是链栈的基本操作实现。
首先,我们需要定义链栈的节点结构体:
```c
typedef struct Node{
int data; // 数据域
struct Node* next; // 指针域
}Node;
typedef struct Stack{
Node* top; // 栈顶指针
}Stack;
```
然后,我们可以实现链栈的基本操作:
1. 初始化链栈
```c
void initStack(Stack* s) {
s->top = NULL;
}
```
2. 判断链栈是否为空
```c
int isEmpty(Stack* s) {
return s->top == NULL;
}
```
3. 入栈
```c
void push(Stack* s, int data) {
Node* newNode = (Node*) malloc(sizeof(Node)); // 创建新节点
newNode->data = data;
newNode->next = s->top; // 新节点的next指向原来的栈顶节点
s->top = newNode; // 栈顶指针指向新节点
}
```
4. 出栈
```c
int pop(Stack* s) {
if (isEmpty(s)) { // 如果栈为空,返回0
return 0;
}
int data = s->top->data; // 取出栈顶元素
Node* temp = s->top; // 保存栈顶节点的指针
s->top = s->top->next; // 栈顶指针指向下一个节点
free(temp); // 释放原来的栈顶节点
return data;
}
```
5. 获取栈顶元素
```c
int top(Stack* s) {
if (isEmpty(s)) { // 如果栈为空,返回0
return 0;
}
return s->top->data;
}
```
6. 清空链栈
```c
void clearStack(Stack* s) {
while (!isEmpty(s)) { // 循环弹出栈顶元素
pop(s);
}
}
```
完整代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node{
int data; // 数据域
struct Node* next; // 指针域
}Node;
typedef struct Stack{
Node* top; // 栈顶指针
}Stack;
// 初始化链栈
void initStack(Stack* s) {
s->top = NULL;
}
// 判断链栈是否为空
int isEmpty(Stack* s) {
return s->top == NULL;
}
// 入栈
void push(Stack* s, int data) {
Node* newNode = (Node*) malloc(sizeof(Node)); // 创建新节点
newNode->data = data;
newNode->next = s->top; // 新节点的next指向原来的栈顶节点
s->top = newNode; // 栈顶指针指向新节点
}
// 出栈
int pop(Stack* s) {
if (isEmpty(s)) { // 如果栈为空,返回0
return 0;
}
int data = s->top->data; // 取出栈顶元素
Node* temp = s->top; // 保存栈顶节点的指针
s->top = s->top->next; // 栈顶指针指向下一个节点
free(temp); // 释放原来的栈顶节点
return data;
}
// 获取栈顶元素
int top(Stack* s) {
if (isEmpty(s)) { // 如果栈为空,返回0
return 0;
}
return s->top->data;
}
// 清空链栈
void clearStack(Stack* s) {
while (!isEmpty(s)) { // 循环弹出栈顶元素
pop(s);
}
}
int main() {
Stack s;
initStack(&s);
push(&s, 1);
push(&s, 2);
push(&s, 3);
printf("栈顶元素:%d\n", top(&s)); // 3
printf("出栈元素:%d\n", pop(&s)); // 3
printf("出栈元素:%d\n", pop(&s)); // 2
printf("出栈元素:%d\n", pop(&s)); // 1
clearStack(&s);
return 0;
}
```
阅读全文