设计一个C语言代码,包含顺序栈输入和链式栈输入,两者都可多个元素输入;并且两者都可以多个元素输出,之后再设计一个将十进制转换为二进制,八进制,十六进制的转换程序(结合顺序栈代码),要求只有一个主函数,要用什么功能自己调用
时间: 2024-10-22 13:24:54 浏览: 17
实验报告(栈和队列).docx
为了满足您的需求,我们可以分别创建顺序栈(数组实现)和链式栈(链表实现)的数据结构,并提供相应的入栈、出栈操作。然后,我们将设计一个单独的函数负责十进制转二进制、八进制和十六进制的功能。这里是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义顺序栈(数组)
#define MAX_STACK_SIZE 100
typedef struct {
int stack[MAX_STACK_SIZE];
int top;
} Stack;
// 序列栈操作
void push_seq(Stack *s, int value) {
if (s->top < MAX_STACK_SIZE) {
s->stack[s->top++] = value;
} else {
printf("Stack overflow!\n");
}
}
int pop_seq(Stack *s) {
if (s->top > 0) {
return s->stack[--s->top];
} else {
printf("Stack underflow!\n");
return -1;
}
}
// 链式栈操作(这里仅作简述,实际需要定义节点结构并处理指针)
typedef struct Node {
int data;
struct Node* next;
} LinkNode;
void push_link(LinkNode** head, int value) {
LinkNode* newNode = (LinkNode*)malloc(sizeof(LinkNode));
newNode->data = value;
newNode->next = *head;
*head = newNode;
}
int pop_link(LinkNode** head) {
if (*head != NULL) {
int value = (*head)->data;
LinkNode* temp = *head;
*head = (*head)->next;
free(temp);
return value;
} else {
printf("Stack empty!\n");
return -1;
}
}
// 十进制转其他进制
void decimal_to_other(int num, char base[], int len) {
Stack seqStack;
int i = 0;
while (num > 0) {
push_seq(&seqStack, num % base);
num /= base;
}
for (i = 0; i < len; ++i) {
printf("%d", pop_seq(&seqStack));
}
printf("\n");
}
// 主函数
int main() {
Stack seqStack;
LinkNode* linkHead = NULL;
// 测试顺序栈和链式栈
for (int j = 1; j <= 5; ++j) {
push_seq(&seqStack, j);
push_link(&linkHead, j);
printf("Sequence Stack: ");
decimal_to_other(pop_seq(&seqStack), "10", 2); // 输出二进制
printf("Binary: ");
decimal_to_other(pop_seq(&seqStack), "8", 2); // 输出八进制
printf("Octal: ");
decimal_to_other(pop_seq(&seqStack), "16", 2); // 输出十六进制
printf("\nLinked Stack: ");
printf("%d\n", pop_link(&linkHead)); // 输出数字
}
return 0;
}
```
这个例子展示了如何使用C语言实现顺序栈和链式栈的基本操作,以及如何调用`decimal_to_other`函数进行十进制到二进制、八进制和十六进制的转换。注意,链式栈的部分需要对链表结构进行完整定义,这里省略了部分细节。在主函数中,你可以根据需要添加更多的测试或调用栈的操作。
阅读全文