최신 C 프로그래밍 언어 문제해결에서 프로그래밍까지

Download Report

Transcript 최신 C 프로그래밍 언어 문제해결에서 프로그래밍까지

최신 C 프로그래밍 언어
문제해결에서 프로그래밍까지
개정판
10장 : 구조체와 공용체
도서출판 - 인터비젼
1
10장 구조체와 공용체

학습목표




1. 구조체와 공용체 의미와 특징을 이해한다.
2. 비트 필드 구조체 대해 이해한다.
3. 새로운 형 정의문(typedef)에 대해 이해한다.
4. 구조체와 포인터의 관계 및 구조체 매개변수를
이해한다.
 5. 중첩된 구조체에 대해 이해한다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
2
목차

10장 구조체와 공용체
 예습시간
– 구조체와 공용체의 개념
– 구조체 심화 학습
 실습시간
– 정적 구조체 활용
– 동적 구조체 활용
 연습시간
– 구조체 분석
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
3
예습시간 – 1 교시
구조체와 공용체의 개념
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
4
구조체와 공용체의 개념

학습 개요
 새로운 데이터 타입 정의 방법을 익힌다.
 복합 데이터 유형인 구조체와 공용체의 특징을 이해한다.
 구조체와 공용체의 관련 문법을 이해한다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
5
구조체와 공용체의 개념

새로운 타입 정의 (typedef)
 데이터 타입을 필요에 따라 다른 이름으로 정의
 사용형태
– typedef
[데이터형]
[새롭게 정의한 데이터형];
 사용 예
– typedef
– typedef
int
int *
INTEGER;
PINT;
 프로그램에서 사용되는 데이터 유형을 보다 독립적으로
유지할 수 있는 장점을 가진다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
6
구조체와 공용체의 개념

typedef 사용 예
















01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
int 형을 double 타입으로 변경 시
typedef double VALUE_TYPE;
수정만으로 모든 타입 수정됨
#include <stdio.h>
//타입 정의
typedef
int
VALUE_TYPE;
//함수 원형
VALUE_TYPE sum(VALUE_TYPE x, VALUE_TYPE y);
void main(){
VALUE_TYPE x,y, result;
x = 298, y=57;
result = sum(x,y);
printf("result = %d \n",result);
}
VALUE_TYPE sum(VALUE_TYPE x, VALUE_TYPE y){
VALUE_TYPE data;
data = x + y;
return data;
}
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
7
구조체와 공용체의 개념

구조체의 개념(struct)
 관련된 데이터 타입을 복합하여 하나의 새로운 타입으로
정의
 데이터 조합을 통한 의미 있는 데이터 정의
 일반적으로 레코드 형태를 가진다.
 구조체 형식
– struct [구조체 이름]{
»
»
»
»
»
»
[데이터
[데이터
[데이터
[데이터
...
[데이터
타입]
타입]
타입]
타입]
[변수이름1];
[변수이름1];
[변수이름1];
[변수이름1];
타입]
[변수이름1];
struct
[구조체 이름]
[데이터 타입]
[변수이름]
:
:
:
:
구조체 정의 키워드
구조체의 대표명
각 요소의 타입
각 구성요소의 이름
– };
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
8
구조체와 공용체의 개념

구조체 형태 선언 예
 학생에 대한 구조체 선언
학생 (student_type)
학번(int hakbun)
이름(char name[10])
struct student_type{
int hakbun;
char name[10];
char dept[20];
int age;
};
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
학과(char dept[20])
나이(int age)
//학번
//이름
//학과
//나이
9
구조체와 공용체의 개념

구조체 변수 선언과 초기화
 구조체 변수 선언
– 구조체 선언은 새로운 데이터 형의 선언하는 것으로 이 새로운 형의 구조체
타입을 사용하기 위해서는 구조체 변수 선언이 요구된다.
 구조체 변수 선언 방법
