• 검색 결과가 없습니다.

데이터 구조 실습 (7주차)

N/A
N/A
Protected

Academic year: 2021

Share "데이터 구조 실습 (7주차)"

Copied!
2
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

- 1 -

데이터 구조 실습 (7주차)

2021. 4. 14

학번: 성명:

※ 다음과 정의된 스택을 이용하여 문제를 해결하라.

#define MAX_SIZE 20

typedef struct { // 스택 타입 정의 int data[MAX_SIZE];

int top;

} stack_type;

typedef stack_type* stack_ptr;

void init(stack_ptr s) { s->top = -1; } int is_empty(stack_type s) {

return (s.top == -1);

}

int is_full(stack_type s) {

return (s.top == (MAX_SIZE - 1));

}

void push(stack_ptr s, int val) { if (is_full(*s)) {

fprintf(stderr, "Error: stack full\n");

return;

}else

s->data[++s->top] = val;

}

int pop(stack_ptr s) { if (is_empty(*s)) {

fprintf(stderr, "Error: stack empty\n");

exit(1);

}else

return s->data[s->top--];

}

1. 단지 소괄호(‘()’)만을 포함하는 수식에서 괄호가 올바르게 사용되었는지를 검사하는 프로그램을 작성하고자 한다. 다음에 답하시오.

a. 다음은 수식 exp를 매개변수로 전달받아서 그 수식에 포함된 괄호의 사용이 올바른지를 테스트하여 그 결과를 반환하는 paren_test()의 골격을 보여준다. 이를 완성하라.

// 스택 타입 정의: 6주차 실습 참고 // 스택 함수 작성

int paren_test(char exp[]) { char ch;

int i=0;

// 스택 생성 및 초기화: 6주차 실습 참고

while ((ch = exp[i++]) != '\0') {// exp에 포함된 기호를 한 개씩 가져와서 검사/처리 // ...

} // ...

}

b. 다음은 paren_test()를 테스트하는 main()을 다음과 같이 작성하고, 테스트하라.

int main() {

char exp[] = "((()))";

if (paren_test(exp)) printf("\nBalanced");

elseprintf("\nUnbalanced");

return 0;

}

c. exp가 다음의 식일 때 각각 테스트하라.

exp = "((()) (( )))"

exp = "((((()“

(2)

- 2 -

2. 1)에서 작성한 paren_test()를 수정하여 수식에 포함된 괄호의 번호를 다음과 같이 출력하도록 하라. 왼쪽 괄호가 나올 때마다 괄호 번호가 하나씩 증가한다. 오른쪽 괄호가 나오면 매칭되는 왼쪽 괄호 번호를 출력한다. 즉,

프로그램 결과는 다음과 같다.

exp = "((()) (( )))“

출력: 1 2 3 3 2 4 5 5 4 1 => Balanced

exp = "((((()“

출력: 1 2 3 4 5 5 => Unbalanced

3. 회문(palindrome)이란 앞뒤 어느 쪽에서 읽어도 같은 단어를 의미한다. 예를 들면, ”eye“, ”madam“은 회문이다. 스택을 이용하여 주어진 문자열이 회문인지 아닌지를 결정하는 프로그램을 작성하고자 한다.

여기서는 문제 단순화를 위해서 문자열에 구두점이나 공백을 포함하지 않는다고 가정한다. 다음에 답하시오.

a. 문자열 str을 매개변수로 전달받아서, str이 회문인지를 판단하여 그 결과(회문이면 1, 그렇지 않으면 0)를 반환하는 is_palindrome()을 작성하라.

b. 문자열 str을 다음과 같이 선언 및 초기화하고서, a)에서 작성한 is_palindrome()에 전달하여 회문 여부에 따라서 다음과 같이 출력하는 main()을 작성하고, 테스트하라.

str 출력

madam madam is palindrome

abcdecba abcdecba is NOT palindrome palindrome palindrome is NOT palindrome

참조

관련 문서

광주상점이 판매하고 있는 시계의 판매가 및 원가는 다음과 같다... 마스터 문자열 유형

™ 선언된 이름의 바인딩 정보를

 데이터베이스 개발자는 Oracle 8이나 IBM 의 DB2와 같은 데이터베이스 관리 시스템 에서 데이터 내용, 관계, 그리고 구조를 명 시하고 수정하기 위해서

분류 유형으로 복합 대화 및 단순 대화의 경우, 단순 대화는 하나의 완결된 대화 이동 연속체로 의사 소통 목적이 달성되는 경우를 말하고, 복합 대화는 여러 개의 대화

감속할 때는 가속 페달을 갑자기 놓으므로, 엔진이 고속회전하고 있을때 스로틀 밸브를 급히 닫으면 매니폴드에 순간적으로 강한 진공이 발생하여 저속회로를 통 해

생체구성물질의 구조 확인의 연구 탄수화물의 발견, 지질의 구조 확인 단백질의 구조 확인, 핵산의 구조 확인 2.. 신진대사

자동차전기 장치에 전원 공급원은 배터리와 발전기가 있다. 하지만 배터리 전원은 한계가 있기 때문에 시동 중 에는 배터리 충전과 각종 전기장치 전원의

한국항공대학교.. 부모모두외국인인외국인전형 역시 지원횟수에 포함하지