代码作用:想模仿一下堆栈的push和pop
代码问题:最后一个入栈的数据,弹出的时候老是错的。
代码如下:
#include <stdio.h>
int *p,*top;
push(int i){
p++;
if(p!=(top+2)){
*p=i;
}else{
printf("stack overflow\n");
}
}
pop(){
if(p!=top){
p--;
return *(p+1);
}else{
printf("stack underflow\n");
exit(1);
}
}
void main(){
int value;
p=(int *)malloc(3*sizeof(int));
if(!p){
printf("malloc failure!\n");
exit(1);
}
top=p;
while(value!=-1){
scanf("%d",&value);
if(value!=0){
push(value);
}else{
printf("It is:%d\n",pop());
}
}
free(p);
getch();
}
究竟是什么问题呢?
----------------解决方案--------------------------------------------------------
#include <stdio.h>
int *p,*bottom;
push(int i){
if(p!=(bottom+3)){
*p=i;
p++;
}else{
printf("stack overflow\n");
}
}
pop(){
if(p!=bottom){
p--;
return *p;
}else{
printf("stack underflow\n");
}
}
void main(){
int value;
p=(int *)malloc(3*sizeof(int));
if(!p){
printf("malloc failure!\n");
exit(1);
}
bottom=p;
while(value!=-1){
scanf("%d",&value);
if(value!=0){
push(value);
}else{
printf("It is:%d\n",pop());
}
}
free(p);
getch();
}
----------------解决方案--------------------------------------------------------