代码如下:
/*
链式栈:实现接口
判栈空
返回栈顶元素
入栈
出栈
遍历栈
*/
#include <stdio.h>
#include <stdlib.h>
//栈节点
typedef struct linkstack
{
int data;
struct linkstack *pNext;
}LINKSTACK_T;
typedef struct stack
{
LINKSTACK_T *Top;
LINKSTACK_T *Buttom;
int datalen;
}STACK_T;
//创建栈
STACK_T *Create_Stack()
{
STACK_T *pStack = NULL;
pStack = (STACK_T *)malloc(sizeof(STACK_T));
if (pStack == NULL)
{
return NULL;
}
pStack->Top = pStack->Buttom = NULL;
pStack->datalen = 0;
return pStack;
}
//判栈空
int Is_StackEmpty(STACK_T *pStack)
{
return (pStack->Top == NULL) ? -1 : 0;
}
//返回栈顶元素
int Stack_Top(STACK_T *pStack)
{
return pStack->Top->data;
}
//入栈
int Push(STACK_T *pStack, int data)
{
LINKSTACK_T *pInSatck = NULL;
pInSatck = (LINKSTACK_T *)malloc(sizeof(LINKSTACK_T));
if (pInSatck == NULL)
{
printf("Push:malloc failed.\n");
return -1;
}
pInSatck->data = data;
pInSatck->pNext = pStack->Top;
pStack->Top = pInSatck;
pStack->datalen++;
printf(">>>>数据[%d]入栈<<<<\n", pStack->Top->data);
return 0;
}
//出栈
int Pop(STACK_T *pStack)
{
LINKSTACK_T *pOutStack = NULL;
int Tempdata = 0;
if (Is_StackEmpty(pStack) == -1)
{
printf("Pop:栈空.\n");
return -1;
}
pOutStack = (LINKSTACK_T *)malloc(sizeof(LINKSTACK_T));
if (pOutStack == NULL)
{
printf("Pop:malloc failed.\n");
return -1;
}
Tempdata = pStack->Top->data;
pOutStack = pStack->Top->pNext;
free(pStack->Top);
pStack->Top = pOutStack;
pStack->datalen--;
printf("<<<<数据[%d]出栈>>>>\n", Tempdata);
return Tempdata;
}
//遍历栈
int Traversal_Stack(STACK_T *pStack)
{
LINKSTACK_T *pStackTop = pStack->Top;
//判栈空
if (Is_StackEmpty(pStack) == -1)
{
printf("Traversal_Stack:栈空.\n");
return -1;
}
printf("当前栈内共[%d]个元素,分别为:", pStack->datalen);
while (pStackTop != NULL)
{
printf("%d\t",pStackTop->data);
pStackTop = pStackTop->pNext;
}
printf("\n\n");
return 0;
}
int main()
{
STACK_T *pStack = NULL;
//创建栈
pStack = Create_Stack();
//入栈
Push(pStack, 10);
Push(pStack, 20);
Push(pStack, 30);
Push(pStack, 40);
Push(pStack, 50);
printf("----------------------------------------------------------------------------\n\n");
//遍历栈
Traversal_Stack(pStack);
printf("----------------------------------------------------------------------------\n\n");
//出栈
Pop(pStack);
Pop(pStack);
Pop(pStack);
Pop(pStack);
Pop(pStack);
Pop(pStack);
system("pause");
return 0;
}
效果如下: