수정중.. 제대로 작동안한다.
회문이 아닌경우에도 회문으로 뜨거나
회문인 경우도 전부 회문이 아니라고 뜬다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 100
typedef char element;
typedef struct {
int front;
int rear;
element data[MAX_SIZE];
}DequeType;
void error(char* message) {
fprintf(stderr, "%s\n", message);
exit(1);
}
void init_deque(DequeType* q) {
q->front = 0;
q->rear = 0;
}
int is_empty_deque(DequeType* q) {
return q->front == q->rear;
}
int is_full_deque(DequeType* q) {
return (q->rear+1)%MAX_SIZE == q->front;
}
void add_front(DequeType* q, element e) {
if (is_full_deque(q)) {
error("FULL DEQUE");
}
q->data[q->front] = e;
q->front=(q->front-1+MAX_SIZE)%MAX_SIZE;
}
void add_rear(DequeType* q, element e) {
if (is_full_deque(q)) {
error("EMPTY DEQUE");
}
q->rear=(q->rear+1)%MAX_SIZE;
q->data[q->rear]=e;
}
element delete_front(DequeType* q) {
if (is_empty_deque(q)) {
error("EMPTY DEQUE");
}
q->front=(q->front+1)%MAX_SIZE;
return q->data[q->front];
}
element delete_rear(DequeType* q) {
if (is_empty_deque(q)) {
error("EMPTY DEQUE");
}
q->rear=(q->rear-1+MAX_SIZE)%MAX_SIZE;
return q->data[q->rear];
}
int getSize(DequeType* q) {
if (is_empty_deque(q)) {
return 0;
}
return (q->rear-q->front+MAX_SIZE)%MAX_SIZE;
}
void print_deque(DequeType* q) {
if (is_empty_deque(q)) {
error("EMPTY DEQUE");
return;
}
for (int i = q->front+1; i != (q->rear+1)%MAX_SIZE; i = (i+1)%MAX_SIZE) {
printf("%c ", q->data[i]);
}
}
int palindromeCheck(DequeType* q) {
while (getSize(q) > 1) { // 남은 요소가 1개 이상일 때 계속 반복
char cf = delete_front(q);
char cr = delete_rear(q);
if (cf != cr) {
return 0; // 대칭이 아닌 경우
}
}
return 1; // 대칭인 경우
}
int main(void) {
printf("문자열을 입력하시오: ");
char input[MAX_SIZE];
fgets(input, MAX_SIZE, stdin);
DequeType q;
init_deque(&q);
for (int i = 0; i < strlen(input); i++) {
if(input[i] >= 'a' && input[i] <= 'z') {
char tmp = input[i] - 32;
add_rear(&q,tmp);
}
else if(input[i]>='A' && input[i]<='Z') {
char tmp= input[i];
add_rear(&q,tmp);
}
else if(input[i]==' '||input[i]==','||input[i]=='\''||input[i]=='.'||input[i]=='"') {
continue;
}
}
print_deque(&q);
if(palindromeCheck(&q)) {
printf("palindrome\n");
}else {
printf("not palindrome\n");
}
return 0;
}
'DSA' 카테고리의 다른 글
연결리스트 (LinkedList) 활용 2 (0) | 2024.10.29 |
---|---|
리스트 2(Linked List) (0) | 2024.10.28 |
회문(Palindrome) 검사 (스택) (1) | 2024.10.27 |
스택 2개를 이용한 선형 큐의 구현 (0) | 2024.10.25 |
다항식 계산기 (Polynomial Calculator) (0) | 2024.10.02 |