| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 670 人关注过本帖
标题:用栈实现十进制转换为八进制
只看楼主 加入收藏
语林风
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-10-26
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
用栈实现十进制转换为八进制
首先,建立两个自定义的.h文件 conn.h 和stack.h
 conn.hstack.h:#ifndef conn_h_
#define conn_h_
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int status;
#endif

stack.h中的内容:#ifndef _stack_h_
#define _stack_h_
#define stack_init_size 100
#define stackincrement 10

typedef int selemtype;
typedef int status;


typedef struct{
    selemtype *base;
    selemtype *top;
    int stacksize;
}sqstack;
status initstack(sqstack &s);
status push(sqstack &s,selemtype e);
status pop(sqstack &s,selemtype &e);
status stackempty(sqstack s);

#endif


在建立两个.cpp文件 stack.cpp和test.cpp
stack.h中的内容:
#include "stdafx.h"
#include "stdlib.h"
#include "conn.h"
#include "stack.h"
status initstack(sqstack &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 gettop(sqstack s,selemtype &e){
    if (s.top==s.base) return ERROR;
    e=*(s.top-1);
    return OK;
}
status stackempty(sqstack s){
    return s.base==s.top;
}

status push(sqstack &s,selemtype e){
    if(s.top-s.top>=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){
    if(s.top==s.base)return ERROR;
    e=*--s.top;
    return OK;
}

test.cpp中的内容为:
// test.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "stdio.h"
#include "stack.h"
#include "conn.h"
void conversion(){
    int n;
    int e;
    sqstack s;
    initstack (s);
    printf("请输入十进制的数");
    scanf("%d",&n);
    while(n){
        push(s,n%8);
        n=n/8;
    }
    printf("对应的八进制数为\n");
    while(!stackempty(s)){
        pop(s,e);
        
        printf("%d",e);
        
    }
      
}

int main(int argc, char* argv[])
{
    conversion();
    return 0;
}
即可快速实现!
搜索更多相关主题的帖子: status 八进制 十进制 
2013-10-28 21:59
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6814
专家分:42393
注 册:2010-12-16
收藏
得分:10 
show 代码?

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-10-29 16:31
LiuFuMinH
Rank: 2
等 级:论坛游民
帖 子:12
专家分:45
注 册:2013-10-27
收藏
得分:10 
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<windows.h>
#define TRUE  1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef struct stack{
    int data;
   struct stack *next;
   struct stack *top;
}*linkstack;

Status initstack(linkstack &L)         //建立一个空栈
{
L=(linkstack)malloc(sizeof(stack));

L->next=NULL;
L->top=L;
return OK;
}


Status stackDelete(linkstack &L){         //清空栈
linkstack p,q;
p=L;
while(p)
{
q=p->next;p->next=q->next;p=p->next;
free(q);}
return OK;
}


Status pushstack(linkstack &L,int e){               //入栈
linkstack p,s;
p=L;
s=(linkstack)malloc(sizeof(stack));
L->top->next=s;
L->top=s;
L->top->data=e;
return OK;
}


Status popstack(linkstack &L,int e){        //出栈
linkstack p;
p=L;
if(L->top==L)  return ERROR;
while(!(p->next==L->top))
p=p->next;
e=L->top->data;
L->top=p;
return OK;
}

Status stackPrint(linkstack L) {                     //打印
linkstack p;
p=L;
if(!p->data) printf("栈为空栈\n");
else {
printf("栈中的由栈顶到栈尾的元素为:\n");
while(p) {
printf("%d ",p->data);
p=p->next;}
}
return OK;
}


void conversion(int e){              //数制转换
linkstack s;
initstack(s);
int n,flag=1;
while(flag){
printf("需要向几进制数转换,请输入2/8/16:\n");
scanf("%d",n);
if(n==2||n==8||n==16){
flag=0;
{while(e){
    pushstack(s,e%n);
        e=e/n;}}
popstack(s,e);

printf("%d",e);
}
else printf("输入有误,请重新输入\n");}}
2013-11-02 13:37
快速回复:用栈实现十进制转换为八进制
数据加载中...
 
   



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

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