运行如下所示:
/*018数组实现顺序堆栈的基本操作*/
#include <stdio.h>
#define MaxStackSize 100
typedef int DataType;
#include <stdio.h>
#define MaxStackSize 100
typedef int DataType;
typedef struct
{
DataType stack[MaxStackSize];
int top;
}SeqStack;
{
DataType stack[MaxStackSize];
int top;
}SeqStack;
/*初始化顺序堆栈S*/
void StackInitiate(SeqStack *S)
{
S->top = 0;
}
void StackInitiate(SeqStack *S)
{
S->top = 0;
}
/*判断堆栈S非空否,非空返回1,否则返回0*/
int StackNotEmpty(SeqStack *S)
{
if(S->top <= 0)
return 0;
else
return 1;
}
int StackNotEmpty(SeqStack *S)
{
if(S->top <= 0)
return 0;
else
return 1;
}
/*把数据元素值x存入顺序堆栈S中,入栈成功则返回1,否则返回0*/
int StackPush(SeqStack *S , DataType x)
{
if(S->top >= MaxStackSize)
{
printf("堆栈已满无法插入!\n");
return 0;
}
else
{
S->stack[S->top] = x;
S->top++;
return 1;
}
}
int StackPush(SeqStack *S , DataType x)
{
if(S->top >= MaxStackSize)
{
printf("堆栈已满无法插入!\n");
return 0;
}
else
{
S->stack[S->top] = x;
S->top++;
return 1;
}
}
/*取出顺序堆栈S的栈顶数据元素值由参数d带回,出栈成功则返回1,否则返回0*/
int StackPop(SeqStack *S , DataType *d)
{
if(S->top <= 0)
{
printf("堆栈已空无数据元素出栈!\n");
return 0;
}
else
{
S->top--;
*d = S->stack[S->top];
return 1;
}
}
int StackPop(SeqStack *S , DataType *d)
{
if(S->top <= 0)
{
printf("堆栈已空无数据元素出栈!\n");
return 0;
}
else
{
S->top--;
*d = S->stack[S->top];
return 1;
}
}
/*取顺序堆栈S的当前栈顶数据元素值由参数d带回,成功则返回1,否则返回0*/
int StackTop(SeqStack *S , DataType *d)
{
if(S->top <= 0)
{
printf("堆栈已空!\n");
return 0;
}
else
{
*d = S->stack[S->top - 1];
return 1;
}
}
int StackTop(SeqStack *S , DataType *d)
{
if(S->top <= 0)
{
printf("堆栈已空!\n");
return 0;
}
else
{
*d = S->stack[S->top - 1];
return 1;
}
}
void main(void)
{
SeqStack myStack;
int i , x;
{
SeqStack myStack;
int i , x;
StackInitiate(&myStack); /*初始化*/
for(i = 0 ; i< 10 ; i++)
StackPush(&myStack , i + 1); /*入栈*/
for(i = 0 ; i< 10 ; i++)
StackPush(&myStack , i + 1); /*入栈*/
StackTop(&myStack , &x); /*取栈顶元素*/
printf("当前栈顶数据元素为: %d\n" , x);
printf("当前栈顶数据元素为: %d\n" , x);
printf("依次出栈的数据元素序列如下: \n");
while(StackNotEmpty(&myStack))
{
StackPop(&myStack , &x); /*出栈*/
printf("%d " , x);
}
printf("\n");
}
while(StackNotEmpty(&myStack))
{
StackPop(&myStack , &x); /*出栈*/
printf("%d " , x);
}
printf("\n");
}