请编制C程序,利用栈的顺序存储方式实现以下功能,栈的初始化、入栈、出栈、取栈顶元素、遍历栈等操作并利用栈的操作实现数制转换问题。
时间: 2024-04-30 10:01:54 浏览: 107
好的,我能够为您提供关于栈的C程序。以下是例程:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
/* 定义栈的结构体 */
typedef struct _stack {
int data[MAX_SIZE];
int top; //栈顶指针
} Stack;
/* 初始化栈 */
void init_stack(Stack *s) {
s->top = -1;
}
/* 入栈操作 */
void push(Stack *s, int x) {
if (s->top == MAX_SIZE - 1) {
printf("栈满,无法入栈\n");
exit(EXIT_FAILURE);
}
s->data[++(s->top)] = x;
}
/* 出栈操作 */
int pop(Stack *s) {
if (s->top == -1) {
printf("栈空,无法出栈\n");
exit(EXIT_FAILURE);
}
return s->data[(s->top)--];
}
/* 取栈顶元素 */
int get_top(Stack *s) {
if (s->top == -1) {
printf("栈空\n");
exit(EXIT_FAILURE);
}
return s->data[s->top];
}
/* 遍历栈 */
void traverse_stack(Stack *s) {
int i;
for (i = s->top; i >= 0; i--)
printf("%d ", s->data[i]);
printf("\n");
}
/* 数制转换 */
void conversion(int n, int base) {
Stack stack; // 定义一个栈
int tmp;
init_stack(&stack); // 初始化栈
while (n) {
push(&stack, n % base); // 入栈操作
n /= base;
}
while (stack.top != -1) {
tmp = pop(&stack); // 出栈操作
printf("%X", tmp);
}
}
int main() {
int n, base;
printf("请输入需要转换的数字和进制(用空格隔开):");
scanf("%d %d", &n, &base);
printf("转换结果为:");
conversion(n, base); // 数制转换
printf("\n");
return 0;
}
```
请问这个答案是否满意?
阅读全文