Presentation is loading. Please wait.

Presentation is loading. Please wait.

C언어 응용 제7주 실습 해보기 제6장.

Similar presentations


Presentation on theme: "C언어 응용 제7주 실습 해보기 제6장."— Presentation transcript:

1 C언어 응용 제7주 실습 해보기 제6장

2 예제 6-1 실습하기 순차자료구조를 이용한 스택구현 순차자료구조를 이용한 스택을 구현하고 이와 연 관된 함수를 구현한다.
순차자료구조를 이용한 스택을 구현한 소스파일과 헤더파일을 따로 작성한다. 구현한 함수 목록 push : 스택에 자료 추가하기 pop : 스택에서 자료 꺼내오기 peek : 스택의 최상위 자료 읽기 del : 스택의 최상위 자료 삭제 printStack : 스택 출력

3 소스 목록 및 내용 arraystack.h : 스택구현에 필요한 자료형과 함수 의 원형을 선언하는 헤더 파일
arraystack.c : 스택 구현에 필요한 함수의 내용을 작성한 소스 ex0601.c : 스택을 테스트하는 main 소스 파일

4 실습하는 순서 Eclipse 를 실행한다. Workspace와 Perspective가 맞는지 확인 하고 맞지 않으면 수정한다. Workspace 는 D:\Lec_hwlee\Capp\y2014 이고 Perspective 는 C/C++ 이어야 한다. 프로젝트 생성 arraystack.h 파일 작성 arraystack.c 파일 작성 ex0601.c 작성 빌드 및 실행 결과 확인

5 소스들 사이의 연관 관계 arraystack.h ex0601.c
연결리스트 구현에 필요한 구조체와 필요한 함수의 원형을 선언한다. ex0601.c 구현된 연결리스트를 테스트 해보는 main 소스 포함한다. 포함한다. 실제 함수를 호출하여 사용한다. arraystack.c 연결리스트 구현에 필요한 함수의 내용을 작성한다.

6 필요한 함수 리턴 타입 함수명 매개변수 기능 void push int 새로운 원소를 스택에 추가 한다. pop
스택의 최상위 자료를 꺼내 온다. del 스택의 최상위 자료를 삭제한다. peek 스택의 최상위 자료를 읽는다. printStack 스택을 출력한다.

7 함수 가상 코드 push(int data) top ← top + 1; if ( top > STACK_SIZE) then overflow; else S(top) ← data; End push

8 함수 가상 코드 pop() if( top = 0) then underflow; else { temp ← S(top); top ← top - 1 ; return temp; } End pop

9 함수 가상 코드 del() if( top = 0) then underflow; else { top ← top - 1 ; } End del

10 함수 가상 코드 peek() if( top = 0) then underflow; else { temp ← S(top); return temp; } End pop

11 함수 가상 코드 printStack() write “STACK [“; for (i←0; i<=top; i++) do { write S(i) +” ”; } write “] \n”; End printStack

12 main 소스 코드 스택을 만들고 구현한 함수들이 정상 동작하는지 를 테스트하는 코드를 작성한다.
스택에 1,2,3을 추가한 후 peek, del, pop을 사용 하여 다시 제거한다.

13 main 의 가상 코드 write message PrintStack(); Push(1); Push(2); Push(3);

14 main 의 가상 코드 Peek(); PrintStack(); Del(); Pop();

15 Eclipse 실행 D:\Lec_hwl\CApp\y2014

16 Eclipse 실행

17 Workspace 확인 D:\Lec_hwl\CApp\y2014

18 CDT Perspective 확인 이 버튼을 클릭해서 수정 Java EE 로 되어 있음

19 CDT Perspective 확인 C/C++ 선택

20 CDT Perspective 확인 C/C++ 로 되어 있음

21 새 프로젝트 생성 File->New->C Project 반드시 C Project를 택할 것

22 프로젝트 명 설정 Ch06Ex01 Empty Project Cygwin GCC
D:\Lec_hwl\capp\y2014\Ch06Ex01

23 프로젝트 구성 설정 Debug 버전과 Release 버전 모두 사용

24 생성된 빈 프로젝트

25 arraystack.h 추가 및 작성 Header File 선택

26 arraystack.h 추가 및 작성 arraystack.h 헤더 파일 명 설정

27 arraystack.h 추가 및 작성 자동 생성된 빈 헤더 파일
헤더가 여러 소스에서 포함되었을 때 이중으로 포함되지 않도록 하는 매크로 실제 헤더의 내용이 들어갈 위치

28 arraystack.h 추가 및 작성 스택 크기 및 함수 원형 선언 STACK_SIZE 매크로 상수 선언

29 linkedlist.c 추가 및 작성 Source File 선택

