前言
提示:数据结构进制转化:
编程基于栈的操作实现将任意一个非负十进制数,打印输出与其等值的八进制数
一、第一种写法
代码如下(示例):
//Author:北硝 Date:2023.3.25
#include <stdio.h>
#include <stdlib.h>
//本程序主要实现功能说明
//编程基于栈的操作实现将任意一个非负十进制数,打印输出与其等值的八进制数;
#define STACK_INIT_SIZE 100
#define STACK_INCREMENT 10
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define TRUE 1
#define FALSE 0
typedef int SElemType;
typedef int Status;
typedef struct {
SElemType* base;
SElemType* top;
int stacksize;
} SqStack;
Status InitStack(SqStack* S) {
S->base = (SElemType*)malloc(STACK_INIT_SIZE * sizeof(SElemType));
if (!S->base) {
return OVERFLOW;
}
S->top = S->base;
S->stacksize = STACK_INIT_SIZE;
printf("栈初始化成功!\n");
return OK;
}
Status Push(SqStack* S, SElemType e) {
if (S->top - S->base >= S->stacksize) {
S->base = (SElemType*)realloc(S->base, (S->stacksize + STACK_INCREMENT) * sizeof(SElemType));
if (!S->base) {
return OVERFLOW;
}
S->top = S->base + S->stacksize;
S->stacksize += STACK_INCREMENT;
}
*S->top++ = e;
return OK;
}
Status Pop(SqStack* S, SElemType* e) {
if (S->top == S->base) {
return ERROR;
}
*e = *--S->top;
return OK;
}
Status StackEmpty(SqStack S) {
if (S.top == S.base) {
return TRUE;
}
return FALSE;
}
int main() {
SqStack S;
int N, e;
InitStack(&S);
printf("请输入一个十进制数:");
scanf_s("%d", &N);
while (N) {
Push(&S, N % 8);
N = N / 8;
}
printf("转换为八进制数为:");
while (!StackEmpty(S)) {
Pop(&S, &e);
printf("%d", e);
}
printf("\n");
return 0;
}
运行效果展示:
二、第二种写法
/Author:北硝 Date:2023.3.25
#include <stdio.h>
#include <stdlib.h>
#define STACK_SIZE 50
typedef struct {
int top;
int stack[STACK_SIZE];
} Stack;
void initStack(Stack *s) {
s->top = -1;
}
void push(Stack *s, int value) {
if (s->top >= STACK_SIZE - 1) {
printf("Stack Overflow\n");
return;
}
s->top++;
s->stack[s->top] = value;
}
int pop(Stack *s) {
if (s->top < 0) {
printf("Stack Underflow\n");
exit(1);
}
int value = s->stack[s->top];
s->top--;
return value;
}
int isEmpty(Stack *s) {
return (s->top == -1);
}
void printOctal(int num) {
Stack s;
initStack(&s);
while (num != 0) {
int remainder = num % 8;
push(&s, remainder);
num /= 8;
}
if (isEmpty(&s)) {
printf("0");
}
while (!isEmpty(&s)) {
int octalDigit = pop(&s);
printf("%d", octalDigit);
}
}
int main() {
int num;
printf("请输入一个十进制数: ");
scanf_s("%d", &num);
printf("转换为八进制数为: ");
printOctal(num);
printf("\n");
return 0;
}
运行效果展示:
文章来源:https://www.toymoban.com/news/detail-737518.html
总结
数据结构中编程基于栈的操作实现将任意一个非负十进制数,打印输出与其等值的八进制数文章来源地址https://www.toymoban.com/news/detail-737518.html
到了这里,关于编程基于栈的操作实现将任意一个非负十进制数,打印输出与其等值的八进制数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!