当前位置:首页 > 编程笔记 > 正文
已解决

数据结构实验二 堆栈

来自网友在路上 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("&#8203;");}if (isPalindrome(str)) {printf("%s是回文\n", str);} else {printf("%s不是回文\n", str);}return 0;
}

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"数据结构实验二 堆栈":http://eshow365.cn/6-23835-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!