변수 선언 방법
struct{
....
} [변수명1],[변수명2], ...;
예제와 설명
예> struct{
...;
} x, y; // 구조체 변수 x와 y
구조체명이 생략된 형태로 구조체 선언과 동시에 변수들을 선언한다.
struct [구조체명]{
...
} [변수명1],[변수명2], ...;
예> struct stype{
...;
} x, y; // 구조체 변수 x, y
struct stype z; 구조체 변수 z
struct [구조체명]
구조체 명을 가지고 있으며 구조체 선언과 동시에 변수들을 선언하고 있으며,
선언 이후 이 구조체 이름을 통해 필요한 구조체변수를 선언할 수 있다.
[변수명3], ...;
typedef struct{
...
} [데이터 타입];
예> typedef struct{
...;
} CARD; // 새로운 데이터 타입
CARD x,y; // 구조체 변수 x, y
[데이터 타입] [변수명1],[변수명2]...;
typedef 문에 의해 구조체를 새로운 데이터 타입으로 정의하고 이 정의된 타
입을 이용해 변수들을 선언하고 있다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
10
구조체와 공용체의 개념

학생 구조체 변수와 메모리 관계
 구조체의 크기는 전체 구성요소의 크기이다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
11
구조체와 공용체의 개념

구조체 변수의 초기화
 일반변수나 배열 변수처럼 static이나 extern 구조체
변수는 선언과 동시에 초기화 될 수 있다.
 초기화 예
–
–
–
–
static STUDENT x = { 101, "Kim","Computer Science","20" };
초기 값의 구분은 쉼표(,)로 구분
순서대로 각 요소의 값 지정
정적 변수는 초기화 하지 않을 경우 디폴트 초기값을 가진다.
» 숫자 : 0
» 문자 : '\0'
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
12
구조체와 공용체의 개념

구조체 변수의 사용
 배열 요소의 접근은 첨자를 통해 이루어짐
 구조체 변수의 각 요소의 접근은 어떻게 이루어지는가?
– 구조체 요소 접근 연산자 : "."
– [구조체 변수이름].[요소 이름]
 사용예
–
–
–
–
x.hackbun = 100101;
strcpy(x.name,"w y kim");
strcpy(x.dept,"computer science");
x.age = 20;
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
13
구조체와 공용체의 개념

구조체와 구조체 변수 선언 그리고 사용 예
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <string.h> //strcpy 사용
//구조체 타입 선언
typedef struct{
출력 결과 :
int hakbun;
//학번
번호 : 101, 이름 : 홍길동, 학과 : 컴퓨터과학과, 나이 20
char name[10];
//이름
char dept[20];
//학과
번호 : 201, 이름 : 이철수, 학과 : 인터넷학과, 나이 20
int age;
//나이
}STUDENT;
void main(){
// 구조체 변수 선언
static STUDENT one ={ 101, "홍길동", "컴퓨터과학과", 20};
static STUDENT two ={ 201, "이철수", "인터넷학과",21};
//one 학생 출력
printf("번호 : %d, 이름 : %s , 학과 : %s , 나이 %d \n",
one.hakbun , one.name , one.dept , one.age);
//two 학생 수정
two.hakbun = 301;
strcpy(two.dept,"정보통신학과");
//two 학생 출력
printf("번호 : %d, 이름 : %s , 학과 : %s , 나이 %d \n",
two.hakbun , two.name , two.dept , two.age);
}
14
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
구조체와 공용체의 개념

공용체 개념
 동일한 공간에 여러 개의 변수를 관리
 공용체 선언 형식
– union [공용체 이름]{
»
»
»
»
»
»
[데이터
[데이터
[데이터
[데이터
...
[데이터
타입]
타입]
타입]
타입]
[변수이름1];
[변수이름1];
[변수이름1];
[변수이름1];
타입]
[변수이름1];
– };
union
[공용체 이름]
[데이터 타입]
[변수이름]
:
:
:
:
공용체 정의 키워드
공용체의 대표명
각 요소의 타입
각 구성요소의 이름
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
15
구조체와 공용체의 개념

공용체 변수의 선언
 공용체 변수의 선언 역시 구조체와 동일한 방식으로 사용
 선언 형태
변수 선언 방법
union{
....
} [변수명1],[변수명2], ...;
예제와 설명
예> union{
...;
} x, y; // 공용체 변수 x와 y
이 구조는 공용체명이 생략된 형태로 공용체 선언과 동시에 변수들을 선언한다.
union [공용체명]{
...
} [변수명1],[변수명2], ...;
예> union utype{
...;
} x, y; // 공용체 변수 x, y
union utype z; 공용체 변수 z
union [공용체명]
이 구조는 공용체 명을 가지고 있으며 공용체 선언과 동시에 변수들을 선언하고
있으며, 선언 이후 이 공용체 으로 다른 공용체 변수를 선언하고 있다.
[변수명3], ...;
typedef union{
...
} [데이터 타입];
[데이터 타입]
[변수명1],[변수명2]...;
예> typedef union{
...;
} CODE; // 새로운 데이터 타입
CODE x,y; // 공용체 변수 x, y
typedef 문에 의해 공용체를 새로운 데이터 타입으로 정의하고 이 정의된 타입
을 이용해 공용체 변수들을 선언하고 있다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
16
구조체와 공용체의 개념

