创建一个顺序栈,可以将一个十进制数N转换为其他进制数d。要求程序过程有判断是否是空栈、求栈的长度、读出栈顶元素、置空栈、销毁栈这些程序,C语言
时间: 2024-10-28 20:12:25 浏览: 9
为了创建一个顺序栈(也称为数组栈)用于将十进制数转换为其他进制数,我们首先需要定义一个结构体表示栈节点,然后实现栈的基本操作,如初始化、入栈、出栈、检查栈是否为空以及获取栈长度等。这里是一个简单的C语言实现:
```c
#include <stdio.h>
#include <stdbool.h>
// 定义栈节点结构
typedef struct {
int data; // 存储的数据
struct Node* next; // 指向下一个节点的指针
} StackNode;
// 初始化栈
void initStack(StackNode** top) {
*top = NULL;
}
// 判断栈是否为空
bool isEmpty(StackNode* top) {
return top == NULL;
}
// 获取栈长度
int getStackSize(StackNode* top) {
int size = 0;
StackNode* temp = top;
while (temp != NULL) {
size++;
temp = temp->next;
}
return size;
}
// 入栈
void push(StackNode** top, int value, int d) {
StackNode* newNode = (StackNode*)malloc(sizeof(StackNode));
if (newNode != NULL) {
newNode->data = value % d;
newNode->next = *top;
*top = newNode;
} else {
printf("Error: Memory allocation failed.\n");
}
}
// 出栈并返回栈顶元素(假设当前栈非空)
int pop(StackNode** top, int d) {
if (isEmpty(*top)) {
printf("Error: Stack is empty.\n");
return -1; // 或者抛出异常
}
StackNode* temp = *top;
int result = temp->data;
*top = (*top)->next;
free(temp);
return result;
}
// 置空栈
void clearStack(StackNode** top) {
StackNode* current = *top;
while (current != NULL) {
StackNode* temp = current;
current = current->next;
free(temp);
}
*top = NULL;
}
// 销毁栈
void destroyStack(StackNode** top) {
clearStack(top);
free(*top);
*top = NULL;
}
int main() {
StackNode* stackTop = NULL;
int N = 12345, targetBase = 8; // 示例值
initStack(&stackTop);
push(&stackTop, N, 10); // 将十进制数压入栈
if (!isEmpty(stackTop)) {
printf("Converted number in base %d: ", targetBase);
while (!isEmpty(stackTop)) {
int num = pop(&stackTop, targetBase);
if (num != -1) {
printf("%d", num);
if (targetBase > 1) printf(".");
}
}
printf("\n");
}
destroyStack(&stackTop);
return 0;
}
```
这个示例中,栈用于存储十进制数分解后的每一位,通过不断弹出栈顶元素并乘以目标基数得到对应进制的结果。注意,实际应用中可能需要处理更大规模的数值,比如使用动态分配内存。
阅读全文