최신 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