栈的问题

sunner008 2010-05-21 04:15:46
#include<stdio.h>
#include<stdlib.h>
#define STACK_SIZE 4

typedef int KEY;
typedef int DATA;

typedef struct {
KEY key;
DATA data;
} CELL;

static CELL stack[STACK_SIZE];
static CELL *sp;

void init(void){
sp=stack+STACK_SIZE;
}

void push(CELL cell){
if(sp<=stack) {
fprintf(stderr,"stackover\n");
exit(EXIT_FAILURE);
}

}

CELL pop(void){
if(sp>=stack+STACK_SIZE) {
fprintf(stderr,"stacknull\n");
exit(EXIT_FAILURE);
}

}

void disp(void){
int i;

for(i=0;i<STACK_SIZE;i++)
if(i>=sp-stack)
printf("%d",stack[i].key);
else
printf("-- ");
putchar('\n');
}

main(){
char buff[4];
KEY key;
CELL cell, result;

init();
while(1){
printf("I: push, O: pop?");
gets(buff);
key=atoi(&buff[1]);
switch(buff[0]) {
case'I': case'i':
cell.key=key;
push(cell);
break;
case'O': case'o':
result=pop();
break;
default:
return 0;
}
disp();
}
}


①、②的地方填入什么程序。
连续输入三次I或者i之后的输出什么结果?
连续输入三次I或者i之后,再连续输入三次O或者o输出什么结果?
...全文
86 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
tanmeining 2010-05-21
  • 打赏
  • 举报
回复
数组模拟栈,建议画个数组出来,然后根据程序画画,创建栈,销毁栈,进栈出栈,判断栈空,栈满,得到栈底指针等等操作。
huanmie_09 2010-05-21
  • 打赏
  • 举报
回复

void push(CELL cell){
if(sp<=stack) {
fprintf(stderr,"stackover\n");
exit(EXIT_FAILURE);
}
//①
*--sp=cell;
}

CELL pop(void){
if(sp>=stack+STACK_SIZE) {
fprintf(stderr,"stacknull\n");
exit(EXIT_FAILURE);
}
//②
return *sp++;
}

连续输入三次I或者i之后的输出什么结果?

I: push, O: pop?i
-- -- -- 0
I: push, O: pop?i
-- -- 00
I: push, O: pop?i
-- 000
I: push, O: pop?


连续输入三次I或者i之后,再连续输入三次O或者o输出什么结果?

I: push, O: pop?i
-- -- -- 0
I: push, O: pop?i
-- -- 00
I: push, O: pop?i
-- 000
I: push, O: pop?o
-- -- 00
I: push, O: pop?o
-- -- -- 0
I: push, O: pop?o
-- -- -- --
I: push, O: pop?

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