|
已经将程序改好了,但是运行的时候说是段错误。
下面是修改完毕的程序,原来的错误的已经让我删除了。
从书上抄的程序。
包括两个文件convert.c和stack.h
convert.c用来将十进制数转换为八进制数,然后输出,stack.h是用来栈的实现。不知道出现什么问题了。总是不对.
convert.c
- #include "stack.h"
- main()
- {
- SElemType *e;
- SElemType m;
- void conversion()
- {
- int N;
- stq s;
- InitStack(s);
- printf("Please input N:\n");
- scanf("%d",&N);
- while(N)
- {
- m.number = N%8;
- m.sex = 'f';
- Push(s,m);
- N = N%8;
- }
- while(!StackEmpty(s))
- {
- Pop(s,e);
- printf("%d",e->number);
- }
- }
- conversion();
- }
复制代码
stack.h
- #include <stdlib.h>
- #define STACK_INIT_SIZE 100
- #define STACKINCREMENT 10
- #define OVERFLOW 0
- #define OK 1
- #define ERROR 0
- typedef int status;
- typedef struct {
- int number;
- char sex;
- }SElemType;
- typedef struct {
- SElemType *base;
- SElemType *top;
- int stacksize;
- }SqStack,*stq;
- /***************InitStack(stq S)*****************/
- status InitStack(stq S)
- {
- S->base = (SElemType *)malloc((size_t)STACK_INIT_SIZE * sizeof(SElemType));
- if(!S->base) exit(OVERFLOW);
- S->top = S->base;
- S->stacksize = STACK_INIT_SIZE;
- return OK;
- }
- /***************GetTop(stq S,SElemType *e)*********/
- status GetTop(stq S,SElemType *e)
- {
- if(S->top == S->base) return(ERROR);
- *e = *(S->top - 1);
- return OK;
- }
- /*************Push(stq S,SElemType *e)************/
- status Push(stq S,SElemType e)
- {
- if(S->top - S->base >= S->stacksize)
- {
- S->base = (SElemType *)realloc(S->base,(S->stacksize + STACKINCREMENT)*sizeof(SElemType));
- if(!S->base) exit(OVERFLOW);
- S->top = S->base + S->stacksize;
- S->stacksize += STACKINCREMENT;
- }
- *S->top++ = e;
- return OK;
- }
- /************Pop(stq S,SElemType *e)**************/
- status Pop(stq S,SElemType *e)
- {
- if(S->base == S->top) return ERROR;
- --S->top;
- *e = *S->top;
- return OK;
- }
- /****************DestroyStack(stq S)******************/
- status DestroyStack(stq S)
- {
- free(S->base);
- return OK;
- }
- /***************ClearStack(stq S)*********************/
- status ClearStack(stq S)
- {
- S->top = S->base;
- S->stacksize = STACK_INIT_SIZE;
- return OK;
- }
- /**************StackEmpty(stq S)*********************/
- status StackEmpty(stq S)
- {
- if(S->base == S->top) return OK;
- else return ERROR;
- }
复制代码
运行时提示段错误.
|
|