数据结构,努力。
#include "stdlib.h"
typedef struct Node *PtrToNode;
typedef PtrToNode Stack;
typedef struct Node
{
int Element;
PtrToNode Next;
};
int IsEmpty(Stack SS);
Stack CreateStack();
void DisposeStack(Stack SS);
void MakeEmpty(Stack SS);
void Push(int X,Stack SS);
int Top(Stack SS);//返回栈顶元素
void Pop(Stack SS);//出栈
int IsEmpty(Stack SS)
{
return SS->Next==NULL;
}
Stack CreateStack()
{
Stack SS=malloc(sizeof(struct Node));
if (SS == NULL){
printf("size is not enough\n");
}
SS->Next=NULL;
MakeEmpty(SS);
return SS;
}
void MakeEmpty(Stack SS)
{
if (SS==NULL){
printf("it is empty\n");
}
else{
while (!IsEmpty(SS)){
Pop(SS);
}
}
}
void Push(int X,Stack SS)
{
PtrToNode Tmp;
Tmp=malloc(sizeof(struct Node));
if (Tmp!=NULL){
Tmp->Element=X;
Tmp->Next=SS->Next;
SS->Next=Tmp;
}
else{
printf("out of space\n");
}
}
void Pop(Stack SS)
{
if (IsEmpty(SS)){
printf("it is empty\n");
}
else{
PtrToNode Tmp=SS->Next;
SS->Next=Tmp->Next;
free(Tmp);
}
}
int Top(Stack SS)
{
if (IsEmpty(SS)){
printf("it is empty\n");
return 0;
}
else{
return SS->Next->Element;
}
}
int main()
{
Stack SS=CreateStack();
int i;
for (i=0;i<5;i++){
Push(i,SS);
}
while (!IsEmpty(SS)){
printf("%d\n",Top(SS));
Pop(SS);
}
return 0;
}