您的位置:首页 > 理论基础 > 数据结构算法

数制转换各种实现 数据结构

2010-05-05 22:23 761 查看
2009-11-14 14:39
//Stack应用
#include "stdio.h"
#include"malloc.h"
#define MAXSIZE 100
typedef int DataType;
typedef struct node {
       int top;
       DataType data[MAXSIZE];
}SeqStack,*PSeqStack;
PSeqStack init_stack(void)//建立空栈
{
       PSeqStack S;
       S=(PSeqStack)malloc(sizeof(SeqStack));
       if(S)
              S->top=-1;
       return S;
}
PSeqStack init_stack(PSeqStack S,int n)//建立实栈
{
       int i;
       S=(PSeqStack)malloc(sizeof(SeqStack));
       if(S){
              S->top=-1;
              if(n<MAXSIZE)
              {
            for(i=0;i<n;i++)
                     {
                            int x;
                            scanf("%d",&x);
                            S->data[i]=x;
                            S->top++;
                     }
              }
       }
       else printf("空栈建立不成功也就没法建立实栈!");
       return S;
       }
void output_stack(PSeqStack S)//输出栈内数据而不改动栈
{
       int i;
       for(i=S->top;i>=0;i--)
       {
              printf("%d",S->data[i]);
       }
}
void Destory_stack(PSeqStack *SeqStackpoint)//用后销毁栈
{
       if(*SeqStackpoint)
              free(*SeqStackpoint);
       *SeqStackpoint=NULL;
       return ;
}
int Push_stack(PSeqStack S,DataType x)//入栈操作
{
       if(S->top==MAXSIZE-1)
              return 0;//栈满无法插入
       else
       {
              S->top++;
              S->data[S->top]=x;
              return 1;
       }
}
int Empty_stack(PSeqStack S)//判断栈是否为空操作
{
       if(S->top==-1)
              return 1;
       else
              return 0;
}
int Pop_stack(PSeqStack S,DataType *x)//弹出栈操作
{
       if(Empty_stack(S))
              return 0;
       else
       {
              *x=S->data[S->top];
              S->top--;
              return 1;
       }
}
//////////////////////////////////////////////////////////
//全部包括新建空表;判断空栈;入栈操作;出栈操作;栈的销毁
int conversion(int N,int r)//数制转换N为输入目的数,r为数制
{
       PSeqStack S;
       DataType x;
       if(!r)
       {
              printf("基数不能为0");
              return 0;
       }
       S=init_stack();
       if(!S)
       {
              printf("初始化空栈失败");
           return 0;
       }
       while(N)
       {
              int yu;
              yu=N%r;
        Push_stack(S,yu);
              N=N/r;
       }
    //output_stack(S);
       while(!Empty_stack(S))
       {
              Pop_stack(S,&x);
              if(r=16&&x>=10)
              {
                            switch(x)
                     {
                            case 10:printf("A");break;
                            case 11:printf("B");break;
                            case 12:printf("C");break;
                            case 13:printf("D");break;
                            case 14:printf("E");break;
                            case 15:printf("F");break;
                     }
              }
              else printf("%d",x);
       }
       printf("/n");
       Destory_stack(&S);
       return 1;
}
void main(){
       //PSeqStack S;
       //S=init_stack();
       //S=init_stack(S,10);     
       //Empty_stack(S);
       int N,r;
       printf("输入目的数:/n",&N);
       scanf("%d",&N);
       printf("输入进制:/n",&r);
       scanf("%d",&r);
    conversion(N,r);
    //output_stack(S);
       //Destory_stack(&S);
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