链栈操作
Posted timesi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链栈操作相关的知识,希望对你有一定的参考价值。
//链栈操作(带头节点)
#include <stdio.h>
#include <malloc.h>
typedef struct LinkStack{
int data;
struct LinkStack* next;
}Stack,*LStack;
Stack * InitStack(LStack *); //初始化
void Push(LStack , int); //入栈
void Pop(LStack); //出栈
void output(LStack); //遍历
int main(void){
LStack S;
InitStack(&S);
if(S->next == NULL){
printf("初始化成功!
");
}else{
printf("初始化失败!
");
}
Push(S,1);
Push(S,2);
Push(S,3);
Push(S,4);
Push(S,5);
printf("当前链栈中的数据是:");
output(S);
printf("
");
Pop(S);
Pop(S);
Pop(S);
printf("当前链栈中的数据是:");
output(S);
return 0;
}
//初始化
Stack * InitStack(LStack *S){
(*S) = (Stack *)malloc(sizeof(Stack));
(*S)->next = NULL;
return (*S);
}
//入栈
void Push(LStack S , int e){
Stack *p = (Stack *)malloc(sizeof(Stack));
p->data = e;
p->next = S->next;
S->next = p;
}
//出栈
void Pop(LStack S){
Stack *p = S->next;
int e;
if(S->next != NULL){
e = p->data;
printf("当前弹出数据是:%d
",e);
S->next = p->next;
printf("当前栈顶数据是:%d
",S->next->data);
free(p);
}else{
printf("栈为空!
");
}
}
//遍历
void output(LStack S){
Stack *p = S->next;
if(p == NULL){
printf("栈为空!");
}else{
while(p != NULL){
printf("%d ",p->data);
p = p->next;
}
}
}
以上是关于链栈操作的主要内容,如果未能解决你的问题,请参考以下文章