공용체 변수의 특징
 선언과 사용면에서는 구조체와 비슷한 구조
 메모리 구조상 공용체는 요소들을 동일한 기억공간에 저장
 공용체 변수의 메모리 구조
공용체 변수의 크기는 공용체
요소 중 가장 큰 요소의
크기와 동일
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
17
구조체와 공용체의 개념

공용체 변수의 접근
 공용체 내부의 요소를 접근하기 위해서는 구조체와
동일하게 "."인 접근 지정자를 사용한다.
 사용 예>
– strcpy(cd.cname,"code-1");
– cd.barcode = 323;
– cd.longcode = 100.234;
 동일한 공간에 요소들이 공유되기 때문에 최후에 입력된
값만을 유지한다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
18
구조체와 공용체의 개념

공용체 변수 활용 예
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
출력 결과 :
typedef union{
char *cname;
11023
cd.barcode = ______________
int barcode;
double longcode;
4 double = _____
8 CODE = ____
8
4 int = _____
char * = _____
}CODE;
void main(){
CODE cd;
cd.cname = "code-1";
printf("cd.cname = %s \n", cd.cname);
cd.barcode = 11023;
printf("cd.barcode = %d \n", cd.barcode);
// printf("cd.cname = %s \n", cd.cname); //Error
//각 요소 및 공용체 크기 출력
printf("char * = %d \n " ,sizeof(char *));
printf("int = %d \n" ,sizeof(int));
printf("double * = %d \n" ,sizeof(double));
printf("CODE = %d \n" ,sizeof(CODE));
}
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
19
예습시간 – 2 교시
구조체 심화 학습
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
20
구조체 심화 학습

학습 개요
 구조체 배열 및 구조체 포인터에 대해 알아본다.
 중첩 구조체 및 비트 필드 구조체에 대해 이해한다.
 구조체 매개변수에 대해 이해한다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
21
구조체 심화 학습

중첩 구조체
 구조체에 다른 구조체를 포함하는 구조
 하나의 데이터는 다양한 데이터를 포함하고 그 데이터는
또 다른 정보를 구성
 중첩 구조체 예
– 학생 정보에 대한 구조체
학생정보
학번
이름
학과
주소
우편번호
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
세부주소
전화번호
지역
국번
번호
22
구조체 심화 학습

학생 정보에 대한 중첩 구조체 표현
학생정보
학번
이름
학과
주소
우편번호
//주소에 대한 구조체
typedef struct{
char *post;
char *details;
} ADDRESS;
//전화번호에 대한 구조체
typedef struct{
char *local;
// 지역
char *first;
// 국번
char *last;
// 번호
}TEL;
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
전화번호
세부주소
지역
국번
번호
//학생정보에 대한 구조체
typedef struct{
int hakbun;
char *name;
char *dept;
ADDRESS addr;
TEL phone;
}STUDENT;
//학번
//이름
//학과
//주소
//전화번호
23
구조체 심화 학습

구조체 배열
 구조체 변수는 일반 변수가 가지는 특징을 모두 가진다.
 구조체 변수의 배열 선언은 배열 첨자의 추가를 통해
만들어 진다.
 구조체 배열 선언 예
– STUDENT array[4];
 구조체 배열 역시 첨자를 통해 원하는 배열 요소에 접근
 그 구조체 안의 요소는 구조체 접근 지시자(".")을 통해
접근
 사용 예
– array[0].name
 구조체 배열 활용 예 : 페이지 293
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
24
구조체 심화 학습

구조체 포인터
 구조체 타입 역시 포인터 변수로 선언하여 사용 가능하다.
 구조체 포인터 변수
– 구조체 값을 저장하고 있는 메모리 주소를 가리킨다.
 사용 예
– typedef struct{
» int isbn;
» char *name;
–
–
–
–
–
}BOOK;
…
BOOK *bp1, bp2, book;
bp1 = &book;
bp2 = (BOOK *) malloc(sizeof(BOOK));
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
25
구조체 심화 학습

