C언어를 이용한 자료구조 실습입니다. 덱은 전단과 후단 양쪽 모두에서 삽입과 삭제의 입출력과 반환이 가능한 원형 큐를 말합니다. 덱의 삽입/삭제 연산을 구현하고 이를 이용해 입력된 문자열이 회문인지 판별합니다. I. 문제 원형 연결리스트를 이용하여 아래와 같이 덱(이것을 ListDeq이라 한다)을 구현하고자 한다. ListDeq 타입(ListDeqType)을 노드에 대한 front, rear의 2개 포인터를 포함하는 구조체로 정의하라. front는 리스트의 첫번째 노드를, rear는 마지막 노드를 가리킨다. 노드는 (data, link)의 2개 필드를 포함하는 구조체이며, data는 문자 타입이며, link는 노드에 대한 포인터이다. 다음 덱의 연산을 ListDeq에 대해서도 정의하라 : init_que..
C언어를 이용한 자료구조 실습입니다. 연결리스트를 항상 오름차순으로 정렬된 연결리스트를 생성합니다. 순차탐색을 이용해 위치를 찾고 이전 노드에 연결하여 반환하는 insert() 함수를 구현합니다. I. 문제 노드의 구조는 (data, link)로 구성된다. 여기서 data는 정수 타입이며, link는 노드에 대한 포인터이다. 이러한 노드들로 연결되는 리스트를 고려한다. 다음 함수들을 C 함수로 작성하라. 정수 배열 a를 선언하면서 다음 수들로 초기화하라 : (5, 1, 3, 7, 1, 4, 3, 5, 2, 1, 9, 6, 2, 8, 3) 리스트 list에 포함된 노드들이 data 필드 값 기준으로 오름차순으로 정렬되어 있다고 가정한다. list와 정수 val를 전달받아서, val을 포함한 노드를 동적 생..
C언어를 이용한 자료구조 실습입니다. 덱을 구현하고 회문인지 확인하는 문제입니다. I. 문제 한 개의 문자열을 매개변수로 전달받고, 이 문자열이 앞에서부터 읽으나 뒤에서부터 읽으나 같은지를 판단하여 true 또는 false를 반환하는 check_str() 알고리즘을 작성하라. 가령, check_str()은 문자열이 “madam”이면 true를 반환하고, “data”이면 false를 반환하다. 단, 덱(deque)을 이용하라. 위에서 작성한 알고리즘을 C 함수로 작성하고, 또한 main() 함수를 작성하여 테스트하라. Main()에서는 사용자로부터 문자열을 입력받고, check_str()에 전달하고, 그 결과를 적절하게 출력한다. 위 과정을 사용자가 원할 때까지 반복되게 하라. II. 구현 #include..
C언어를 이용한 자료구조 실습입니다. 스택을 2개를 이용하여 큐를 구현합니다. 구현한 큐를 사용해 n번째 까지 피보나치 수열을 출력합니다. I. 문제 정수를 포함하는 2개의 스택 stk1, stk2가 주어져 있을 때, 이 2개의 스택을 이용하여 큐를 구현하고자 한다. 다음 큐 연산에 대한 알고리즘을 작성하라. - is_empty() - is_full() - enqueue(e) : 삽입 연산 (e는 삽입할 항목이다.) - dequeue() : 삭제 연산 사용자로부터 정수 n을 입력받고, n까지의 피보나치 수열을 출력하는 C 프로그램을 작성하고, 테스트하라. 단, 위에서 작성한 큐를 이용하라. II. 구현 [구현 알고리즘] 1. 스택1과 스택2를 생성한다. 2. push가 발생하면 스택1에 넣는다. 3. p..
C언어를 이용한 자료구조 실습입니다. 사용자로부터 식은 입력 받아 스택을 사용하여 후위 식으로 변환한 다음 계산하여 출력하는 문제입니다. 추가사항에 있는 거듭제곱, 오류정정, 두 자리 수(이상) 사용 가능을 구현하였습니다. I. 문제 사용자로부터 수식을 입력받고, 이를 후위 식으로 변환하고, 후위 식을 평가하여 그 결과 값을 출력하는 계산기 프로그램을 작성하고 테스트하라. [계산기 특징] - 입력: 3*(2+8)/5 - 출력: 3*(2+8)/5 = 6 [수식의 특징] - 다양한 괄호 포함 가능 - 공백 포함 가능 - 사칙 연산자 포함 [프로그램 작성 지침] 다음 함수들을 작성하고, 이용하라. - get_exp(exp) // 사용자로부터 식을 읽어들여서 반환 - postfix(iexp, pexp) // 중..
C언어를 이용한 자료구조 실습입니다. I. 문제 정수를 포함한 노드들로 구성된 연결 리스트를 구성하고, 이 리스트에 포함된 수를 출력하는 프로그램을 다음과 같이 작성하라. 연결리스트에 포함된 노드의 구조 타입은 다음과 같이 정의된다. typedef struct list { int val; struct list* next; } list; 1. 한 개의 list 타입의 노드를 동적 생성하고, val 필드는 난수(1~100의 범위)를 발생시켜 초기화하고, next 필드는 NULL로 초기화한 후에, 그 노드의 포인터를 반환하는 get_node()를 작성하라. 2. list 타입의 노드를 사용자가 원하는 개수만큼 생성하여(get_node()를 이용할 것) 다음과 같은 연결 리스트로 구성하여 첫번째 노드의 포인터를..
C언어를 이용한 자료구조 실습입니다. I. 문제 희소 행렬은 다음과 같은 타입으로 표현된다. 배열 data와 int 변수 num으로 구성된 구조체이다. data는 희소 행렬에서 0이 아닌 요소를 포함하며, 이 요소의 타입은 (row, col, val)을 포함하는 구조체이다. 여기서 row, col, val은 해당 요소의 행렬에서 행 위치, 열 위치, 값을 각각 표현한다. num은 data에 포함된 요소의 개수를 표현한다. data의 요소 타입을 element_ty로 정의하라. 희소 행렬의 타입을 sparse_matrix로 정의하라. p, q의 변수를 sparse_matrix의 타입으로 선언하면서, 다음 10*5 크기의 희소 행렬로 각각 초기화하라. 2개의 희소 행렬 p, q를 매개변수로 전달받고, 이 두..
C언어를 이용한 자료구조 실습입니다. I. 문제 2개의 다항식을 입력받아서 이들을 빼고, 그 결과 다항식을 출력하는 C 프로그램을 다음과 같이 작성하고, 실행을 통해서 테스트하라. - 다항식의 타입 poly를 정의하라. (다항식의 각 차수에 대해서 한 개의 항이 표현됨) - 2개의 다항식을 선언시 초기화하여 정의하라. - 매개변수로 전달된 다항식 p를 다항식의 형식으로 출력하는 함수 print_poly(p)를 작성하라. - 2개의 다항식, p1, p2를 전달받고, 이들을 빼고 그 결과 다항식 p3를 반환하는 sub_poly(p1, p2, p3)를 작성하라. - 다항식 p와 x 값을 매개변수로 전달받아서 다항식의 값을 계산하여 반환하는 함수 eval_poly (p, x)를 작성하라. II. 구현 #incl..