永发信息网

c语言 用数组实现栈的进出

答案:3  悬赏:20  手机版
解决时间 2021-03-19 18:22
  • 提问者网友:鼻尖触碰
  • 2021-03-19 12:59
c语言 用数组实现栈的进出
最佳答案
  • 五星知识达人网友:雪起风沙痕
  • 2021-03-19 14:18
#include
#include
void main()
{
char behavior[10];
int stack[100];
int i,n,cnt;
scanf("%d",&n);
for(i=n-1;i>=0;i--)
{
scanf("%d",&stack[i]);
}
scanf("%d",&cnt);
while(cnt--)
{
memset(behavior,0,5);
scanf("%s",behavior);
if(!strcmp(behavior,"PUSH"))
{
for(i=n++;i>0;i--)
{
stack[i]=stack[i-1];
}
scanf("%d",&stack[0]);
continue;
}
if(!strcmp(behavior,"POP"))
{
for(i=0;i {
stack[i]=stack[i+1];
}
n--;
}
}
for(i=n-1;i>=0;i--)
{
printf("%d ",stack[i]);
}
printf("\n");
}
程序输入的时候没有提示(可以加),不知道你习不习惯。
全部回答
  • 1楼网友:杯酒困英雄
  • 2021-03-19 16:56
#include 
#include 

#define MAXSIZE 100

int main() {
int i,j,flag,n,num,top = 0,stack[MAXSIZE];
char mnemonic[30],mandate[10];
printf("n = ");
scanf("%d",&n);
while(top < n) scanf("%d",&stack[top++]);
printf("操作次数 n = ");
scanf("%d",&n);
for(i = 0; i < n; ++i) {
printf("请输入 %d/%d 条指令:",i + 1,n);
fflush(stdin);
gets(mnemonic);
flag = 1;
for(j = 0; mnemonic[j]; ++j) {
if(mnemonic[j] >= '0' && mnemonic[j] <= '9') {
flag = 0;
break;
}
}
if(flag) { // 应该是 POP 指令
if(strcmp(mnemonic,"POP")) {
printf("不能识别的操作指令:<%s> ",mnemonic);
--i;
continue;
}
if(top == 0) printf("INVALID OPERATION! ");
printf("(%d) ",stack[--top]);
if(top == 0) printf("EMPTY! ");
}
else { // 应该是 PUSH 指令
sscanf(mnemonic,"%s%d",mandate,&num);
if(strcmp(mandate,"PUSH")) {
printf("不能识别的操作指令:<%s> ",mandate);
--i;
continue;
}
stack[top++] = num;
}
}
for(i = 0; i < top; ++i)
printf("%d ",stack[i]);
printf(" ");
return 0;
}追问可否给一个不用gets的程序。。不然无法提交。。。追答#include 
#include 

#define MAXSIZE 100

int main() {
int i,j,flag,n,num,top = 0,stack[MAXSIZE];
char mnemonic[30],mandate[10],ch;
printf("n = ");
scanf("%d",&n);
while(top < n) scanf("%d",&stack[top++]);
printf("操作次数 n = ");
scanf("%d",&n);
for(i = 0; i < n; ++i) {
printf("请输入 %d/%d 条指令:",i + 1,n);
fflush(stdin);
j = 0;
while((ch = getchar()) != ' ')
mnemonic[j++] = ch;
mnemonic[j] = '';
flag = 1;
for(j = 0; mnemonic[j]; ++j) {
if(mnemonic[j] >= '0' && mnemonic[j] <= '9') {
flag = 0;
break;
}
}
if(flag) { // 应该是 POP 指令
if(strcmp(mnemonic,"POP")) {
printf("不能识别的操作指令:<%s> ",mnemonic);
--i;
continue;
}
if(top == 0) printf("INVALID OPERATION! ");
printf("(%d) ",stack[--top]);
if(top == 0) printf("EMPTY! ");
}
else { // 应该是 PUSH 指令
sscanf(mnemonic,"%s%d",mandate,&num);
if(strcmp(mandate,"PUSH")) {
printf("不能识别的操作指令:<%s> ",mandate);
--i;
continue;
}
stack[top++] = num;
}
}
for(i = 0; i < top; ++i)
printf("%d ",stack[i]);
printf(" ");
return 0;
}
  • 2楼网友:胯下狙击手
  • 2021-03-19 15:24
#include
#define STACKSIZE 100
int mstack[STACKSIZE],top,bottom;
void mInitStack() { top=bottom=0; }
void mPush(int x) { if ( top-bottom<=STACKSIZE ) { mstack[top]=x; top++; } }
int mPop() { int r=0; if ( top>bottom ) { r=mstack[top]; top--; } return r; }
void main()
{
int i,n,x;
char buffer[80];
mInitStack();
scanf("%d",&n);
for ( i=0;i scanf("%d",&n);
for ( i=0;i { buffer[1]=0; gets(buffer);
switch ( buffer[1] )
{ case 'O':
case 'o': x=mPop(); break;
case 'U':
case 'u': x=atoi(buffer+5); mPush(x); break;
default: i--; break;
}
}
for ( i=bottom;i}追问为啥会出
“warning: this program uses gets(), which is unsafe”
呀?。。。追答没关系,用就是了,对于严格的设计来说,有不安全因素而已,普通使用没问题,比如自己知道不能每行输入过多字符。追问可否给一个不用gets的程序。。不然无法提交。。。追答用以下代码替换gets调用:
char c;
int j;

...
c=0; j=0; buffer[79]=0;

while ( 1 )
{ c=getchar();
if ( c=='\n' ) { buffer[j]=0; break; }

else { buffer[j]=c; j++; if ( j>=79 ) break; }

}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