글을 쓰기에 앞서, C언어를 기반으로 서술함을 알립니다. 
 
이전 정리글 ↓

 

[자료구조] 2. 자료구조 기본 개념

[자료구조] 1. 자료구조 쉽게 이해하기 글을 쓰기에 앞서, C언어를 기반으로 서술함을 알립니다. 자료구조(Data Structure) 자료구조의 사전적 의미는 이렇다. 컴퓨터 과학에서 효율적인 접근 및 수정

w8err.tistory.com

 


배열(Array)

배열의 사전적 정의는 다음과 같다. 

같은 타입의 변수들로 이루어진 유한 집합으로 정의

같은 자료형(int, char 등...)이 한 데 모여있다고 이해하면 쉽다. 
많은 수의 데이터를 관리해야 한다면, 배열을 사용하면 된다. 
 
50개의 int형 변수를 선언해보자.

#include <stdio.h>

int main()
{
	int n1, n2, n3, n4, n5 // ... 이런 식으로 n50까지 작성한다.
 	// 또는
    int n1;
    int n2;
    int n3;
    // ... 이런 식으로 n50까지 작성한다.
 
}

이렇게 선언하면 무려 50개의 변수를 직접 코딩해야한다.
비효율적이니까 배열을 사용한다.

#include <stdio.h>

int main()
{
	int list[50];
    // 선언 끝!
}

위의 과정을 아주 편리하게 줄여주는 자료형이 배열(Array)이다. 
 

배열 ADT

배열의 핵심적인 내용들을 추상화 시켜보자.

더보기

Array ADT

객체 : <인덱스, 값> 쌍의 집합

연산 : 

* create(size) ::= size개의 요소를 저장할 수 있는 배열 생성

* get(A, i) ::= 배열 A의 i번째 요소 반환

* set(A, i, v) ::= 배열 A의 i번째 위치의 값 v 저장

 
위의 추상화된 내용들을 실제로 구현해보면...

int list[10];
// 	create 연산. 10개의 요소를 저장할 수 있는 list 배열 생성

list[3] = 7;
// 	set 연산. list 배열의 3번째 위치에 값 7 저장

number = list[3];
// 	get 연산. A => list 배열의 3번째 위치의 값을 number에게 반환

 
추상화된 연산들을 직관적으로 이해할 수 있다. 
 

2차원 배열

2차원 배열은, 요소들이 2차원 형태로 나열되는 걸 의미한다.
표(Table)나 액셀을 생각하면 쉽다.
가로줄을 행(row), 세로줄을 열(column)이라고 정의한다.
 
선언 방법은 다음과 같다.

int list[2][5]; 
// 행(row)이 2이고 열(column)이 5인 2차원 배열을 생성

 
결과와 인덱스 : 

list[0][0] list[0][1] list[0][2] list[0][3] list[0][4]
list[1][0] list[1][1] list[1][2] list[2][3] list[2][4]

 


구조체(Struct)

구조체의 사전적 정의는 이렇다.

하나 이상의 변수를 묶어서 새로운 자료형을 정의. 
또는 다양한 타입을 한 데 묶어서 새로운 자료형을 정의.

배열은 자료형이 같아야 된다는 제한이 있지만, 
구조체는 서로 다른 자료형이어도 선언할 수 있다. 
서로 다른 자료형들을 묶어서, 새로운 자료형을 선언하니까. 
 
이런 형태로 선언한다.

struct 구조체이름 {
	자료형 변수명;
	자료형 변수명;
	자료형 변수명;
    ...
};

 
구조체의 형식을 위처럼 정의했다면, 이제 변수로 사용할 수 있다. 
구조체 변수는 다음처럼 선언한다.

struct 구조체이름 구조체변수;

 
간단한 예로, 필자를 구조체화 시켜보자.

struct w8er {		// 다른 변수와 구분하기 위해 전부 대문자로 표기한다.

	char name[10];		//필자의 실명 	 
    	int age;		// 나이를 나타내는 정수값
    	bool gender;		// true = 남성, false = 여성 
    };

 
필자 w8er이란 구조체는 다음과 같은 속성을 갖는다.

  • 실명(name)
  • 나이(age)
  • 성별(gender)

※ 구조체 또는 클래스 안의 변수들을 멤버 변수라고 하는데, 따로 문자를 붙여 식별을 해주는 게 좋다. 협업할 때 도움이 된다.
이 강의에선 단순표현을 위해 생략하겠다.
ex) char m_name[10]; 
 

struct 키워드 다음에 오는 w8er는 구조체 태그(tag)다. 구조체의 이름이다.
 
하지만 아직 이렇게 한다고 해서 구현이 된 건 아니다. 
실제로 선언하고 사용해보자.

struct w8er w;
// w8er를 실제 변수로 선언. w8er 구조체 변수의 이름은 w다.

strcpy(w.name, "Joo");
w.age = 99;
w.gender = true;

 
구조체 안의 멤버를 사용하려면 쩜을 입력하면 된다.
'.' 을 멤버연산자(Membership Operator)라고 한다.
 

Typedef

C언어에선 typedef를 사용해 구조체를 새로운 타입으로 선언하는 게 가능하다.

typedef w8er {
	char name[10];
    int age;
    bool gender;
    } wiseman;
// 밑의 wiseman이 새로운 데이터 타입의 이름이 된다.

 
이렇게 작성하고 나면, 새로운 데이터 타입인 wiseman만을 이용해 변수를 선언할 수 있게 된다.

wiseman w;
// struct w8er w; 와 같음

// 또는 이렇게 선언할 수 있다. 멤버가 선언된 순서를 지켜주자.
wiseman w = { "Joo", 99, false };

 
구조체를 사용해 간단한 프로그램을 작성해보자.

#include <stdio.h>

typedef struct stdentTag {
    char name[10];	// 문자배열로 된 이름
    int age;		// 나이를 나타내는 정수값
    double gpa;		// 평균평점을 나타내는 실수값
    } student;
    
int main()
{
	student a = { "Kim", 20, 2.3 }; // 학생 Kim은 20살이고, 평균평점이 2.3이다.
    student b = { "Joo", 99, 4.5 }; // 학생 Joo는 99살이고, 평균평점이 4.5다. 
    return 0;
}

 

다음 정리글 ↓

 

[자료구조] 4. 배열의 응용 : 다항식

이전 강의 보러 가기 ↓ https://w8err.tistory.com/m/34 다항식우리가 흔히 아는 다항식을, 배열을 사용해 구현해 보자. 다항식은 다음과 같이 생겼다. 사진에 서술되어 있듯 각각 a = 계수, x^2 = 변수, 2 =

w8err.tistory.com

 

728x90
반응형