使用C语言设计一个链式栈,输入一个十进制数转换为十六进制数并将它存储到栈里,将十六进制数倒序输出
时间: 2023-07-16 22:11:40 浏览: 91
好的,以下是我为您提供的代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data;
struct node *next;
} Node;
typedef struct {
Node *top;
} Stack;
void initStack(Stack *stack) {
stack->top = NULL;
}
int isEmpty(Stack *stack) {
return stack->top == NULL;
}
void push(Stack *stack, int data) {
Node *newNode = (Node *) malloc(sizeof(Node));
newNode->data = data;
newNode->next = stack->top;
stack->top = newNode;
}
int pop(Stack *stack) {
if (isEmpty(stack)) {
printf("Error: stack is empty\n");
return -1;
} else {
Node *p = stack->top;
int data = p->data;
stack->top = p->next;
free(p);
return data;
}
}
void clearStack(Stack *stack) {
while (!isEmpty(stack)) {
pop(stack);
}
}
void decToHex(int n, Stack *stack) {
int remainder;
do {
remainder = n % 16;
push(stack, remainder);
n /= 16;
} while (n);
}
void printStack(Stack *stack) {
while (!isEmpty(stack)) {
int data = pop(stack);
if (data < 10) {
printf("%d", data);
} else {
printf("%c", 'A' + data - 10);
}
}
printf("\n");
}
int main() {
int n;
Stack stack;
initStack(&stack);
printf("Enter a decimal number: ");
scanf("%d", &n);
decToHex(n, &stack);
printf("Hexadecimal number: ");
printStack(&stack);
clearStack(&stack);
return 0;
}
```
这个程序使用链式栈实现了将输入的十进制数转换为十六进制数,并将结果存储在栈中,然后输出倒序的十六进制数。主要的函数是 `decToHex` 和 `printStack`。
`decToHex` 函数将十进制数转换为十六进制数,并将结果按位存储在栈中。具体来说,它使用一个循环来计算余数和商,然后将余数入栈,直到商为零。
`printStack` 函数从栈中弹出每个元素,并将它们打印到标准输出中。如果元素小于十,它将被视为十进制数字,并以十进制形式打印;否则,它将被视为十六进制数字,并以字母形式打印。
最后,程序使用 `clearStack` 函数释放栈中的所有节点,以避免内存泄漏。
阅读全文