链表实现栈的C语言代码
时间: 2023-07-11 21:06:24 浏览: 103
栈的链表实现与测试代码(C语言)
以下是链表实现栈的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表结点
typedef struct Node{
int data;
struct Node* next;
} Node;
// 定义栈结构体
typedef struct Stack{
Node* top;
int size;
} Stack;
// 初始化栈
void initStack(Stack* s){
s->top = NULL;
s->size = 0;
}
// 判断栈是否为空
int isEmpty(Stack* s){
return s->size == 0;
}
// 入栈操作
void push(Stack* s, int data){
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = s->top;
s->top = newNode;
s->size++;
}
// 出栈操作
int pop(Stack* s){
if(isEmpty(s)){
printf("栈为空,无法出栈");
return -1;
}
int data = s->top->data;
Node* temp = s->top;
s->top = s->top->next;
free(temp);
s->size--;
return data;
}
// 获取栈顶元素
int peek(Stack* s){
if(isEmpty(s)){
printf("栈为空,无法获取栈顶元素");
return -1;
}
return s->top->data;
}
int main(){
Stack s;
initStack(&s);
push(&s, 1);
push(&s, 2);
push(&s, 3);
printf("栈顶元素为:%d\n", peek(&s));
printf("出栈元素为:%d\n", pop(&s));
printf("出栈元素为:%d\n", pop(&s));
printf("出栈元素为:%d\n", pop(&s));
printf("栈是否为空:%d\n", isEmpty(&s));
return 0;
}
```
在上面的代码中,我们使用了链表来实现栈。在栈的初始化函数中,我们将栈顶指针置为 NULL,并将栈的大小设为 0。在入栈操作时,我们创建一个新的链表结点,将其插入到链表的头部,并将栈顶指针指向该结点。在出栈操作时,我们首先判断栈是否为空,如果为空则输出错误信息;否则,我们取出栈顶元素,并将栈顶指针指向下一个结点。在获取栈顶元素时,我们同样需要判断栈是否为空。
阅读全文