FILO先进后出
用链表实现的话要用头插法
Init()
Push()
Pop()
Clear()
Destory()
GetCount()
GetTop()
IsEmpty()
用链表的头插法实现八个函数:
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int value;
struct node *pNext;
}Mystack;
typedef struct stack
{
int nCount;
Mystack*pTop;
}Stack;
void Init(Stack**pstack)
{
(*pstack) = (Stack*)malloc(sizeof(Stack));
(*pstack)->nCount = 0;
(*pstack)->pTop = NULL;
}
void Push(Stack*pstack,int num)
{
if(pstack == NULL)
{
printf("栈不存在!\n");
exit(1);
}
Mystack* pTemp = (Mystack*)malloc(sizeof(Mystack));
pTemp->value = num;
pTemp->pNext = pstack->pTop;
pstack->pTop = pTemp;
}
int Pop(Stack*pstack)
{
if(pstack == NULL)
{
printf("栈不存在!\n");
exit(1);
}
if(pstack->pTop == NULL)return -1;
Stack* Del = pstack->pTop;
int nNum = Del->value;
pstack->pTop = pstack->pTop->pNext;
free(Del);
Del = NULL;
return nNum;
}
void Clear(Stack*pstack)
{
if(pstack == NULL)
{
printf("栈不存在!\n");
exit(1);
}
while(pstack->nCount != 0)
{
Pop(pstack);
}
}
void Destory(Stack** pstack)
{
Clear(*pstack);
free(*pstack)
*pstack = NULL;
}
int GetCount(Stack*pstack)
{
if(pstack == NULL)
{
printf("栈不存在!\n");
exit(1);
}
return pstack->nCount;
}
Stack* GetTop(Stack*pstack)
{
if(pstack == NULL)
{
printf("栈不存在!\n");
exit(1);
}
return pstack->pTop;
}
int IsEmpty(Stack*pstack)
{
if(pstack == NULL)
{
printf("栈不存在!\n");
exit(1);
}
return pstack->nCount == 0?1:0;
}
int main()
{
Stack *pstack = NULL;
Init(&pstack);
Push(pstack,1);
Push(pstack,2);
Push(pstack,3);
printf("%d\n",Pop(pstack));
Destory(&pstack);
return 0;
}