带头节点的链栈的基本操作
#include <stdio.h>
#include<stdlib.h>
#define true 1;
#define false 0;
typedef struct StackNode{
int data;
struct StackNode *next;
}StackNode;
StackNode *InitStack(StackNode *S){
S = (StackNode *)malloc(sizeof(StackNode));
if(S == NULL){
printf("分配头节点失败\n");
return false;
}
printf("初始化成功\n");
S->next = NULL;
return S;
}
int Push(StackNode *S,int n){
StackNode *c;
c = (StackNode *)malloc(sizeof(StackNode));
if(c == NULL){
printf("进栈分配内存失败\n");
return -1;
}
c->data = n;
c->next = S->next;
S->next = c;
printf("数字%d已进栈\n",n);
return 0;
}
StackNode * Pop(StackNode *S){
StackNode *p,*s;
if(S->next == NULL){
printf("栈空,无法进行出栈操作\n");
return false;
}
p=S;
s=p->next;
p->next=p->next->next;
free(s);
printf("栈顶元素出栈成功\n");
return S;
}
int GetElem(StackNode *S){
if(S->next == NULL){
printf("栈空,无法取栈顶元素\n");
return false;
}
int a=S->next->data;
printf("栈顶元素为:%d\n",a);
return a;
}
int Display(StackNode *S){
StackNode *p;
p = S ;
printf("此链栈内元素为(顺序为由栈顶往栈底依次排列):");
while (p->next) {
printf("%d",p->next->data);
p=p->next;
}
printf("\n");
return true;
}
int main(){
StackNode *S;
int a;
S=InitStack(S);
Push(S,7);
Push(S,3);
Push(S,5);
a=GetElem(S);
Display(S);
Pop(S);
Display(S);
}