//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); }