#define stack_size 100
#define stack_increment 10
#define OK 1
#define error 0
#define status int
#define elemtype int
#define overflow -2
typedef struct /*定义栈数据类型*/
{ elemtype *base;
elemtype *top;
int stacksize;
}stack;
/*建立空栈函数*/
status initstack(stack S)
{ S.base=(elemtype*)malloc(stack_size*sizeof(elemtype)); /*分配内存*/
if(!S.base) exit(overflow);
S.top=S.base;
S.stacksize=stack_size;
return OK;
}
/*进栈函数*/
status push(stack S,int e)
{if((S.top-S.base)>=S.stacksize)
{S.base=(elemtype*)realloc(S.base,(S.stacksize+stack_increment)*sizeof(elemtype));
if(!S.base) exit(overflow);
S.top=S.base+S.stacksize;
S.stacksize+=stack_increment;
}
*S.top++=e;
return OK;
}
/*出栈函数*/
status pop(stack S,int e)
{if(S.top==S.base)
return error;
e=*--S.top;
return OK;
}
/*判断栈是否为空*/
stackempty(stack S)
{if(S.top==S.stack)
return 1;
else
return 0;
}
main()
{stack S;
int N,e;
initstack(S);
scanf("%d",N);
while(N)
{push(S,N%8);
N=N/8;
}
pop(S,e);
printf("%d",e);
getch();
}
问题补充:小弟才学了C不久,很多地方没学好,请各位大虾照顾下,帮忙指出错误。还有,希望各位大虾的答案能直接在WIN—TC上运行。感激不尽。。。。。。
发现一个新问题:在调试过程中我在main()函数中加了一条if(S.top==S.base)
printf("stack is empty");运行后没结果,但改为if(S.top>=S.base)
printf("stack is empty");时,运行后结果中却有“stack is empty“了
对此极为不解。
main()
{stack S;
int N,e;
initstack(S);
if(S.top>=S.base)
printf("stack is empty");
scanf("%d",N);
while(N)
{push(S,N%8);
N=N/8;
}
pop(S,e);
printf("%d",e);
getch();
}
#include
#include
#include
#define stack_size 100
#define stack_increment 10
#define OK 1
#define error 0
#define status int
#define elemtype int
#define overflow -2
typedef struct /*定义栈数据类型*/
{ elemtype *base;
elemtype *top;
int stacksize;
}stack;
/*建立空栈函数*/
status initstack(stack S)
{ S.base=(elemtype*)malloc(stack_size*sizeof(elemtype)); /*分配内存*/
if(!S.base) exit(overflow);
S.top=S.base;
S.stacksize=stack_size;
return OK;
}
/*进栈函数*/
status push(stack S,int e)
{if((S.top-S.base)>=S.stacksize)
{S.base=(elemtype*)realloc(S.base,(S.stacksize+stack_increment)*sizeof(elemtype));
if(!S.base) exit(overflow);
S.top=S.base+S.stacksize;
S.stacksize+=stack_increment;
}
*S.top++=e;
return OK;
}
/*出栈函数*/
status pop(stack S,int e)
{if(S.top==S.base)
return error;
e=*--S.top;
return OK;
}
/*判断栈是否为空*/
int stackempty(stack S)
{if(S.top!=S.stack)
return 1;
else
return 0;
}
main()
{stack S;
int N,e;
initstack(S);
scanf("%d",N);
while(N)
{push(S,N%8);
N=N/8;
}
pop(S,e);
printf("%d",e);
system("pause");
}
修改如下:加了三个头文件
#include "malloc.h"
#include "stdio.h"
#include "stdlib.h"
#define stack_size 100
#define stack_increment 10
#define OK 1
#define error 0
#define status int
#define elemtype int
#define overflow -2
typedef struct /*定义栈数据类型*/
{
elemtype *base;
elemtype *top;
int stacksize;
}stack;
/*建立空栈函数*/
status initstack(stack S)
{
S.base=(elemtype*)malloc(stack_size*sizeof(elemtype)); /*分配内存*/
if(!S.base)
exit(overflow);
S.top=S.base;
S.stacksize=stack_size;
return OK;
}
/*进栈函数*/
status push(stack S,int e)
{
if((S.top-S.base)>=S.stacksize)
{S.base=(elemtype*)realloc(S.base,(S.stacksize+stack_increment)*sizeof(elemtype));
if(!S.base)
exit(overflow);
S.top=S.base+S.stacksize;
S.stacksize+=stack_increment;
}
*S.top++=e;
return OK;
}
/*出栈函数*/
status pop(stack S,int e)
{
if(S.top==S.base)
return error;
e=*--S.top;
return OK;
}
/*判断栈是否为空*/
stackempty(stack S)
{
if(S.top==S.base)
return 1;
else
return 0;
}
void main()
{
stack S;
int N,e;
initstack(S);
scanf("%d",N);
while(N)
{push(S,N%8);
N=N/8;
}
pop(S,e);
printf("%d",e);
getchar();
}
取消
评论