用c语言建立链栈,并在链栈上实现入栈和出栈操作
时间: 2024-02-01 20:16:13 浏览: 80
好的,以下是用C语言实现链栈的代码,包括入栈和出栈操作:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链栈结构体
typedef struct node {
int data;
struct node *next;
} Node;
// 定义链栈指针类型
typedef Node *Stack;
// 初始化链栈
void initStack(Stack *s) {
*s = NULL;
}
// 判断链栈是否为空
int isEmpty(Stack s) {
return s == NULL;
}
// 入栈操作
void push(Stack *s, int data) {
// 创建新节点
Node *newNode = (Node *) malloc(sizeof(Node));
newNode->data = data;
newNode->next = *s;
*s = newNode;
}
// 出栈操作
int pop(Stack *s) {
if (isEmpty(*s)) {
printf("Stack is empty!\n");
exit(1);
}
int data = (*s)->data;
Node *temp = *s;
*s = (*s)->next;
free(temp);
return data;
}
// 测试链栈操作
int main() {
Stack s;
initStack(&s);
push(&s, 1);
push(&s, 2);
push(&s, 3);
printf("%d\n", pop(&s)); // 3
printf("%d\n", pop(&s)); // 2
printf("%d\n", pop(&s)); // 1
printf("%d\n", pop(&s)); // Stack is empty!
return 0;
}
```
在上面的代码中,我们定义了一个链栈结构体 `Node`,其中包含一个 `data` 属性和一个指向下一个节点的指针 `next`。然后我们定义了链栈指针类型 `Stack`,以及链栈的初始化、判断是否为空、入栈和出栈操作。
在 `main` 函数中,我们将链栈初始化为空,然后依次入栈 1、2、3。接着我们依次出栈,输出结果为 3、2、1。最后再次尝试出栈,由于栈为空,程序会输出提示信息并退出。
希望这段代码能够帮助你理解链栈的实现过程。
阅读全文