链式栈

/*============================================================================
 Name        : Exercise.cpp
 Author      : Haier
 Version     : 1.01
 Copyright   : Copyright (c) 2014
 Description : HeapAdjust in C, Ansi-style, Compile by Code:Block
 ============================================================================*/
#include <stdio.h>
#include <stdlib.h>


typedef struct StackNode
{
    int  Data;
    struct StackNode *Next;
}StackNode,*StackNodePtr;

typedef struct LinkStack
{
    StackNodePtr Top;
    int Count;
}LinkStack;

/****************************************************************************
* Function     : InitStack
* Description  : Initialize Stack
* Input        : Stack Pointer
* Return       : Void
*****************************************************************************/
void InitStack(LinkStack* MyStack)
{

    if(MyStack->Top=(StackNodePtr)malloc(sizeof(StackNode)))
    {
        MyStack->Top=NULL;
        MyStack->Count=0;
    }

}
/****************************************************************************
* Function     : DestoryStack
* Description  : Destory Stack
* Input        : Stack Pointer
* Return       : Void
*****************************************************************************/
void DestoryStack(LinkStack* MyStack)
{
    StackNode *Temp;

    while(Temp=MyStack->Top)
    {
        MyStack->Top=Temp->Next;
        free(Temp);
        MyStack->Count--;
    }
}
/****************************************************************************
* Function     : Push
* Description  : Push Stack
* Input        : Stack Pointer,Member to Push
* Return       : Success:1,Fail:0
*****************************************************************************/
int Push(LinkStack *MyStack,int Member)
{
    StackNode *Temp;

    if(Temp=(StackNodePtr)malloc(sizeof(StackNode)))
    {
        Temp->Data=Member;
        Temp->Next=MyStack->Top;
        MyStack->Top=Temp;
        MyStack->Count++;

        return 1;
    }
    else
    {
        return 0;
    }
}
/****************************************************************************
* Function     : Pop
* Description  : Pop Stack
* Input        : Stack Pointer,Member to Pop
* Return       : Success:1,Fail:0
*****************************************************************************/
int Pop(LinkStack* MyStack,int Member)
{

    StackNode *Temp;

    if(MyStack->Count==0)
    {
        printf("Empty !");
        return 0;
    }

    Member=MyStack->Top->Data;
    Temp=MyStack->Top;
    MyStack->Top=Temp->Next;
    free(Temp);
    MyStack->Count--;

    return Member;
}
/****************************************************************************
* Function     : GetTop
* Description  : Get Top Of Stack
* Input        : Stack Pointer
* Return       : The Member Of Top Of Stack
*****************************************************************************/
int GetTop(LinkStack* MyStack)
{
    return (MyStack->Top->Data);
}
/****************************************************************************
* Function     : GetNumberOfElementsOfStack
* Description  : Get Number Of Elements Of Stack
* Input        : Stack Pointer
* Return       : The Nember Of Current Stack
*****************************************************************************/
int GetNumberOfElementsOfStack(LinkStack* MyStack)
{
    return (MyStack->Count);
}
/****************************************************************************
* Function     : IsEmptyStack
* Description  : Judge The Stack is Empty or Not
* Input        : Stack Pointer,Member to Pop
* Return       : IsEmpthStack:1,NotIsEmpthStack:0
*****************************************************************************/
int IsEmptyStack(LinkStack* MyStack)
{
    if(MyStack->Count==0)
    {
        return 1;
    }

    return 0;
}


int main()
{
    LinkStack MyStack;
    int i,Member;;

    InitStack(&MyStack);

    printf("Test for Push: \n");
    for(i=0; i<10; i++)
    {
        Push(&MyStack,i);
    }

    printf("\nTest for Pop: %d",Pop(&MyStack,9));


    printf("\nTest for GetTop: ");
    printf("%d\n",GetTop(&MyStack));

    printf("\nTest for GetNumberOfElementsOfStack: ");
    printf("%d\n",GetNumberOfElementsOfStack(&MyStack));

    printf("\nTest for IsEmptyStack: ");
    printf("%d\n",IsEmptyStack(&MyStack));

    printf("\nTest for DestoryStack: ");
    DestoryStack(&MyStack);
    printf("%d\n",IsEmptyStack(&MyStack));
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值