前言
提示:數(shù)據(jù)結(jié)構(gòu)進(jìn)制轉(zhuǎn)化:
編程基于棧的操作實(shí)現(xiàn)將任意一個(gè)非負(fù)十進(jìn)制數(shù),打印輸出與其等值的八進(jìn)制數(shù)
一、第一種寫法
代碼如下(示例):
//Author:北硝 Date:2023.3.25
#include <stdio.h>
#include <stdlib.h>
//本程序主要實(shí)現(xiàn)功能說明
//編程基于棧的操作實(shí)現(xiàn)將任意一個(gè)非負(fù)十進(jìn)制數(shù),打印輸出與其等值的八進(jìn)制數(shù);
#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("請(qǐng)輸入一個(gè)十進(jìn)制數(shù):");
scanf_s("%d", &N);
while (N) {
Push(&S, N % 8);
N = N / 8;
}
printf("轉(zhuǎn)換為八進(jìn)制數(shù)為:");
while (!StackEmpty(S)) {
Pop(&S, &e);
printf("%d", e);
}
printf("\n");
return 0;
}
運(yùn)行效果展示:
二、第二種寫法
/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("請(qǐng)輸入一個(gè)十進(jìn)制數(shù): ");
scanf_s("%d", &num);
printf("轉(zhuǎn)換為八進(jìn)制數(shù)為: ");
printOctal(num);
printf("\n");
return 0;
}
運(yùn)行效果展示:文章來源:http://www.zghlxwxcb.cn/news/detail-737518.html
總結(jié)
數(shù)據(jù)結(jié)構(gòu)中編程基于棧的操作實(shí)現(xiàn)將任意一個(gè)非負(fù)十進(jìn)制數(shù),打印輸出與其等值的八進(jìn)制數(shù)文章來源地址http://www.zghlxwxcb.cn/news/detail-737518.html
到了這里,關(guān)于編程基于棧的操作實(shí)現(xiàn)將任意一個(gè)非負(fù)十進(jìn)制數(shù),打印輸出與其等值的八進(jìn)制數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!