//头文件
#ifndef _Stack_h
struct Node;
typedef struct Node *PtrToNode;
typedef PtrToNode Stack;
int IsEmpty(Stack S);
Stack CreateStack(void);
void DisposeStack(Stack S);
void MakeEmpty(Stack S);
void Push(int X,Stack S);
int Top(Stack s);
void Pop(Stack S);
int TopPop(Stack S);
#endif
#include <stdio.h>
#include <stdlib.h>#include "stack.h"
struct Node
{
int element;
PtrToNode next;
}
//判断是否为空
{
return S->next==NULL;
}
//创建
{
Stack S;
S=(Stack)malloc(sizeof(struct Node));
if(S==NULL)
{
printf("error");
return;
}
S->next=NULL;
MakeEmpty(S);
return S;
}
//清空
{
if(S==NULL)
{
printf("error");
}
else
while(!IsEmpty(S))
{
Pop(S);
}
}
//入栈
{
PtrToNode TmpCell;
TmpCell=(PtrToNode)malloc(sizeof(struct Node));
if(TmpCell==NULL)
{
printf("error");
return;
}
TmpCell->element=X;
TmpCell->next=S->next;
S->next=TmpCell;
}
//获取栈顶元素
{
if(!IsEmpty(S))
return S->next->element;
printf("error");
return 0;
}
//出栈
{
PtrToNode FirstCell;
if(IsEmpty(S))
{
printf("error");
return;
}
FirstCell=S->next;
S->next=S->next->next;
free(FirstCell);
}
//出栈&获取栈顶元素
{
PtrToNode FirstCell;
if(IsEmpty(S))
{
printf("error");
return 0;
}
FirstCell=S->next;
S->next=S->next->next;
return FirstCell->element;
}
//主函数调用
{
}