30 arraystack.c 추가 및 작성 Ch06Ex01 프로젝트명 확인 arraystack.c 소스 파일명 설정

31 arraystack.c 추가 및 작성 자동 생성된 빈 소스 파일

32 arraystack.c 추가 및 작성 필요한 코드 작성(빈 함수 작성)
표준 입출력 함수 헤더 배열로 구현한 스택관련 함수 헤더 스택을 위한 메모리 할당 Top을 전역변수로 선언하고, -1로 초기화한다. 필요한 각 함수의 원형에 맞게 함수의 몸체를 작성하되, 내용은 모두 빈 것으로 작성한다. 차후에 한 함수씩 코드의 내용을 작성한다.

33 void push(int data)

34 int pop()

35 int peek()

36 void del()

37 void printStack()

38 ex0601.c 추가 및 작성 Source File 선택

39 ex0601.c 추가 및 작성 Ch06Ex01 프로젝트명 확인 ex0601.c 소스 파일명 설정

40 추가된 빈 소스 파일 프로젝트에 3 개의 파일 ex0601.c, arraystack.c, arraystack.h
가 추가된 것을 확인할 수 있다.

41 main 함수 작성 빈 main 함수 작성 표준 입출력 함수 헤더 배열 스택 관련 함수 헤더

42 main 함수 작성

43 main 함수 작성

44 main 함수 작성

45 빌드 및 실행 결과

46 도전 문제 스택의 자료를 문자로 저장하도록 하여 사용자가 입력한 문자열을 뒤집어서 출력하는 프로그램을 스택을 이용하여 작성하시오. 배열을 사용한 스택을 작성하되 스택의 크기를 사 용자가 임의로 정하여 할 수 있도록 프로그램을 수 정하시오.

47

48

49

50 예제 6-2 실습하기 단순연결자료구조를 이용한 스택구현 단순연결자료구조를 이용한 스택을 구현하고 이와 연관된 함수를 구현한다.
단순연결자료구조를 이용한 스택을 구현하고 이와 연관된 함수를 구현한다. 단순연결자료구조를 이용한 스택을 구현한 소스파 일과 헤더파일을 따로 작성한다. 구현한 함수 목록 push : 스택에 자료 추가하기 pop : 스택에서 자료 꺼내오기 peek : 스택의 최상위 자료 읽기 del : 스택의 최상위 자료 삭제 printStack : 스택 출력

51 소스 목록 및 내용 liststack.h : 스택구현에 필요한 자료형과 함수의 원형을 선언하는 헤더 파일
liststack.c : 스택 구현에 필요한 자료형과 함수의 내용을 작성한 소스 ex0602.c : 스택을 테스트하는 main 소스 파일

52 실습하는 순서 Eclipse 를 실행한다. Workspace와 Perspective가 맞는지 확인 하고 맞지 않으면 수정한다. Workspace 는 D:\Lec_hwlee\Capp\y2014 이고 Perspective 는 C/C++ 이어야 한다. 프로젝트 생성 liststack.h 파일 작성 liststack.c 파일 작성 ex0602.c 작성 빌드 및 실행 결과 확인

53 소스들 사이의 연관 관계 liststack.h ex0602.c
연결리스트 구현에 필요한 구조체와 필요한 함수의 원형을 선언한다. ex0602.c 구현된 연결리스트를 테스트 해보는 main 소스 포함한다. 포함한다. 실제 함수를 호출하여 사용한다. liststack.c 연결리스트 구현에 필요한 함수의 내용을 작성한다.

54 이전 예제와의 차이점 단순 연결자료구조를 사용하므로 빈 스택을 생성 하는 함수가 필요하다.
사용을 종료한 스택이 차지하고 있는 메모리를 반 환하는 함수가 필요하다. push 에서 자료를 저장하기 위한 노드를 위한 메 모리 할당해야 한다. pop과 del 에서 사용한 메모리를 반환해야 한다.

55 필요한 구조체 자료형

56 필요한 함수 리턴 타입 함수명 매개변수 기능 Liststack * createStack void 빈 스택을 생성한다. push
ListStack * s, int data 새로운 원소를 스택에 추가 한다. int pop ListStack * s 스택의 최상위 자료를 꺼내 온다. del 스택의 최상위 자료를 삭제한다. peek 스택의 최상위 자료를 읽는다. freeStack 스택이 차지하고 있는 메모리를 반환한다. printStack 스택을 출력한다.

57 함수 가상 코드 createStack() s ← memory allocate for ListStack; if ( s = NULL) then memory full error; return NULL; else { s->top ← NULL; return s; } End createStack

58 함수 가상 코드 push(ListStack * s, int data) node ← memory allocate for int; if ( node = NULL) then overflow(memory full); else { node.data ← data; node.link ← s->top s->top ← node; } End push

