int Fun_Any_10(int cet) { Stack S = (Stack)malloc(sizeof(struct StackNode));; InitStack(S); char c; int num, sum = 0; printf("请输入要转化的数:\n"); c = getchar(); while (c != '\n') { if (isalnum(c)) Push(S, c - '0'); else Push(S, tolower(c) - 'a' + 10); c = getchar(); } int i = 0; while (!IsEmpty(S)) { num = Top(S); Pop(S); sum += (num * (int)pow(cet, i)); ++i; } free(S); return sum; }
时间: 2023-07-15 10:11:17 浏览: 86
这是一个将任意进制的数转成十进制的函数。输入参数是一个整数cet,表示需要转化的数的进制。函数内部首先创建了一个栈S,并且通过InitStack函数初始化。接着,程序通过getchar()函数逐个读取输入的字符,如果是数字或字母,则将其转化成数值并压入栈S中;如果不是,则直接忽略。最后,程序通过弹出栈顶元素并乘以对应进制的幂次方,计算出十进制数值。最后释放栈内存,并返回所得到的十进制数值。
相关问题
void Fun_10_Any(int number, int cet) { Stack S = (Stack)malloc(sizeof(struct StackNode));; int e; InitStack(S); if (number == 0) { printf("转换后的%d进制数为:0", cet); return; } while (number) { Push(S, number % cet); number = number / cet; } printf("转换后的%d进制数为:", cet); while (!IsEmpty(S)) { e = Top(S); Pop(S); switch (e) { case 10: case 11: case 12: case 13: case 14: case 15: e += 55; break; default:e += 48; } printf("%c", e); } free(S); }
这段代码实现了将一个十进制数转换为任意进制的功能。函数名为 Fun_10_Any,接受两个参数:一个是待转换的十进制数 number,另一个是目标进制 cet。代码中首先创建了一个栈 S,并初始化为空栈。然后判断待转换的数是否为 0,如果是,则直接输出转换后的结果为 0,结束函数。如果不是,则通过 while 循环将 number 不断除以 cet 并将余数压入栈 S 中,直到 number 变为 0。接下来,通过 while 循环取出栈 S 中的元素并打印,需要注意的是,如果取出的元素是 10~15(即十六进制数中的 A~F),需要将其转换为对应的字符,这里使用了 switch 语句实现。最后释放栈 S 的内存。
某一线性数据结构的数据集中的元素数据为不同城市的省会及其位置,数据元素类型定义为: typedef struct{ int city_id; double x; double y; double z; } ElemType; 通过创建链栈记录数据集,并实现销毁、入栈、出栈和获取栈顶元素的C语言代码实现。
好的,这是C语言实现某一线性数据结构的链栈操作的代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct stack_node {
ElemType data;
struct stack_node *next;
} StackNode, *LinkStack;
// 初始化链栈
LinkStack InitStack() {
LinkStack top = (LinkStack)malloc(sizeof(StackNode));
top->next = NULL;
return top;
}
// 入栈操作
void Push(LinkStack top, ElemType data) {
StackNode *node = (StackNode*)malloc(sizeof(StackNode));
node->data = data;
node->next = top->next;
top->next = node;
}
// 出栈操作
ElemType Pop(LinkStack top) {
if (top->next == NULL) {
printf("The stack is empty!\n");
return;
}
StackNode *node = top->next;
top->next = node->next;
ElemType data = node->data;
free(node);
return data;
}
// 获取栈顶元素
ElemType GetTop(LinkStack top) {
if (top->next == NULL) {
printf("The stack is empty!\n");
return;
}
return top->next->data;
}
// 销毁链栈
void DestroyStack(LinkStack top) {
StackNode *p = top->next;
while (p != NULL) {
top->next = p->next;
free(p);
p = top->next;
}
free(top);
}
// 测试代码
int main() {
LinkStack top = InitStack();
ElemType e1 = {1, 1.0, 2.0, 3.0};
Push(top, e1);
ElemType e2 = {2, 4.0, 5.0, 6.0};
Push(top, e2);
ElemType e3 = {3, 7.0, 8.0, 9.0};
Push(top, e3);
printf("栈顶元素: city_id=%d, x=%lf, y=%lf, z=%lf\n", GetTop(top).city_id, GetTop(top).x, GetTop(top).y, GetTop(top).z);
ElemType e4 = Pop(top);
printf("出栈元素: city_id=%d, x=%lf, y=%lf, z=%lf\n", e4.city_id, e4.x, e4.y, e4.z);
DestroyStack(top);
return 0;
}
阅读全文