|
实验目的及要求: 熟悉利用栈完成m进制数向n进制数的转换。 | ||||||||||
|
实验内容: 目的:掌握栈的后进先出原则在解决实际问题中的应用。 内容:利用栈进行数制转换,以m进制数向n进制数转换为例。用栈编写满足下列要求的程序: 对输入的任意个非负m进制数,打印出与其值相等的n进制数。 具体实现过程: 1、定义栈,包括初始分配,栈顶指针,栈底指针。 2、定义需要用到的函数。 (1)构造空栈:InitStack() (2)进栈:Push() (3)出栈:Pop() (4):数制转换函数:Conversion() 3、对函数进行连接。 | ||||||||||
|
实验步骤与程序: #include<stdio.h> #include<stdlib.h> #include<string.h> #define SIZE 100 typedef struct { int *base; int *top; int size; }sqstack; sqstack initstack() { sqstack s; s.base = (int *)malloc(SIZE * sizeof(int)); s.top = s.base; s.size = 0; return s; } sqstack push(sqstack s, int e) { *s.top = e; s.top++; s.size++; return s; } sqstack pop(sqstack s) { if (s.top == s.base) { return s; } s.top--; return s; } int tranto10(char *ch, int m) { int res = 0; for (int i = 0; i < strlen(ch); i++) { if (ch[i] >= '0'&&ch[i] <= '9') { res = res * m + ch[i] - '0'; } if (ch[i] >= 'A'&&ch[i] <= 'Z') { res = res * m + ch[i] - 'A' + 10; } } return res; } sqstack tranton(int data, int n) { sqstack s; s = initstack(); while (data) { s=push(s, data%n); data = data / n; } return s; } void print(sqstack s) { while (1) { s = pop(s); int c = *s.top; if (c >= 10) { printf("%c ", 'A' + c - 10); } else { printf("%d ", c); } if (s.top==s.base) break; } printf("\n"); } int main() { int m, n; printf("请输入转化前后的进制,以空格分隔\n"); scanf("%d %d", &m, &n); printf("请输入 %d 进制数字\n", m); char str[100] = { 0 }; scanf("%s", str); int ten = tranto10(str, m); sqstack s = tranton(ten, n); printf("转化后的结果如下:\n"); print(s); return 0; } | ||||||||||
|
运行结果:
结果分析与讨论:
|
c语言/c++(数据结构篇) 之 栈的数制转换实例(栈和队列)(3/7)
于 2023-06-29 10:21:21 首次发布
该文介绍了一种使用栈进行数制转换的方法,从m进制到n进制。通过定义栈的数据结构,实现进栈、出栈操作,并编写了转换函数。程序首先将输入的m进制数转换为十进制,然后利用栈的后进先出特性将其转换为n进制。最后展示了程序的实现代码和运行结果。

5367

被折叠的 条评论
为什么被折叠?