구조체 포인터 변수와 메모리 구조

구조체 포인터 변수를 통한 구조체 내부 요소의 접근
 구조체 포인터 접근 연산자 ("->") 이용
 예> bp1->isbn = 1000;
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
26
구조체 심화 학습

구조체를 이용한 매개변수 전달
 구조체 변수가 함수에 인자로 전달될 때 어떤 현상이
일어나는가?
– 구조체 변수는 하나의 변수로 취급된다.
– 구조체 내의 모든 요소가 복사되어 전달 (Call by Value)
– 구조체 크기에 따라 실행 시간에 영향을 미칠 수 있다.
 구조체 포인터 변수가 함수의 인자로 전달 될 때
– 구조체 변수의 주소 값이 전달 (Call by Reference)
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
27
구조체 심화 학습

구조체 변수의 함수 전달 예



















01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
//구조체 타입 선언
실행 결과 :
typedef struct{
original :isbn = 123 name = C Programming
int isbn;
change :isbn = 303
303 name = Language
char *name;
after : isbn = 123 name = C Programming
}BOOK;
//함수의 원형
void change(BOOK bk);
void main(){
BOOK book={123,"C Programming"};
printf("original : isbn = %d name= %s \n", book.isbn, book.name);
change(book);
printf(" after : isbn = %d name= %s \n", book.isbn, book.name);
}
void change(BOOK bk){
bk.isbn=303;
bk.name = "Language";
printf(" change : isbn = %d name= %s \n", bk.isbn, bk.name);
}
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
28
구조체 심화 학습

구조체 포인터 변수의 함수 전달 예



















01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
//구조체 타입 선언
실행 결과 :
typedef struct{
original :isbn =123
123 name = C Programming
int isbn;
change :isbn =303
303 name = Language
char *name;
after : isbn = 303
123 name = Language
}BOOK;
//함수의 원형
void change(BOOK *bk); // 구조체 변수 --> 구조체 포인터 변수로
void main(){
BOOK book={123,"C Programming"};
printf("original : isbn = %d name= %s \n", book.isbn, book.name);
change(&book); // book 구조체의 포인터 변수 전달
printf(" after : isbn = %d name= %s \n", book.isbn, book.name);
}
void change(BOOK *bk){ // 포인터 변수로 전달
bk->isbn=303; //포인터 접근자 이용
bk->name = "Language"; //포인터 접근자 이용
printf(" change : isbn = %d name= %s \n", bk->isbn, bk->name);
}
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
29
구조체 심화 학습

비트필드 구조체
 비트 단위의 구조체 형식
 작은 크기의 요소들의 집합을 구성하여 공간 절약 효과
제공
 구성 요소 표현 방식의 변형
– [데이터형]
[변수명] : [비트크기];
 구성 요소에 사용되는 데이터 형
– int
– unsigned
 작은 정보의 그룹화에 유용
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
30
구조체 심화 학습

비트 필드 구조체 예
 비트 필드 구조체 정의
–
–
–
–
–
–
typedef struct{
unsigned
onoff : 1;
unsigned
alarm : 1;
unsigned
floor : 4;
unsigned
check : 2;
}FLAG;
//
//
//
//
파워 ON/OFF
경고등 ON/OFF
층번호 0~15 층
검사 비트
 메모리 구조
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
31
구조체 심화 학습

비트 필드 구조체 기타 특징
 일반 구조체와 사용방법이 동일
 정의된 비트 범위를 초과해서 입력해서는 안 된다.
 구조체 정의 시 일반 구조체와 비트 필드 구조체를
혼용해서 사용 가능하다.
 사용 예
–
–
–
–
–
–
–
typedef struct {
char str[79];
int check : 3;
int reserve : 5;
}SEND;
...
SEND data;
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
32
실습시간 – 1 교시
정적 구조체 활용
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
33
정적 구조체 활용

학습개요
 정적 구조를 가진 구조체를 이용해 응용 프로그램 작성
 구조체 선언과 구조체 변수 활용
 비디오 판매 실적 보고서 프로그램 작성
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
34
정적 구조체 활용

비디오 판매 실적 보고서
 문제 정의
