使用栈实现数制的转换,包括十进制到二、八、十六进制的转换C语言(单向链表实现栈)
时间: 2023-06-08 13:05:17 浏览: 145
好的,下面是C语言代码实现:
```c
#include<stdio.h>
#include<stdlib.h>
typedef struct node //定义单向链表结构体
{
int data;
struct node *next;
}Node;
Node *stack = NULL; //定义栈指针
//创建节点
Node* CreateNode(int value)
{
Node *p;
p = (Node*)malloc(sizeof(Node));
p -> data = value;
p -> next = NULL;
return p;
}
//进栈
void Push(Node **stack, int value)
{
Node *p = CreateNode(value);
if(*stack == NULL) //如果栈为空,则直接将元素插入栈顶
{
*stack = p;
}
else //如果栈不为空,则插入的元素成为新的栈顶
{
p -> next = *stack;
*stack = p;
}
}
//出栈
int Pop(Node **stack)
{
int value;
Node *p;
if(*stack == NULL) //如果栈为空,则抛出异常
{
printf("Stack is empty!\n");
return -1;
}
else //如果栈不为空,则取出栈顶元素
{
value = (*stack) -> data;
p = *stack;
*stack = (*stack) -> next;
free(p);
return value;
}
}
//将十进制数转化成其他进制的数
void Conversion(int num, int base)
{
char table[] = "0123456789ABCDEF"; //定义字符表
while(num)
{
Push(&stack, num % base); //将余数压入栈中
num /= base;
}
while(stack != NULL)
{
printf("%c", table[Pop(&stack)]); //依次出栈并打印元素
}
}
int main()
{
int num, base;
printf("Please enter the number you want to convert: ");
scanf("%d", &num);
printf("Please enter the base you want to convert to(2, 8 or 16): ");
scanf("%d", &base);
printf("The result is: ");
Conversion(num, base);
printf("\n");
return 0;
}
```
以上是使用单向链表实现栈,在C语言中实现数制的转换的代码,使用方法比较简单,只需输入要转换的数字和转换的进制即可获得转换结果。
阅读全文