| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付赛孚耐:软件保护加密专家
身份认证令牌USB KEY   
共有 182 人关注过本帖
标题:栈的进制转换应用问题
收藏  订阅  推荐  打印 
lovableqz
Rank: 1
等级:新手上路
帖子:2
积分:120
注册:2007-9-27
栈的进制转换应用问题

请高手指教为什么以下程序不能实现十进制数转八进制数
原代码如下:

#include "stdio.h"

#include "stdlib.h"

#define STACK_INIT_SIZE 100

/*存储空间初始分配量*/

#define STACKINCREMENT 10

/*存储空间分配增量*/

#define OVERFLOW -2

#define OK 1

#define ERROR 0

typedef int Status;

typedef int SElemType;

typedef struct{

SElemType *base; /*在栈构造之前和销毁之后,base的值为NULL*/

SElemType *top; /*栈顶指针*/

int stacksize; /*当前已分配的存储空间,以元素为单位*/

}SqStack;

Status InitStack(SqStack S){

/*构造一个空栈S*/

S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));

if(!S.base)exit(OVERFLOW); /*存储分配失败*/

S.top=S.base;

S.stacksize=STACK_INIT_SIZE;

return OK;

}

Status Push(SqStack S,SElemType e){

/*插入元素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;

}

Status Pop(SqStack S,SElemType *e){

/*若栈不空,则删除S的栈顶元素,e返回其值,并返回OK;否则返回ERROR*/

if(S.top==S.base)return ERROR;

e=--S.top;

return OK;

}

Status StackEmpty(SqStack S){

/*若栈S是空栈,则返回TRUE,否则返回FALSE*/

if(S.top==S.base)return OK;

return ERROR;

}

void conversion(){

/*对于输入的任意一个非负十进制整数,打印输出与其等值的八进制数*/

SqStack S;

int *e,N;

InitStack(S);

scanf("%d",&N);

while(N){

Push(S,N%8);

N=N/8;

}

while(!StackEmpty(S)){

Pop(S,e);

printf("%d",*e);

}

}

void main(){

conversion();

getch(); /*使用WinTC编译后的运行结果不马上关闭*/

}

搜索更多相关主题的帖子: 进制  Calibri  face  应用  
2007-11-14 19:48
tlk
Rank: 1
等级:新手上路
帖子:9
积分:190
注册:2007-11-14
回复:(lovableqz)栈的进制转换应用问题

顶你
2007-11-14 20:26
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.068632 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved