主题:初学者求教
小弟碰到一道题,虽然得到了题目的输出,但我们学校的判题系统却显示“Wrroy Answer"
希望各位高手指点
问题:
Description
有一顺序栈,可以存放最大容量为100,经过一系列的进栈和出栈之后,请你输出栈顶元素和栈底元素。
Input
第一行为操作的次数n,后面n行是具体的操作,每一操作用一字母和元素值来表示,I为进栈,O为出栈,I后面的数据为元素的值。
Output
输出经过所给系列操作后的栈顶元素和栈底元素。
Sample Input
7
I 1
I 2
O
I 5
I 7
O
I 6
我的解法
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define STACK_INIT_SIZE 100
typedef struct {
int *base, *top;
unsigned int stacksize;
}SqStack;
int *array;
void InitStack(SqStack *s)
{
s->top=s->base=NULL;
s->stacksize=0;
}
int StackEmpty(SqStack *s)
{
if(s->top==s->base)
return 1;
return 0;
}
int Push(SqStack *s, int e)
{
if(s->stacksize==STACK_INIT_SIZE)
return 0;
if(StackEmpty(s))
{
s->base=array;
*(s->base)=e;
s->top=(s->base)+1;
s->stacksize+=1;
return 1;
}
else
{
*(s->top)=e;
s->top+=1;
s->stacksize+=1;
return 1;
}
}
int Pop(SqStack *s)
{
int e;
if(StackEmpty(s))
return 0;
s->top-=1;
e=*(s->top);
s->stacksize-=1;
return e;
}
int main()
{
char oper[3];
int n,i,k;
SqStack s1,*s;
s=&s1;
array=(int *)malloc(STACK_INIT_SIZE * sizeof(int));
if(array==NULL)
return 0;
scanf("%d",&n);
for(i=0;i<n;i++) //n次操作
{
scanf("%s",&oper);
if(strcmp(oper,"I")==0)
{
scanf("%d",&k);
Push(s,k);
}
else
{
Pop(s);
}
}
if(StackEmpty(s))
return 0;
else
{
printf("%d\n",*(s->top-1));
printf("%d\n",*(s->base));
return 1;
}
}
希望各位高手指点
问题:
Description
有一顺序栈,可以存放最大容量为100,经过一系列的进栈和出栈之后,请你输出栈顶元素和栈底元素。
Input
第一行为操作的次数n,后面n行是具体的操作,每一操作用一字母和元素值来表示,I为进栈,O为出栈,I后面的数据为元素的值。
Output
输出经过所给系列操作后的栈顶元素和栈底元素。
Sample Input
7
I 1
I 2
O
I 5
I 7
O
I 6
我的解法
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define STACK_INIT_SIZE 100
typedef struct {
int *base, *top;
unsigned int stacksize;
}SqStack;
int *array;
void InitStack(SqStack *s)
{
s->top=s->base=NULL;
s->stacksize=0;
}
int StackEmpty(SqStack *s)
{
if(s->top==s->base)
return 1;
return 0;
}
int Push(SqStack *s, int e)
{
if(s->stacksize==STACK_INIT_SIZE)
return 0;
if(StackEmpty(s))
{
s->base=array;
*(s->base)=e;
s->top=(s->base)+1;
s->stacksize+=1;
return 1;
}
else
{
*(s->top)=e;
s->top+=1;
s->stacksize+=1;
return 1;
}
}
int Pop(SqStack *s)
{
int e;
if(StackEmpty(s))
return 0;
s->top-=1;
e=*(s->top);
s->stacksize-=1;
return e;
}
int main()
{
char oper[3];
int n,i,k;
SqStack s1,*s;
s=&s1;
array=(int *)malloc(STACK_INIT_SIZE * sizeof(int));
if(array==NULL)
return 0;
scanf("%d",&n);
for(i=0;i<n;i++) //n次操作
{
scanf("%s",&oper);
if(strcmp(oper,"I")==0)
{
scanf("%d",&k);
Push(s,k);
}
else
{
Pop(s);
}
}
if(StackEmpty(s))
return 0;
else
{
printf("%d\n",*(s->top-1));
printf("%d\n",*(s->base));
return 1;
}
}