有人可以给我这个程序 整数堆栈
使用数组实现一堆整数。
假设堆栈的最大大小为50个元素。任何增加此大小的尝试都会导致屏幕上出现错误,但程序不会终止。类似地,POP操作会打印错误,但程序不会终止。使用此堆栈模拟连续的命令流入。
输入描述:第一个输入是单个数字N,表示测试用例的数量。新行中的下一个输入是P,表示给定的命令数。然后有完全P行,每行代表一个命令。有三种类型的命令:
推送POP TOP
Push命令后面必须跟一个整数(a),在push和整数之间有一个空格。 POP和TOP没有以下整数。
输出:对于每个测试用例,打印正好是P行。每次PUSH操作后,打印推入的整数或错误“STACK OVERFLOW”。 每次POP操作后,打印出弹出的整数或错误“STACK UNDERFLOW”。每个TOP命令打印堆栈的顶部元素或错误“STACK UNDERFLOW”。
#include<stdio.h>
#define MAX_SIZE 50
int ar[MAX_SIZE];
int top = -1 ;
void push(int n)
{
if(top>=50)
{
printf("STACK OVERFLOW\n");
}
else
ar[++top] = n ;
}
void pop()
{
if(top==-1)
{
printf("STACK UNDERFLOW\n");
}
else
printf("%d\n",ar[top--]);
}
void Top()
{
if(top==-1)
{
printf("STACK UNDERFLOW\n");
}
else
printf("%d\n",top);
}
int main()
{
int t ,tt, n , i , j , k ;
scanf("%d",&t);
while(t--)
{
scanf("%d",&tt);
while(tt--)
{
char s[100];
scanf("%s",&s);
if(strcmp(s,"PUSH")==0)
{
scanf("%d",&n);
push(n);
}
else if(strcmp(s,"POP")==0)
{
pop();
}
else if(strcmp(s,"TOP")==0)
{
Top();
}
}
top = -1 ;
}
return 0 ;
}
当我输入
2
3
PUSH 1
PUSH 2
TOP
4
PUSH 1
POP
POP
TOP
我的预期问题输出是
1
2
2
1
1
STACK UNDERFLOW
STACK UNDERFLOW
但我的代码却向我显示了这个输出
1
1
STACK UNDERFLOW
STACK UNDERFLOW
这是问题请帮忙!!
答案 0 :(得分:0)
你可以像这样增强你的编程:
#include<stdio.h>
#include<stdlib.h>
#define MAX_SIZE 50
int ar[MAX_SIZE];
int top = -1 ;
void push(int n)
{
if(top>=50)
{
printf("STACK OVERFLOW\n");
}
else
{
top++;
ar[top] = n ;
}
}
void pop()
{
if(top==-1)
{
printf("STACK UNDERFLOW\n");
}
else
{
printf("%d\n",ar[top]);
top--;
}
}
void Top()
{
if(top==-1)
{
printf("STACK UNDERFLOW\n");
}
else
{
printf("%d\n",top);
}
}
int display ( void )
{
int choice;
if ( top == -1 )
{
printf ( "\n Enter 1 for PUSH \n ");
printf ( "\n Enter 3 for TOP value \n ");
printf ( "\n Enter 0 to EXIT \n ");
scanf ( "%d",&choice );
if ( choice == 0 )
{
printf ( "\n Exited \n");
exit ( 0 );
}
}
else
{
printf ( "\n Enter 1 for PUSH \n ");
printf ( "\n Enter 2 for POP value \n ");
printf ( "\n Enter 3 for TOP value \n ");
printf ( "\n Enter 0 to EXIT \n ");
scanf ( "%d",&choice );
if ( choice == 0 )
{
printf ( "\n Exited \n");
exit ( 0 );
}
}
return ( choice );
}
int main()
{
int choice, value;
while ( 1 )
{
choice = display ( );
switch ( choice )
{
case 1:
printf ( "\n enter the value \n ");
scanf ( "%d", &value );
push ( value );
break;
case 2:
pop ();
break;
case 3:
Top ();
break;
default:
printf ( "\n Wrong choice \n ");
break;
}
}
return 0 ;
}
答案 1 :(得分:0)
要修复的示例。
#include <stdio.h>
#include <string.h> //for strcmp
#define MAX_SIZE 50
int ar[MAX_SIZE];
int top = -1 ;
void push(int n){
if(top>=MAX_SIZE-1){//49 is full
printf("STACK OVERFLOW\n");
}else{
ar[++top] = n ;
printf("%d\n", n);//display push value
}
}
void pop(void){
if(top==-1){
printf("STACK UNDERFLOW\n");
} else{
printf("%d\n",ar[top--]);
}
}
void Top(void){
if(top==-1){
printf("STACK UNDERFLOW\n");
} else {
printf("%d\n",ar[top]);//display element
}
}
int main(void){
int t ,tt, n;// , i , j , k ;<-unused
scanf("%d",&t);
while(t--){
scanf("%d",&tt);
while(tt--){
char s[100];
scanf("%99s", s);//&s --> s, 99 is safety for buffer overflow
if(strcmp(s,"PUSH")==0){
scanf("%d",&n);
push(n);
} else if(strcmp(s,"POP")==0){
pop();
} else if(strcmp(s,"TOP")==0){
Top();
}
}
top = -1;//reset
}
return 0 ;
}