//Stack.h
#ifndef _STACK_H_
#define ElementType int
struct Node;
typedef struct Node *PtrToNode;
typedef PtrToNode Stack;
struct Node
{
ElementType Element;
PtrToNode Next;
};
int IsEmpty(Stack S);
Stack CreateStack(void);
void MakeEmpty(Stack S);
void Push(ElementType X,Stack S);
void Pop(Stack S);
ElementType Top(Stack S);
#endif
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//Stack.c
#include<stdio.h>
#include "Stack.h"
#include<stdlib.h>
int IsEmpty(Stack S)
{
return S->Next==NULL;
}
Stack CreateStack(void)
{
Stack S;
S=malloc(sizeof(struct Node));
if(S==NULL)
{
printf("out of space\n");
}
S->Next=NULL;
return S;
}
void MakeEmpty(Stack S)
{
if(S==NULL)
{
printf("Must use CreateStack first");
}
}
void Push(ElementType X,Stack S)
{
Stack TmpCell;
TmpCell=malloc(sizeof(struct Node));
if(TmpCell==NULL)
{
printf("out of space\n");
}
else
{
TmpCell->Next=S->Next;
TmpCell->Element=X;
S->Next=TmpCell;
}
}
void Pop(Stack S)
{
PtrToNode TmpCell;
if(S==NULL)
{
printf("Empty of stack\n");
}
else
{
TmpCell=S->Next;
S->Next=TmpCell->Next;
free(TmpCell);
}
}
ElementType Top(Stack S)
{
if(S==NULL)
{
printf("Empty of stack\n");
return 0;
}
else
{
return S->Next->Element;
}
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//main.c
#include<stdio.h>
#include "Stack.h"
int main(void)
{
Stack S;
ElementType x;
S=CreateStack();
Push(1,S);
x=Top(S);
printf("%d",x);
}