用C语言定义链式栈,并使用链式栈来实现:十进制的书到七进制的转换的程序
时间: 2024-10-14 11:09:05 浏览: 74
数据结构,用C语言实现顺序栈和链式队列的源码
在C语言中,我们可以使用结构体(struct)和指针来定义链式栈。首先,我们创建一个链式栈节点的数据结构:
```c
typedef struct Node {
int data; // 存储元素值
struct Node* next; // 指向下一个节点的指针
} StackNode;
```
然后定义链式栈数据结构:
```c
typedef StackNode* Stack; // 定义链式栈类型为指向StackNode的指针
Stack top = NULL; // 栈顶指针初始化为NULL
```
接下来,我们实现链式栈的基本操作,如入栈、出栈等:
```c
void push(Stack* stack, int value) {
StackNode* newNode = (StackNode*)malloc(sizeof(StackNode));
if (newNode == NULL) {
printf("Memory allocation failed.\n");
return;
}
newNode->data = value;
newNode->next = *stack;
*stack = newNode;
}
int pop(Stack* stack) {
if (*stack == NULL) {
printf("Stack is empty.\n");
return -1;
}
StackNode* temp = *stack;
int poppedValue = temp->data;
*stack = temp->next;
free(temp);
return poppedValue;
}
```
现在我们转向七进制转换程序,这个过程可以分为三个步骤:读取输入的十进制数、处理每一位并转换为七进制,以及将结果连接成字符串。
```c
// 省略其他辅助函数
void decimalToBase7(int num) {
char base7[] = "0123456"; // 七进制字符数组
Stack stack;
while (num > 0) {
push(&stack, num % 7); // 入栈当前位的数字
num /= 7; // 向左移一位
}
// 出栈并将数字转化为七进制字符串
char result[100];
int i = 0;
while (!isEmpty(stack)) {
result[i++] = base7[pop(&stack)];
}
result[i] = '\0'; // 添加字符串结束符
printf("Decimal number in base 7: %s\n", result);
}
// 辅助函数:检查链式栈是否为空
int isEmpty(Stack stack) {
return stack == NULL || stack->next == NULL;
}
```
这个程序会将用户输入的十进制整数逐位转换成对应的七进制字符,然后拼接成字符串。注意,实际编写时需要考虑错误处理和边界条件。
阅读全文