| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 583 人关注过本帖
标题:我的错误是?(栈实现进制的转换)(我个人意见是没错但是结果却不一样,根据输出 ...
只看楼主 加入收藏
yangzhifu
Rank: 1
等 级:新手上路
威 望:2
帖 子:433
专家分:0
注 册:2007-4-11
收藏
 问题点数:0 回复次数:6 
我的错误是?(栈实现进制的转换)(我个人意见是没错但是结果却不一样,根据输出的结果

/**********************************/
//3-1define.h
#ifndef _MYDEFINEFILE_H
#define _MYDEFINEFILE_H

#define INITSIZE 100
#define ADDSIZE 10
typedef int elemtype;
typedef struct
{
int top;
elemtype *base;
int stacksize;
}sqstack;
#endif
/***************************/
//3-1lib.h
#include<stdio.h>
#include<malloc.h>
#include"3-1define.h"
void initstack(sqstack *s)
{
s->base=(elemtype *)malloc(INITSIZE*sizeof(elemtype));
s->top=0;
s->stacksize=INITSIZE;
printf("OK ,CREATDE!\n");
}
int getlen(sqstack *s)
{
return s->top;
}
int gettop(sqstack *s)
{
if(s->top<=0)
return 0;
else
return 1;
}
int push(sqstack *s,elemtype x)
{
if(s->top>=s->stacksize)
{s->base=(elemtype*)malloc(sizeof(elemtype)*(INITSIZE+ADDSIZE));
if(!s->base)
return 0;
s->stacksize=INITSIZE+ADDSIZE;

}

s->base[s->top++]=x;
return 1;
}
int pop(sqstack *s)
{
if(s->top==0)
return 0;
else
return s->base[s->top--];


}
int stackempty(sqstack *s)
{
if(s->top==0)
return 1;
else
return 0;
}
void list(sqstack *s)
{
int i;
for(i=s->top-1;i>=0;i--)
printf("%4d",s->base[i]);
printf("\n");
}
/****************************/
//3-1-1main.h

#include<stdio.h>
#include"3-1define.h"
#include"3-1lib.h"

void conversion()
{
int N,M;
elemtype e=0;
sqstack *s=(sqstack *)malloc(sizeof(sqstack));
printf("Input the number you want :\n");
scanf("%d",&N);
printf("Input the number you want to convert into :\n");
printf("1,two\n 2,eight\n 3,ten\n 4,sixteen\n");
scanf("%d",&M);

initstack(s);
while(N)
{
push(s,N%M);
N=N/M;
}
while(!stackempty(s))
{
e=pop(s);
printf("%d",e);
}
}
void main()
{



conversion();


}



搜索更多相关主题的帖子: 进制 意见 结果 输出 
2007-10-20 20:48
yangzhifu
Rank: 1
等 级:新手上路
威 望:2
帖 子:433
专家分:0
注 册:2007-4-11
收藏
得分:0 

还好,我自己解决了,要不这就是一个历史了


方寸之内,剖天下; 方坛之内,析自我;
2007-10-20 23:14
风的声音
Rank: 1
等 级:新手上路
帖 子:128
专家分:0
注 册:2007-3-27
收藏
得分:0 

问题在哪里啊??我正在看呢,,好像是pop()返回的有问题
还有就是你的程序,有一个小问题,就是判断栈满之后,应该用realloc()函数来分配新的空间,不然你用malloc,就把原来栈里的东西给丢失了了。
还有判断栈是否为满,就是push函数中,if()语句有一个问题,错把等于号写成赋值号了;
还有给你一个建议,在主函数中,你没有必要把栈定义成指针类型,直接定义栈类型变量即可,只要把一些函数里改成饮用,也没有必要在为栈本身分配空间。。。。
不过,我最想知道,问题到底是什么,,pop()返回的好像有问题~~


一念心清净,莲花处处开。 一花一净土,一土一如来。
2007-10-20 23:29
yangzhifu
Rank: 1
等 级:新手上路
威 望:2
帖 子:433
专家分:0
注 册:2007-4-11
收藏
得分:0 
哦,谢谢等哦!
原因在于:
兰色部分:
int push(sqstack *s,elemtype x)
{
if(s->top>=s->stacksize)
{s->base=(elemtype*)malloc(sizeof(elemtype)*(INITSIZE+ADDSIZE));
if(!s->base)
return 0;
s->stacksize=INITSIZE+ADDSIZE;

}

s->base[s->top++]=x;
return 1;
}
int pop(sqstack *s)
{
if(s->top==0)
return 0;
else
return s->base[s->top--];
应该变为return s->base[--s->top];
要考虑x--与--x的区别了


方寸之内,剖天下; 方坛之内,析自我;
2007-10-20 23:47
yangzhifu
Rank: 1
等 级:新手上路
威 望:2
帖 子:433
专家分:0
注 册:2007-4-11
收藏
得分:0 

谢谢你的建议


方寸之内,剖天下; 方坛之内,析自我;
2007-10-20 23:49
风的声音
Rank: 1
等 级:新手上路
帖 子:128
专家分:0
注 册:2007-3-27
收藏
得分:0 

呵呵 ,原来这样啊,难怪返回乱吗。。。忘记了,那个指针(数组)应该从0开始算起的!!呵呵


一念心清净,莲花处处开。 一花一净土,一土一如来。
2007-10-20 23:52
yangzhifu
Rank: 1
等 级:新手上路
威 望:2
帖 子:433
专家分:0
注 册:2007-4-11
收藏
得分:0 

你在上面提到:
还有给你一个建议,在主函数中,你没有必要把栈定义成指针类型,直接定义栈类型变量即可,只要把一些函数里改成饮用,也没有必要在为栈本身分配空间。。。。
对,是应该这样,不过用了指针类型就必须开辟空间


方寸之内,剖天下; 方坛之内,析自我;
2007-10-21 00:06
快速回复:我的错误是?(栈实现进制的转换)(我个人意见是没错但是结果却不一样,根 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025408 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved