问题描述:这是数据结构课程设计中对栈的基础应用,将十进制数N转换成D进制数。
PS:因为小杨同学最近学习了数据结构,就将这些分享给大家了!做的可能不是太好,欢迎留言指导呀!
这题最简单的方法是采用除D取余法。因为这个方法最先产生的余数是起转换结果得最低位,正好符合栈的“先进后出”的特别性质。
如:1348(10进制)=2504(8进制)
N N div 8 N mod 8
1348 168 4
168 21 0
21 2 5
2 0 2
核心数据结构:顺序栈
顺序栈:顺序栈是栈的顺序实现。顺序栈是指利用顺序存储结构实现的栈。采用地址连续的存储空间(数组)依次存储栈中数据元素,由于人栈和出栈运算都是在栈顶进行,而栈底位置是固定不变的,可以将栈底位置设置在数组空间的起始处;栈顶位置是随入栈和出栈操作而变化的,故需用一个整型变量top来记录当前栈顶元素在数组中的位置。
废话少说,上代码:
1.顺序栈定义
typedef struct
{
int data[SIZE];
int top;
}seqstack;
2.完整源代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define SIZE 100
typedef struct
{
int data[SIZE];
int top;
}seqstack;
void main()
{
int num,d,x,sum;
printf("请输入一个10进制数字: ");scanf("%d",&num);
printf("请输入要转换的进制:");scanf("%d",&d);
seqstack *s;
s=(seqstack *)malloc(sizeof(seqstack));
s->top=-1;
while(num)//按顺序进栈
{
if(s->top!=SIZE-1)
{
s->top++;
s->data[s->top]=num%d;
num=num/d;
}
}
printf("结果为:");
while(s->top!=-1)//按顺序出栈
{
x=s->data[s->top];
printf("%d",x);
s->top--;
}
printf("\n");
}
3.运行效果图
4.OVER