下面我们来学习一下链栈的创建和基本操作的实现吧。首先链栈和单链表大致结构相同,大致思路可以采用创建单链表时的思路。单链表的创建详细请看《数据结构(C语言第二版)单链表的创建2》,这里就不详细讲了,接下来我们开始代码实现吧!~
#include <stdio.h>
#include <stdlib.h>
//定义结构体
typedef struct Sqstrack{
int data;
struct Sqstrack *top;
struct Sqstrack *base;
}Sqstrack;
//初始化
void InitStrack(Sqstrack *S){
S->top=S->base=NULL;
}
//压栈
void Push(Sqstrack *S,int elem){
Sqstrack *new_code=(Sqstrack*)malloc(sizeof(Sqstrack));
if (S==NULL){
printf("分配失败");
return;
} else {
new_code->data = elem;
new_code->top=S->top;
S->top=new_code;
}
}
//弹栈
void Pop(Sqstrack *S){
if(S->base==S->top){
printf("出栈失败");
return;
}
Sqstrack* temp=S->top;
S->top=temp->top;
free(temp);
}
//取栈顶元素
void GetTop(Sqstrack *S){
if (S->top==NULL){
printf("栈空,取栈失败");
return;
} else{
printf("%d\n", S->top->data);
}
}
//摧毁链栈
void Destorystrack(Sqstrack *S){
while (S->top != NULL){
Pop(S);
}
}
int main(){
Sqstrack L;
InitStrack(&L);
Push(&L,10);
Push(&L,20);
Push(&L,80);
// GetTop(&L);
Destorystrack(&L);
GetTop(&L);
return 0;
}