编写一个程序,实现依次将元素进栈,获取栈顶元素,出栈;对输入的任意一个非负十进制整数N,输出与它等值的十六进制数,用C语言
时间: 2024-09-27 10:17:26 浏览: 42
在C语言中,你可以使用`stdio.h`, `stdlib.h`和`string.h`头文件来实现这个功能。这里涉及到的主要数据结构是链表(模拟栈),以及转换整数到十六进制的函数。下面是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义栈结构体
typedef struct {
int value;
char* hex;
struct stack_node* next;
} StackNode;
typedef struct {
StackNode* top;
} Stack;
// 创建一个新的栈节点并初始化
StackNode* create_stack_node(int val) {
StackNode* node = (StackNode*)malloc(sizeof(StackNode));
node->value = val;
node->hex = NULL; // 初始化为NULL,后续会计算并分配内存
node->next = NULL;
return node;
}
// 将元素推入栈
void push(Stack* stack, int val) {
StackNode* newNode = create_stack_node(val);
if (!stack->top) {
stack->top = newNode;
} else {
newNode->next = stack->top;
stack->top = newNode;
}
}
// 获取栈顶元素
int get_top(Stack* stack) {
if (stack->top == NULL) {
printf("Stack is empty.\n");
return -1;
}
return stack->top->value;
}
// 出栈并打印十六进制
void pop_and_print_hex(Stack* stack) {
int top_val = get_top(stack);
if (top_val != -1) {
stack->top = stack->top->next;
printf("Hex representation of %d is: %s\n", top_val, top_val > 0 ? hexdigit[top_val] : "0");
}
}
// 十进制转十六进制字符数组
const char* hexdigit[] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"};
// 主函数
int main() {
Stack stack;
stack.top = NULL;
// 输入N
int N;
scanf("%d", &N);
// 入栈操作
for (int i = 0; i <= N; i++) {
push(&stack, i);
}
// 依次获取、打印和出栈
while (!stack.top) {
pop_and_print_hex(&stack);
}
return 0;
}
```
这个程序首先创建一个栈结构,并实现了入栈、获取栈顶元素和出栈操作。然后在主函数中,用户输入一个非负整数N,程序将其依次压入栈,再逐一获取栈顶元素并转换成十六进制形式。
阅读全文