用栈实现数字的进制转换(10转8)
栈:限定只能在表尾进行插入或者删除操作的线性表
特点:先进后出
存储表示方法:顺序栈和链栈(本文用的顺序栈)
代码实现:
<textarea readonly="readonly"name="code"
class="c">
#include<stdio.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 100//存储空间初始分配量
#define STACKINCREMENT 10//存储空间分配增量
#define OK 1
#define ERROR 0
#define OVERFLOW -1
#define TRUE 1
#define FALSE 0
typedef int SElemType;
typedef int Status;
typedef struct {
SElemType * base;
SElemType * top;//栈顶指针
int stacksize;//当前已分配的的存储空间(以元素为单位)
} SqStack;
//构造一个空栈S
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;
}
//插入元素e为新的栈顶元素
void push(SqStack *s, SElemType 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;
s->top++;
}
//若栈不空删除栈顶元素,用e返回该值
Status pop(SqStack *s, SElemType *e)
{
if (s->top == s->base)
return ERROR;
*e = *--(s->top);
return OK;
}
//判断栈是否为空
int StackEmpty(SqStack s)
{
if (s.top == s.base)return TRUE;
else return FALSE;
}
//进行转换
void conversion()
{
int N;
SElemType e;
SqStack s1;
InitStack(&s1);
printf("请输入一个10进制数:");
scanf_s("%d", &N);
while (N != 0)
{
push(&s1, N % 8);
N = N / 8;
}
printf("转换后的8进制数为:");
while (!StackEmpty(s1))
{
pop(&s1, &e);
printf("%d", e);
}
printf("\n");
}
//主函数
void main()
{
conversion();
system("pause");
}
</textarea>
以上仅是个人的想法,如有错误希望小伙伴们不吝赐教。嘻嘻