用c语言编写一个链栈,实现出栈入栈判栈空显示链栈元素数值转换操作
时间: 2023-05-11 19:06:38 浏览: 131
利用栈实现数值转换的操作
好的,以下是用 C 语言编写的链栈代码,实现了出栈、入栈、判栈空、显示链栈元素、数值转换操作:
```
#include <stdio.h>
#include <stdlib.h>
// 定义链栈结构体
typedef struct StackNode {
int data;
struct StackNode *next;
} StackNode, *LinkStack;
// 初始化链栈
void InitStack(LinkStack *s) {
*s = NULL;
}
// 判断链栈是否为空
int IsEmpty(LinkStack s) {
return s == NULL;
}
// 入栈操作
void Push(LinkStack *s, int x) {
StackNode *p = (StackNode*)malloc(sizeof(StackNode));
p->data = x;
p->next = *s;
*s = p;
}
// 出栈操作
int Pop(LinkStack *s) {
if (IsEmpty(*s)) {
printf("栈已空,无法出栈!\n");
return -1;
}
StackNode *p = *s;
int x = p->data;
*s = p->next;
free(p);
return x;
}
// 显示链栈元素
void Display(LinkStack s) {
printf("链栈元素为:");
while (s != NULL) {
printf("%d ", s->data);
s = s->next;
}
printf("\n");
}
// 数值转换操作
void Convert(int n, int base) {
LinkStack s;
InitStack(&s);
while (n != 0) {
Push(&s, n % base);
n /= base;
}
printf("转换后的数值为:");
while (!IsEmpty(s)) {
printf("%d", Pop(&s));
}
printf("\n");
}
int main() {
LinkStack s;
InitStack(&s);
int choice, x, n, base;
while (1) {
printf("请选择操作:\n");
printf("1. 入栈\n");
printf("2. 出栈\n");
printf("3. 判栈空\n");
printf("4. 显示链栈元素\n");
printf("5. 数值转换\n");
printf("6. 退出\n");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("请输入要入栈的元素:");
scanf("%d", &x);
Push(&s, x);
break;
case 2:
Pop(&s);
break;
case 3:
if (IsEmpty(s)) {
printf("链栈为空!\n");
} else {
printf("链栈不为空!\n");
}
break;
case 4:
Display(s);
break;
case 5:
printf("请输入要转换的数值和进制:");
scanf("%d %d", &n, &base);
Convert(n, base);
break;
case 6:
exit(0);
default:
printf("输入有误,请重新输入!\n");
break;
}
}
return 0;
}
```
阅读全文