IT 프로그래밍/자료구조 38

[자료구조] 클래스

C++ 클래스와 추상 데이터 타입클래스는 사용자 정의 데이터 유형으로, 데이터 멤버와멤버 함수를 가집니다. 데이터 멤버는 데이터를 저장하는 필드이고, 멤버 함수는 이러한 변수를 조작하는 함수입니다.  class Person{public: string name; int age; void print() { cout name = "Bob"; ptr_person->age = 24; ptr_person->print(); return 0;}c언어의 struct와 class는 데이터 멤버의 포함이었지만 c++은 멤버 함수 또한 포함할 수 있습니다.  클래스가 멤버 함수를 가지고 있고 이 멤버 함수또한 데이터처럼 호출을 할 수 있습니다.  그리고 Person 객체를 동적 생성하고 객체의 주소를 저장하는 포인터 변수이..

[자료구조] 스택의 구현

스택 구현 방법 - 배열스택은 리스트 이기에 배열로 구성하는 방법입니다. char mystack[MAX_CAPACITY]; // 스택에 저장되는 데이터의 타입을 문자(char)라고 가정하자.int top_pos = -1;bool full() { return top_pos == MAX_CAPACITY - 1;}bool empty() { return top_pos == -1;}void push(char c) { if (full()) throw runtime_error("stack_full"); mystack[++top_pos] = c;}void pop() { if (empty()) throw runtime_error("stack_empty"); t..

자료구조 4장 스택(STACK)

스택이란?스택이란 일종의 리스트단, 데이터의 삽입과 삭제가 한쪽 끝에서만 이루어짐LIFO(Last-In, First-Out)삽입/삭제가 일어나는 쪽을 스택의 top이라고 부름스택이 지원하는 연산push : 스택에 새로운 원소를 삽입pop : 스택의 top에 있는 원소를 스택에서 제거top 혹은 peek : 스택 top의 원소를 제거하지 않고 반환empty : 스택이 비어있는지 검사size : 저장된 원소의 개수를 반환스택 응용 예 : 괄호 검사 문제입력 수식의 괄호가 올바른지 검사 예) [a + b * {c / ( d - e ) } ] + ( d / e )  단순히 여는 괄호와 닫는 괄호의 개수 비교 만으로는 부족해 스택을 이용해서 검사합니다.여는 괄호는 스택에 push닫는 괄호는 스택 top과 같은 유..

[컴퓨터네트워크] part2

인터넷 5계층응용계층 (application) - 네트워크 어플리케이션 관련된 기술 지원 (http, imap, smtp, dns)전송계층 (transport) - 프로세스와 프로세스 간 데이터 전송(udp, tcp)네트워크계층 (network) - 출발지에서부터 목적지까지 데이터그램 라우팅 제공 (ip, routing protocols)링크계층 (link) - 인접한 이웃 요소간의 데이터 전송(ethernet, 802.11, ppp)물리계층 (physical) - bits "on the wire" copper나 이런 것OSI 7계층 응용계층 (application) - 네트워크 어플리케이션 관련된 기술 지원 (http, imap, smtp, dns)presentation - 데이터 표현에 관련된 기능 ..

[자료구조] Polynomial

add_term다항식 poly에 새로운 하나의 항을 추가하는 함수입니다. 두 가지 경우가 있습니다추가하려는 항과 동일 차수의 항이 이미 있는 경우 : 기존 항의 계수만 변경그렇지 않은 경우 : 새로운 항을 삽입(형들은 차수의 내림차순으로 항상 정렬 됨)void add_term(Polynomial& poly, int c, int e){ if (c == 0) return; Term* p = poly.first, * q = nullptr; while (p != nullptr && p->expo > e) { q = p; p = p->next; } if (p != nullptr && p->expo == e) { p->coef += c; if (p->coef == 0) if (q == nullptr) ..

[자료구조] 다항식의 표현

연결리스트를 이용하여 하나의 다항식을 표현하는 구조체 Polynomial을 정의합니다. 다항식을 항들의 연결리스트로 표현하고 항들은 차수에 대해서 내림차순으로 정렬하여 저장하며, 동일 차수의 항을 2개 이상 가지지 않게 합니다. 또한 계수가 0인 항이 존재하지 않게 합니다. 하나의 항은 계수와 지수에 의해 정의하며 하나의 항을 표현하기 위해 구조체 Term을 정의합니다. 또한 변수 x의 값이 주어질 때 다항식 함수를 계산합니다.  구조체 Polynomial을 정하여 하나의 구조체 polynomial은 이름을 저장하는 name을 만듭니다. 이런 항을 연결리스트로 연결해 헤드를 Polynomial structure안에 first를 넣어서 저장하는 것입니다. 추가로 이 다항식의 항의 개수를 저장하는 size가..

[자료구조] 연결리스트

배열 vs 연결리스트리스트는 기본적인 연산 삽입, 삭제, 검색 등과 더불어 리스트를 대표하는 두 가지 방법은 배열과 연결리스트입니다.  배열의 단점은 크기가 고정되어 있어 reallocation이 필요하며 리스트의 중간에 원소를 삽입하거나 삭제할 경우 다수의 데이터를 옮겨야 하는 단점이 있습니다. 하지만 연결리스트 같은 경우는 다른 데이터의 이동없이 중간에 삽입이나 삭제가 가능하며, 길이의 제한이 없습니다. 하지만 랜덤 엑세스는 불가능합니다.  배열은 크기가 동일한 데이터를 저장하는 자료구조이기 때문에 한 칸의 크기는 다 같습니다. 100번째 원소에 위치를 간단한 상수로 계산할 수 있기 때문에 첫 번째나 100번째나 덧셈 한번 더한다는 차이밖에 없기에 랜덤 엑세스가 가능합니다.  중간에 데이터를 삽입할 ..

[자료구조] c++ 주소록 프로그램

C++의 단어 쪼개기#include #include #include #include using namespace std;int main(){ string line; while (getline(cin, line)) { cout tokens = split_line(line, ' '); for (string str : tokens) cout split_line(string& line, char delimiter) { vector tokens; stringstream sstream(line); string str; while (getline(sstream, str, delimiter)) tokens.push_back(str); return tokens;}string vector를 만들어서 저장을 한..