/*============================================================================
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));
}
链式栈
最新推荐文章于 2024-09-20 02:15:00 发布