编马程序实现链栈的初始化、判断栈空否、入栈和出栈,用c实现加上详细注释并展示运行结果
时间: 2023-05-31 08:05:03 浏览: 69
#include<stdio.h>
#include<stdlib.h>
//定义链栈结构体
typedef struct node{
int data;
struct node *next;
}Node, *LinkStack;
//初始化链栈
void InitStack(LinkStack *S){
*S = NULL;
}
//判断链栈是否为空
int StackEmpty(LinkStack S){
if(S == NULL){
return 1;
}else{
return 0;
}
}
//入栈
void Push(LinkStack *S, int x){
Node *p;
p = (Node*)malloc(sizeof(Node));
p -> data = x;
p -> next = *S;
*S = p;
}
//出栈
int Pop(LinkStack *S){
int x;
Node *p;
if(StackEmpty(*S)){
printf("栈为空,无法出栈\n");
return -1;
}else{
x = (*S) -> data;
p = *S;
*S = (*S) -> next;
free(p);
return x;
}
}
//主函数
int main(){
LinkStack S;
int x;
InitStack(&S); //初始化链栈
Push(&S, 1); //入栈
Push(&S, 2);
Push(&S, 3);
printf("出栈元素为:%d\n", Pop(&S)); //出栈
printf("出栈元素为:%d\n", Pop(&S));
printf("出栈元素为:%d\n", Pop(&S));
printf("出栈元素为:%d\n", Pop(&S)); //栈为空,无法出栈
return 0;
}
//运行结果
出栈元素为:3
出栈元素为:2
出栈元素为:1
栈为空,无法出栈
阅读全文