本题要求实现顺序栈的初始化。注意:形参S是被初始化的顺序栈指针的指针。
而本程序其他部分功能(不必同学们实现):输入数据,以-1结束输入,所有数据与5对比,大于5入栈,再依次出栈,将出栈数据放入数组中,再从数组后方依次向前打印数据。例如输入1 2 3 4 5 6 7 8 9 -1。输出为6 7 8 9。
函数接口定义:
初始化顺序栈 int InitSqStack(SqStack **S);
裁判测试程序样例:
#include <stdio.h>
#include <malloc.h>
/*栈中允许存储的元素的最大个数*/
#define STACKSIZE 10
typedef int DataType;
typedef struct
{
DataType items[STACKSIZE];
/*存放栈中元素的一维数组*/
int top; /*用来存放栈顶元素的下标*/
}SqStack;
/* 【 本题要求函数-初始化顺序栈 】*/
int InitSqStack(SqStack **S);
int SqStackEmpty(SqStack S)
{/* S为顺序栈 */
if( S.top == -1 )
return 1;
else
return 0;
}
int SqStackPush( SqStack *S, DataType e )
{
if ( S->top == STACKSIZE-1)
return 0; /*栈已满*/
S->top++;
S->items[S->top]=e;
return 1;
}
int SqStackPop(SqStack *S, DataType *e)
{ /* 将栈S的栈顶元素弹出,放到e所指的存储空间中 */
if ( S->top == -1 ) /* 栈为空 */
return 0;
*e = S->items[S->top]; /* 将栈顶元素带回来 */
S->top--; /* 修改栈顶指针 */
return 1;
}
int main( )
{
int list[STACKSIZE];//定义一个数组,用来存放栈中弹出的数据
SqStack* S1;
int X,count=0;
InitSqStack(&S1);//初始化S1
int input=0;
while(1)
{
scanf("%d",&input);
if(input==-1)
break;
if(input>5&& S1->top<=STACKSIZE-1)
SqStackPush(S1,input);
}
while(S1->top!=-1)
{
SqStackPop(S1,&X);
list[count]= X;
count++;
}
for(count; count>0;count--)
printf("%d ",list[count-1]);
return 0;
}
/* 请在这里填写答案 */
输入样例:
在这里给出一组输入。例如:
1 2 3 4 5 6 7 8 9 -1
输出样例:
在这里给出相应的输出。例如:
6 7 8 9
int InitSqStack(SqStack **S) {
//定义单指针
SqStack *temp = malloc(sizeof(SqStack));
temp -> top = -1;
// *S = malloc(sizeof(SqStack));
// (*S) -> top = -1;
*S = temp;
return 1;
}