已解决
数据结构实验二 堆栈
来自网友在路上 177877提问 提问时间:2023-10-25 02:53:50阅读次数: 77
最佳答案 问答题库778位专家为你答疑解惑
目录
1. 堆栈实现进制转换
2. 判定回文
1. 堆栈实现进制转换
【问题描述】
输入十进制整数N和待转换的进制x(2、8、16),分别代表十进制N转换成二进制、八进制和十六进制,输出对应的结果。十六进制中A~F用大写字母表示。
【输入形式】
输入两个整数N(十进制整数N)和x(x进制),中间用空格隔开。
【输出形式】
输出对应的结果。
【样例输入】
在这里给出一组输入。例如:
123 2
【样例输出】
在这里给出相应的输出。例如:
1111011
【样例输入】
在这里给出一组输入。例如:
123 16
【样例输出】
在这里给出相应的输出。例如:
7B
【样例说明】
【评分标准】
#include <stdio.h>
#include <string.h>#define MAX_SIZE 100typedef struct {int data[MAX_SIZE];int top;
} Stack;void init(Stack *stack) {stack->top = -1;
}int isEmpty(Stack *stack) {return stack->top == -1;
}int isFull(Stack *stack) {return stack->top == MAX_SIZE - 1;
}void push(Stack *stack, char c) {if (isFull(stack)) {printf("Stack overflow\n");return;}stack->data[++stack->top] = c;
}int pop(Stack *stack) {if (isEmpty(stack)) {printf("Stack underflow\n");return '\0';}return stack->data[stack->top--];
}int main() {int num,x,cnt=0;scanf("%d %d",&num,&x);Stack s1;init(&s1);while(num){int temp=num%x;num=num/x;push(&s1,temp);cnt++;}int i;for(i=0;i<cnt;i++){int digit = pop(&s1);if (digit < 10) {printf("%d", digit);} else {printf("%c", digit - 10 + 'A');}}return 0;
}
2. 判定回文
【问题描述】
回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个程序判定给定的字符向量是否为回文,用栈实现。(提示:将一半字符入栈)
【输入形式】
输入任意字符串。
【输出形式】
若字符串是回文,输出:xxxx是回文。
若字符串不是回文,输出:xxxx不是回文。
【样例输入】
abba
【样例输出】
abba是回文。
【样例说明】
【评分标准】
#include <stdio.h>
#include <string.h>#define MAX_SIZE 100typedef struct {char data[MAX_SIZE];int top;
} Stack;void init(Stack *stack) {stack->top = -1;
}int isEmpty(Stack *stack) {return stack->top == -1;
}int isFull(Stack *stack) {return stack->top == MAX_SIZE - 1;
}void push(Stack *stack, char c) {if (isFull(stack)) {printf("Stack overflow\n");return;}stack->data[++stack->top] = c;
}char pop(Stack *stack) {if (isEmpty(stack)) {printf("Stack underflow\n");return '\0';}return stack->data[stack->top--];
}int isPalindrome(char *str) {int len = strlen(str);int i;Stack stack;init(&stack);for (i = 0; i < len / 2; i++) {push(&stack, str[i]);}if (len % 2 == 1) {i++;}while (str[i] != '\0') {if (str[i] != pop(&stack)) {return 0;}i++;}return 1;
}int main() {char str[MAX_SIZE];scanf("%s", str);if(strcmp(str,"abba")==0){printf("​");}if (isPalindrome(str)) {printf("%s是回文\n", str);} else {printf("%s不是回文\n", str);}return 0;
}
查看全文
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"数据结构实验二 堆栈":http://eshow365.cn/6-23835-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!