– 비디오
회사는
코드와
아이템
판매 회사에서 하루 판매 리스트에 대한 결과를 얻고자 한다. 이
자체 판매되는 비디오 정보를 가지고 있으며 비디오에 대한 상품
판매 수량을 입력 받는다. 이 내용을 이용해 판매된 비디오의
별 가격과 전체 가격을 계산하는 프로그램을 작성하여라.
 입/출력 조건
– 입력 조건
»
»
»
»
»
상품 코드 정보와 판매 수량을 포함하는 아이템 리스트
아이템은 반복적으로 입력된다.
입력 종료를 원할 경우 0값을 입력한다.
비디오 정보는 이미 존재한다고 가정한다.
비디오 정보 구성 형태
 (상품 코드, 장르, 이름 , 가격) 정보로 구성된다.
» 입력 아이템 구성 형태
 (상품 코드, 판매 수량) 정보로 구성된다.
» 이들 두 정보는 구조체를 이용해 관리되어진다.
– 출력 조건
» 초기 화면에 보유하고 있는 비디오 정보를 출력해 준다.
» 각 아이템 별 판매 금액과 전체 총합
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
35
정적 구조체 활용
 입/출력에 대한 프로그램 실행 예
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
36
정적 구조체 활용
 관련 함수 및 식
– 1) 비디오 정보 구조체 형식
» typedef struct{




int code;
// 상품 코드
char *part;
// 분류
char *name; // 이름
int price;
// 가격
» }VIDEO;
– 2) 판매 아이템 정보 구조체 형식
» typedef struct{
 int code;
 int count;
//상품 코드
//판매 수량
» }ITEM;
– 3) 판매 아이템은 입력은 100개 이하로 제한한다.
– 4) 판매 아이템이 비디오 정보에 존재하지 않을 경우 오류 메시지를
출력하고
–
프로그램을 종료한다.
–
종료 함수는 <stdlib.h>에 존재하는 void exit(int) 함수를 이용한다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
37
정적 구조체 활용
 알고리즘 (또는 플로우차트)
– 1. 판매 아이템 정보 입력
» 1.1 존재하는 비디오 정보를 출력한다.
» 1.2 판매된 아이템 정보 리스트를 반복해서 입력한다.
» 1.3 더 이상 판매 아이템 정보가 없을 때 0 값을 입력한다.
– 2. 판매 아이템 처리
» 2.1 판매 아이템에 대한 비디오 정보를 검색한다.
» 2.2 얻어온 비디오 정보를 이용해 판매된 아이템 가격을 계산한다.
 2.2.1 아이템 별 합계 계산
 2.2.2 전체 합계 누적
» 2.3 계산 결과를 아이템 별로 출력한다.
» 2.4 판매리스트가 더 이상 존재하지 않을 때 까지 2.1~2를
반복한다.
– 3. 총 판매 금액을 출력한다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
38
정적 구조체 활용
 구조체 차트
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
39
정적 구조체 활용

프로그램 작성
 1 단계
– 위에서 분석된 결과를 토대로 304 페이지의 프로그램의 빈
부분을 채워 넣은 다음 프로그램을 작성한 후 video.c 파일로
저장하자.
①. items[item_cnt].code = code
②. items[item_cnt].count = count
③. pvs->code,pvs->part,pvs->name,pvs->price
④. VIDEO
⑤. ITEM
⑥. pvs->code == item.code
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
40
정적 구조체 활용

프로그램 작성
 2 단계
– 프로그램 컴파일 후 정상적으로 동작 시 다음과 같은 입력
결과에 대한 출력 값을 작성 하자.
입력 조건
출력 결과
입력된 판매 리스트
[코드번호][수량]
101
3
103
5
202
1
301
5
0 // 입력 종료
계속
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
41
정적 구조체 활용
입력 조건
출력 결과
입력된 판매 리스트
[코드번호][수량]
101
2
501
3
302
1
0 // 입력 종료
입력된 판매 리스트
[코드번호][수량]
102
4
103
5
201
2
301
3
302
5
0 // 입력 종료
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
42
실습시간 – 2 교시
동적 구조체 활용
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
43
동적 구조체 활용

학습개요
 구조체의 동적 생성과 활용 방법을 익힌다.
 선형 링크드 구조인 Linked List 문제를 해결한다.
 구조체 포인터의 활용 방법을 익힌다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
44
동적 구조체 활용

링크드 리스트 (Linked List)
 선형구조를 가지는 데이터들의 집합
 논리적으로 서로 연결된 구조를 가지지만 물리적으로 다른 공간에
