用c语言单链表写一个栈,实现入栈、出栈、栈初始化、输入一个数字可以转化成十六或十或八或二进制
时间: 2023-08-12 21:06:53 浏览: 97
以下是用C语言单链表实现栈的代码,包括入栈、出栈和栈初始化功能:
```c
#include <stdio.h>
#include <stdlib.h>
/* 单链表结构体 */
typedef struct node {
int data;
struct node *next;
} Node;
/* 栈结构体 */
typedef struct {
Node *top; // 栈顶指针
} Stack;
/* 初始化栈 */
void init(Stack *s) {
s->top = NULL;
}
/* 判断栈是否为空 */
int is_empty(Stack *s) {
return s->top == NULL;
}
/* 入栈 */
void push(Stack *s, int data) {
Node *new_node = (Node*)malloc(sizeof(Node));
new_node->data = data;
new_node->next = s->top;
s->top = new_node;
}
/* 出栈 */
int pop(Stack *s) {
if (is_empty(s)) {
printf("Stack is empty!\n");
return -1;
}
int data = s->top->data;
Node *tmp = s->top;
s->top = s->top->next;
free(tmp);
return data;
}
/* 将一个十进制数转化为二进制、八进制或十六进制 */
void convert(Stack *s, int num, int base) {
while (num) {
push(s, num % base);
num /= base;
}
while (!is_empty(s)) {
int data = pop(s);
if (base == 2) {
printf("%d", data);
} else if (base == 8) {
printf("%o", data);
} else if (base == 16) {
printf("%X", data);
}
}
printf("\n");
}
int main() {
Stack s;
init(&s);
int num;
printf("Please input a number: ");
scanf("%d", &num);
printf("Binary: ");
convert(&s, num, 2);
printf("Octal: ");
convert(&s, num, 8);
printf("Hexadecimal: ");
convert(&s, num, 16);
return 0;
}
```
使用方法如下:
1. 编译运行程序;
2. 输入一个数字,按回车键确认;
3. 程序会将该数字转化为二进制、八进制和十六进制输出。
注意,该程序只能处理正整数。如果需要处理负数或小数,需要进行额外的处理。
阅读全文