59 함수 가상 코드 pop(ListStack * s) if( top = NULL) then underflow; else { temp ← s->top; data ← temp.data; s->top ← temp->link; free(temp); return data; } End pop

60 함수 가상 코드 del(ListStack * s) if( top = NULL) then underflow; else { temp ← s->top; data ← temp.data; s->top ← temp->link; free(temp); } End del

61 함수 가상 코드 peek(ListStack * s) if( top = 0) then underflow; else { data ← s->top->data; return data; } End pop

62 함수 가상 코드 freeStack(ListStack * s) if( top = NULL) then return; else { temp ← s->top; while( temp ≠ NULL ) then do { s->top ← s->top->link; free(temp); temp ← s->top; } } End pop

63 함수 가상 코드 printStack(ListStack * s) write “STACK [“; temp ← s->top; while ( temp ≠ NULL) then do { data ← temp->data; write data +” ”; temp ← temp->link; } write “] \n”; End printStack

64 main 소스 코드 스택을 만들고 구현한 함수들이 정상 동작하는지 를 테스트하는 코드를 작성한다.
스택에 1,2,3을 추가한 후 peek, del, pop을 사용 하여 다시 제거한다.

65 main 의 가상 코드 s ← createStack(); write message PrintStack(s); Push(s,1); Push(s, 2); Push(s, 3);

66 main 의 가상 코드 Peek(s); PrintStack(s); Del(s); Pop(s); Pop(s); freeStack(s);

67 Eclipse 실행 D:\Lec_hwl\CApp\y2014

68 Eclipse 실행

69 Workspace 확인 D:\Lec_hwl\CApp\y2014

70 CDT Perspective 확인 이 버튼을 클릭해서 수정 Java EE 로 되어 있음

71 CDT Perspective 확인 C/C++ 선택

72 CDT Perspective 확인 C/C++ 로 되어 있음

73 새 프로젝트 생성 File->New->C Project 반드시 C Project를 택할 것

74 프로젝트 명 설정 Ch06Ex02 Empty Project Cygwin GCC
D:\Lec_hwl\capp\y2014\Ch06Ex02

75 프로젝트 구성 설정 Debug 버전과 Release 버전 모두 사용

76 생성된 빈 프로젝트

77 liststack.h 추가 및 작성 Header File 선택

78 liststack.h 추가 및 작성 liststack.h 헤더 파일 명 설정

79 liststack.h 추가 및 작성 자동 생성된 빈 헤더 파일
헤더가 여러 소스에서 포함되었을 때 이중으로 포함되지 않도록 하는 매크로 실제 헤더의 내용이 들어갈 위치

80 liststack.h 추가 및 작성 구조체 및 함수 원형 선언 필요한 함수들의 원형

81 linkedlist.c 추가 및 작성 Source File 선택

82 arraystack.c 추가 및 작성 Ch06Ex02 프로젝트명 확인 liststack.c 소스 파일명 설정

83 liststack.c 추가 및 작성 자동 생성된 빈 소스 파일

84 liststack.c 추가 및 작성 필요한 코드 작성(빈 함수 작성)
표준 입출력 함수 헤더 메모리할당 함수 헤더 단순연결 구조 스택 해더 필요한 각 함수의 원형에 맞게 함수의 몸체를 작성하되, 내용은 모두 빈 것으로 작성한다. 차후에 한 함수씩 코드의 내용을 작성한다.

85 ListStack * createStack(void)

86 void push(ListStack * s, int data)

87 int pop(ListStack * s)

88 int peek(ListStack * s)

89 void del(ListStack * s)

90 void freeStack(ListStack * s)

91 void printStack(ListStack * s)

92 ex0602.c 추가 및 작성 Source File 선택

93 ex0601.c 추가 및 작성 Ch06Ex02 프로젝트명 확인 ex0602.c 소스 파일명 설정

94 추가된 빈 소스 파일 프로젝트에 3 개의 파일 ex0602.c, liststack.c, liststack.h
가 추가된 것을 확인할 수 있다.

95 main 함수 작성 빈 main 함수 작성 표준 입출력 함수 헤더 단순연결자료구조 스택 관련 함수 헤더

96 main 함수 작성

97 main 함수 작성

98 main 함수 작성

99 빌드 및 실행 결과

100 도전 문제 스택에 저장하는 자료를 다음 그림과 같은 사용자 정보로 하는 단순 연결 자료구조 스택을 만들고 이 를 이용하여 사용자로부터 5개의 정보를 받아들인 후에 받아들인 역순으로 사용자 정보를 출력하는 프로그램을 작성하시오.


Download ppt "C언어 응용 제7주 실습 해보기 제6장."

Similar presentations


Ads by Google