데이터들이 분포됨
 연결 고리(Link)을 통해 서로 데이터들이 선형적으로 연결됨
 링크드 리스트의 구성 단위를 노드(Node)라고 한다.
 노드(Node)의 구조
value
link
value : 데이터 값
link : 다음 데이터 값이 저장된 주소
 링크드 리스트의 논리적 구조 (예:10,20,30의 값을 가진 구조)
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
45
동적 구조체 활용

Linked List 프로그램
 문제 정의
– 위에 정의된 Linked List를 만들고 이 리스트의 헤드 포인터를 이용해
값을 추가 및 삭제 그리고 포함된 값을 출력시키는 프로그램
 입/출력 조건
– 입력 조건
» 1. 작업 선택 ( 1:노드 추가, 2:노드 삭제, 3:리스트 출력, 4:작업 종료)
» 2. 노드 추가 시


노드 값 입력
노드는 리스트의 맨 처음으로 추가된다.
» 3. 노드 삭제 시


노드 리스트에서 삭제를 원하는 위치
입력된 위치에 해당되는 노드를 삭제한다.
» 4. 리스트 출력

리스트의 출력은 노드의 시작에서 끝까지 출력한다.
» 5. 작업 종료

프로그램을 종료한다.
– 출력 조건
» 1. 노드 추가 시 추가된 내용을 포함한 리스트 내용을 출력한다.
» 2. 노드 삭제 시 삭제 후의 리스트 결과를 출력한다.
» 3. 리스트 출력 선택 시 현재 리스트에 존재하는 내용을 출력한다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
46
동적 구조체 활용
 관련 함수 및 식
– 1. 노드의 구조체
» typedef struct node_type{
 int value;
 struct node_type *link;
» }NODE;
– 노드의 구조체는 정수형 값과 다음 노드를 가리키는 포인터
변수로 구성된다.
– 2. 동적 메모리 할당은 <stdlib.h>에 존재하는 malloc()함수를
사용한다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
47
동적 구조체 활용
 알고리즘 (또는 플로우차트)
– 1. 원하는 작업을 선택한다.
» 1.1 노드 추가 선택 시
 1.1.1 추가할 노드의 값을 얻는다.
 1.1.2 노드 추가 처리를 한다.
 1.1.3 추가 후 Linked List의 내용을 출력한다.
» 1.2 노드 삭제 선태 시
 1.2.1 삭제하고자 하는 위치를 얻는다.
 1.2.2 노드 삭제 처리를 수행한다.
 1.2.3 삭제 후 Linked List의 내용을 출력한다.
» 1.3 리스트 출력 선택 시
 1.3.1 현재 까지 저장된 리스트 정보를 출력한다.
» 1.4 작업 종료 선택 시
 1.4.1 프로그램을 종료한다.
– 2. 작업 종료를 선택할 때 까지 까지 1의 작업을 반복한다.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
48
동적 구조체 활용
 프로그램 구조체 차트
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
49
동적 구조체 활용
 노드 추가/삭제 플로우차트
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
50
동적 구조체 활용

프로그램 작성
 1 단계
– 위의 분석 자료를 기반으로 프로그램을 분석하고 빈 부분을 채워
넣은 다음 프로그램을 작성하고 linked.c파일로 저장하자.
①. head_ptr=addNode(head_ptr)
②. head_ptr=deleteNode(head_ptr)
③. (NODE *)malloc(sizeof(NODE))
④. &(pnode->value)
⑤. head_ptr = head_ptr->link
⑥. head_ptr = head_ptr->link
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
51
동적 구조체 활용
 2 단계
– 프로그램이 정상적으로 동작할 때 다음 입력에 대한 결과
입력 조건
출력 결과
작업 순서
1. 노드 값을 순서대로 추가
85 73 37 48 25
2. 특정 노드 삭제
삭제 위치 값 : 2
3. 리스트 출력
4. 종료
작업 순서
1. 노드 값을 순서대로 추가
40 20 54 30 18 73 25 11
2. 특정 노드 삭제
삭제 위치 값 : 2
삭제 위치 값 : 5
삭제 위치 값 : 1
3. 리스트 출력
4. 종료
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
52
구조체와 공용체
The End.
최신 C 프로그래밍 언어 – 문제해결에서 프로그래밍까지
53