用c语言完成这两个功能(1)利用栈的基本操作将一个十进制的正整数转换成R进制数据,并将其转换结果输出。(2) 利用栈的基本操作对给定的字符串判断其是否是回文,若是则输出“Right”,否则输出“Wrong”。
时间: 2024-05-15 16:18:18 浏览: 8
您好,关于您的问题,我可以为您提供一些代码示例:
(1) 将一个十进制的正整数转换成R进制数据:
```
#include <stdio.h>
#include <stdlib.h>
#define MAX_STACK_SIZE 100 // 栈的最大容量
typedef struct { // 栈的结构体定义
int top; // 栈顶指针
int data[MAX_STACK_SIZE]; // 存储数据的数组
} Stack;
void initStack(Stack* s) { // 初始化栈
s->top = -1;
}
int isFull(Stack* s) { // 判断栈是否已满
return s->top >= MAX_STACK_SIZE - 1;
}
int isEmpty(Stack* s) { // 判断栈是否为空
return s->top < 0;
}
void push(Stack* s, int x) { // 将元素入栈
if (isFull(s)) {
printf("Error: stack overflow!\n");
exit(-1);
}
s->data[++s->top] = x;
}
int pop(Stack* s) { // 将栈顶元素出栈
if (isEmpty(s)) {
printf("Error: stack underflow!\n");
exit(-1);
}
return s->data[s->top--];
}
void trans(int n, int r) { // 将十进制正整数n转换成r进制数
Stack s;
initStack(&s);
while (n > 0) { // 不断地将n对r取余数,并将余数入栈
push(&s, n % r);
n /= r;
}
while (!isEmpty(&s)) { // 将栈中的元素一次弹出,输出即可得到转换结果
printf("%d", pop(&s));
}
printf("\n");
}
int main() {
int n, r; // n是十进制正整数,r是目标进制
printf("Please input a positive integer and its target radix:\n");
scanf("%d%d", &n, &r);
printf("The result is:\n");
trans(n, r);
return 0;
}
```
(2) 判断一个字符串是否为回文串:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STACK_SIZE 100 // 栈的最大容量
typedef struct { // 栈的结构体定义
int top; // 栈顶指针
char data[MAX_STACK_SIZE]; // 存储数据的数组
} Stack;
void initStack(Stack* s) { // 初始化栈
s->top = -1;
}
int isFull(Stack* s) { // 判断栈是否已满
return s->top >= MAX_STACK_SIZE - 1;
}
int isEmpty(Stack* s) { // 判断栈是否为空
return s->top < 0;
}
void push(Stack* s, char x) { // 将元素入栈
if (isFull(s)) {
printf("Error: stack overflow!\n");
exit(-1);
}
s->data[++s->top] = x;
}
char pop(Stack* s) { // 将栈顶元素出栈
if (isEmpty(s)) {
printf("Error: stack underflow!\n");
exit(-1);
}
return s->data[s->top--];
}
int isPalindrome(char* str) { // 判断一个字符串是否为回文串
Stack s;
initStack(&s);
int len = strlen(str);
for (int i = 0; i < len / 2; i++) { // 将字符串前一半字符入栈
push(&s, str[i]);
}
int j = len - len / 2; // j指向字符串后一半的开头
while (!isEmpty(&s)) { // 依次将栈中的元素和字符串后一半中的元素比较
if (pop(&s) != str[j++]) {
return 0; // 如果有不同则不是回文串
}
}
return 1; // 如果全部比较都相同,则是回文串
}
int main() {
char str[MAX_STACK_SIZE]; // 定义一个字符数组用来存储字符串
printf("Please input a string:\n");
scanf("%s", str);
if (isPalindrome(str)) {
printf("Right\n");
} else {
printf("Wrong\n");
}
return 0;
}
```
希望能够帮到您!