数据结构实验二 堆栈

目录

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 100

typedef 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 100

typedef 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;
}

猜你喜欢

转载自blog.csdn.net/timberman666/article/details/134007543