进制转换(十进制———二进制/八进制)

stack.c代码如下:

#include <stdio.h>
#include <stdlib.h>
#include "stack.h"

//创建栈
Stack *stack_create()
{
	Stack * S =(Stack*)malloc(sizeof(Stack));
	if(NULL ==S)
		{
			printf("创建失败\n");
			return NULL;
		}

	printf("创建成功\n");

	S->top = -1;

	return S;
}

//判空
int stack_empty(Stack* S)
{
	return S->top==-1;
}

//判满
int stack_full(Stack *S)
{
	return S->top==MAX-1;
}

//入栈
void stack_push(Stack *S,type e)
{
	//判断逻辑
	if(NULL==S || stack_full(S))
	{
		printf("入栈失败\n");
		return ;
	}

	//先加top再放进
	++S->top;
	S->data[S->top]=e;
	printf("入栈成功\n");

}

//进制转换
void stack_trans(Stack *S,int m,int n)
{
    //判断逻辑	
    if(S==NULL||stack_full(S))                                                                                                                             
    {                                                                                                                                                      
        printf("失败\n");                                                                                                                                  
        return;                                                                                                                                            
    }
	//进制转换
    while(m)                                                                                                                                             
    {                                                                                                                                                      
        stack_push(S,m%n);                                                                                                                                 
        m=m/n;                                                                                                                                             
    }                                                                                                                                                      
	//转换出栈
	printf("转换后为:\n");
    while(S->top!=-1)
	{
		stack_pop(S);
	}

}

//出栈
void stack_pop(Stack *S)
{
	//判断逻辑
	if(NULL==S || stack_empty(S))
	{
		printf("出栈失败\n");
		return ;
	}
    printf("%d出栈成功\n",S->data[S->top]);
	S->top--;
}

//遍历
void stack_show(Stack *S)
{
	//判断逻辑
	if(NULL==S || stack_empty(S))
	{
		printf("遍历失败\n");
		return ;
	}
	printf("栈中元素分别是:");
	for(int i = S->top;i>=0;i--)
	{
		printf("%d\t",S->data[i]);
	}
	putchar(10);
}

stack.h代码如下:

#ifndef __STACK_H__
#define __STACK_H__

#define MAX 8
typedef int type;

typedef struct
{
	type data[MAX];
	int top;
}Stack;

//创建栈
Stack * stack_create();

//判空
int stack_empty(Stack* S);

//判满
int stack_full(Stack *S);

//入栈
void stack_push(Stack *S,type e);

//进制转换
void stack_trans(Stack *S,int M,int N);

//出栈
void stack_pop(Stack *S);

//遍历
void stack_show(Stack *S);





#endif

main代码如下:

#include <stdio.h>
#include "stack.h"

int main(int argc, const char *argv[])
{
	Stack *S=stack_create();
	if(NULL==S)
	{
		return -1;
	}
    stack_trans(S,75,2);
    stack_trans(S,75,8);
	return 0;
}

结果如下:

ubuntu@ubuntu:3zy$ gcc *.c
ubuntu@ubuntu:3zy$ ./a.out
创建成功
入栈成功
入栈成功
入栈成功
入栈成功
入栈成功
入栈成功
入栈成功
转换后为:
1出栈成功
0出栈成功
0出栈成功
1出栈成功
0出栈成功
1出栈成功
1出栈成功
入栈成功
入栈成功
入栈成功
转换后为:
1出栈成功
1出栈成功
3出栈成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值