#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define ElementType int

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(ElementType X, Stack S); 
ElementType Top( Stack S); 
void Pop( Stack S);



struct  Node
{
        ElementType Element;
        PtrToNode next;
};


        int 
IsEmpty(Stack S)
{
        return S->next == NULL;
}


        Stack
CreateStack(void)
{
        Stack S;

        S = malloc(sizeof(struct Node));
        if(S == NULL)
                printf("ERROR");
        S->next = NULL;
        MakeEmpty(S);
        return S;
}

        void
MakeEmpty(Stack S)
{
        if( S == NULL)
                printf("ERROR  Empty");
        else
                while( !IsEmpty(S))
                        Pop(S);

}

        void
Push (ElementType X, Stack S)
{
        PtrToNode  TmpCell;

        TmpCell = malloc(sizeof(struct Node));

        if(TmpCell  == NULL)
                printf("ERROR ");
        else
        {
                TmpCell->Element = X;
                TmpCell->next  = S->next;
                S->next = TmpCell;
        }
}


    ElementType
Top(Stack S)
{
        if( !IsEmpty(S))
                return S->next->Element;
        return 0;
}

        void
Pop(Stack S)
{
        PtrToNode FirstCell;
        if( IsEmpty(S))
                printf("Stack Empty");
        else
        {
                FirstCell = S->next;
                S->next = S->next->next;
                free(FirstCell);
        }
}

        int
main()
{
        Stack S;
        int n,num,m;
        int i;
        S = CreateStack();
        printf( "Initialization complete.\n" );
        printf( "Please input the number of elements in the stack:\n" );
        scanf( "%d", &n );
        printf( "Please input %d elements push into stack:\n", n );
        for( i =0; i< n;i++)
        {
                scanf("%d",&num);
                Push(num,S);
        }

        printf( "Please input the numbers you want pop out from the stack(no more than:%d)\n", n );
        scanf("%d",&n);
        printf( "Pop out from the stack %d elements in turns:\n", n );
        for( i = 0; i < n; i++ )
        {
                m = Top( S );
                Pop( S );
                printf( "%3d",m );
        }
        printf( "\n" );
        return 0;
}

 

 

include <stdio.h>
#include <stdlib.h>
#include <string.h>


struct StackRecord;
typedef  struct StackRecord *Stack;

#define ElementType int


int IsEmpty( Stack S); 
int IsFull(Stack S); 
Stack CreateStack( int MaxElement);
void DisposeStack( Stack S); 
void MakeEmpty( Stack S); 
void Push(ElementType X, Stack S); 
ElementType Top( Stack S); 
void Pop(Stack S); 
ElementType TopAndPop( Stack S); 


#define EmptyTOS  -1 
#define MinStackSize  5 

struct StackRecord
{
        int Capactity;
        int TopOfStack;
        ElementType *Array;
};

Stack
CreateStack ( int MaxElement)
{
        Stack S;

        if( MaxElement <  MinStackSize)
                printf("ERROR");

        S = malloc(sizeof(struct StackRecord));

        if( S == NULL)
                printf("ERROR");

        S->Array = malloc(sizeof(ElementType) * MaxElement);

        if( S->Array == NULL)
                printf("OUT OF SPACE");

        S->Capactity = MaxElement;
        MakeEmpty(S);
        return S;
}

void
DisposeStack( Stack S)
{
        if( S != NULL)
        {
                free( S->Array);
                free(S);
        }
}
int
IsEmpty( Stack S)
{
        return S->TopOfStack == EmptyTOS;
}

void
MakeEmpty(Stack S)
{
        S->TopOfStack  = EmptyTOS;
}

int
IsFull(Stack S)
{
      return  S->TopOfStack = S->Capactity -1;
}

void
Push(ElementType X, Stack S)
{
        if(IsFull(S))
                printf("Stack  FULL");
        else
            S->Array[++ S->TopOfStack] = X;
}

ElementType
Top(Stack S)
{
        if(!IsEmpty(S))
            return  S->Array[S->TopOfStack];
         printf("Empty Stack");
         return 0;
}


void
Pop( Stack S)
{
        if(IsEmpty(S))
                printf("Empty Stack");
        else
                S->TopOfStack --;
}

ElementType
TopAndPop( Stack S)
{
         if(!IsEmpty(S))
                 return S->Array[S->TopOfStack --];
         printf("Empty Stack");
         return 0;
}



int
main()
{
        Stack S;
        int n,num,m;
        int i;
        S = CreateStack(10);
        printf( "Initialization complete.\n" );
        printf( "Please input the number of elements in the stack:\n" );
        scanf( "%d", &n );
        printf( "Please input %d elements push into stack:\n", n );
        for( i = 0; i < n; i++ )
        {
                scanf( "%d", &num );
                Push( num, S );
        }
        printf( "Top of the stack:%d\n", Top( S ) );
        printf( "Please input the numbers you want pop out from the stack(no more than %d):\n", n );
        scanf( "%d", &n );
        printf( "Pop out from the stack %d elements in turns:\n", n );
        for( i = 0; i < n; i++ )
        {
                m = TopAndPop( S );
                printf( "%3d", m );
        }
        printf( "\n" );
        return 0;
} 

 

posted @ 2012-09-14 13:57  风去无痕  阅读(132)  评论(0编辑  收藏  举报