基于c语言实现的栈基本操作,包括:
- 创建
- 入栈
- 出栈
- 清空
- 销毁
- 得到栈内元素个数
- 得到栈顶元素
- 判断栈是否为空
代码如下(gcc编译器):
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int nValue;
struct node *pNext;
}Node;
typedef struct stack
{
Node *pTop;
int Count;
}Stack;
void Init(Stack **pStack)
{
*pStack = (Stack*)malloc(sizeof(Stack));
(*pStack)->Count = 0;
(*pStack)->pTop = NULL;
}
void Push(Stack *pStack, int nValue)
{
Node *pTemp = NULL;
if(pStack == NULL)
{
printf("栈不存在\n");
return;
}
pTemp = (Node*)malloc(sizeof(Node));
pTemp->nValue = nValue;
pTemp->pNext = pStack->pTop;
pStack->pTop = pTemp;
pStack->Count++;
}
int Pop(Stack *pStack)
{
if(pStack == NULL) exit(1);
if(pStack->pTop == NULL) return 0;
Node *pDel = NULL;
int DelNum;
pDel = pStack->pTop;
pStack->pTop = pStack->pTop->pNext;
DelNum = pDel->nValue;
free(pDel);
pDel = NULL;
pStack->Count--;
return DelNum;
}
void Clear(Stack *pStack)
{
if(pStack == NULL) exit(1);
while(pStack->Count != 0)
{
Pop(pStack);
}
}
void Destory(Stack **pStack)
{
Clear(*pStack);
free(*pStack);
*pStack = NULL;
}
int GetCount(Stack *pStack)
{
if(pStack == NULL) exit(1);
return pStack->Count;
}
Node *GetTop(Stack *pStack)
{
if(pStack == NULL) exit(1);
return pStack->pTop;
}
int IsEmpty(Stack *pStack)
{
if(pStack == NULL) exit(1);
return pStack->Count==0 ? 1:0;
}
int main()
{
Stack *pStack = NULL;
Init(&pStack);
Push(pStack, 1);
Push(pStack, 2);
Push(pStack, 3);
Push(pStack, 4);
Push(pStack, 5);
printf("%d ", Pop(pStack));
printf("%d ", Pop(pStack));
printf("%d ", Pop(pStack));
printf("%d ", Pop(pStack));
Clear(pStack);
Destory(&pStack);
printf("\n");
return 0;
}