代码实现:
/*
顺序栈:实现接口:
创建栈
判栈空
判栈满
返回栈顶元素
入栈
出栈
*/
#include <stdio.h>
#include <stdlib.h>
#define STACK_MAXLEN 20
//定义栈结构
typedef struct stack
{
int data[STACK_MAXLEN];
int top;
}STACK_T;
//创建栈
STACK_T *Create_Stack()
{
STACK_T *NewSatck = NULL;
NewSatck = malloc(sizeof(*NewSatck));
if (NewSatck == NULL)
{
return NULL;
}
NewSatck->top = -1; //栈元素个数初始值
return NewSatck;
}
//判栈空
int Is_Empty(STACK_T *pStack)
{
if (pStack->top < 0)
{
printf("栈为空!\n");
return -1;
}
return 0;
}
//判栈满
int Is_Full(STACK_T *pStack)
{
if (pStack->top == STACK_MAXLEN)
{
printf("栈满!\n");
return -1;
}
return 0;
}
//返回栈顶元素
int Stack_Top(STACK_T *pStack)
{
printf("当前栈元素个数:%d-------栈顶元素:%d\n", pStack->top+1, pStack->data[pStack->top]);
return pStack->data[pStack->top];
}
//入栈
int push(STACK_T *pStack,int data)
{
//判栈满
if (Is_Full(pStack) == -1)
{
return -1;
}
pStack->data[++pStack->top] = data;
return 0;
}
//出栈
int pop(STACK_T *pStack)
{
//判栈空
if (Is_Empty(pStack) == -1)
{
return -1;
}
printf("第%d个元素出栈: ", pStack->top+1);
return pStack->data[pStack->top--];
}
int main(int argc,const char *argv[])
{
STACK_T *pStack = NULL;
//创建栈
pStack = Create_Stack();
if (pStack == NULL)
{
printf("Create_Stack failed.\n");
return -1;
}
//入栈
push(pStack, 10);
Stack_Top(pStack);
push(pStack, 20);
Stack_Top(pStack);
push(pStack, 30);
Stack_Top(pStack);
push(pStack, 40);
Stack_Top(pStack);
push(pStack, 50);
Stack_Top(pStack);
//出栈
printf("%d\n", pop(pStack));
printf("%d\n", pop(pStack));
printf("%d\n", pop(pStack));
printf("%d\n", pop(pStack));
printf("%d\n", pop(pStack));
printf("%d\n", pop(pStack));
system("pause");
return 0;
}
执行结果: