728x90
반응형
728x90
반응형

HDC GetDC(HWND hWnd);

 

MSDN 명시

HDC GetDC(_In_ HWND hWnd);

 

DC는 주로 하나의 윈도우와 연관되는 출력 정보를 가진다.

GetDC 함수는 hWnd가 가리키는 윈도우에 적당한 DC를 만들어 그 핸들을 리턴한다.

DC도 메모리를 차지하므로 할당 후 해제 원칙이 반드시 준수되어야 한다.(ReleaseDC)

 

함수가 성공적으로 실행되면 리턴되는 값은 지정된 윈도우의 클라이언트 영역에 대한 DC의 핸들을 리턴.

함수가 실패하면 리턴되는 값은 NULL.

 

ReleaseDC 함수 포스트 링크

http://blog.naver.com/kojy258/80209104883

 

사용예제 포스트 링크

http://blog.naver.com/kojy258/80209103519

 

최소지원 클라이언트 - 윈도우 2000 프로페셔널(데스크탑 전용)

최소지원 서버 - 윈도우 2000 서버(데스크탑 전용)

필요 헤더 - Winuser.h(Windows.h에 포함)

필요 라이브러리 - User32.lib

필요 DLL - User32.dll

 

GetDC( )   와  BeginPaint( ) 의 차이는 뭘까? 

 

API 에서 기본적으로 메세지루프가 돌 때 GetMessage( ) 함수에서 메세지를 읽어들이고, 삭제를 반복한다.

이러한 메세지중 WM_PAINT 메세지는 윈도우에 무효화 현상이 생길때 발생한다.

 

 
WM_PAINT 메세지란?​
 
WM_PAINT 메시지는 윈도우를 다시 그려야할 때 발생하는 메시지이다.  

WM_PAINT 메시지가 발생하는 경우로는 무효화 현상일 발생할 때 이다.

 

무효화란?

현재 그려진 이미지와 실제 이미지가 차이가 생길 뜻한다.

예를들어 다른 윈도우가 현재 윈도우를 가렸다가 치운다면 그리지 않던부분을 다시 그려줘야할 필요가 생긴다.

 

1) 윈도우가 처음 만들어져 사용자 눈에 보일 때

2) 윈도우가 다른 위도우에 가려졌다가 환원될 때

3) 윈도우의 크기를 조절할 때

4) 사용자의 함수호출에 의해 : Invalidate(), UpdateAllViews, InvalidateRect() 등

 

 

 

이때 WinProc( ) 함수에서 WM_PAINT 메세지 발생 시, BeginPaint 함수로 DC 를 얻어오는데, GetDC 로 사용할 순 없을까?

대답은 GetDC ㄴㄴ

이유인 즉, BeginDC( ) 함수가 실행될 때 내부적으로 WM_PAINT 메세지를 처리하고 윈도우를 유효화 상태로 만들기 때문.

만약 GetDC 를 사용하게 되면 WM_PAINT 메세지가 처리되지 않아 유효화 상태에서도 끈임없이 화면을 그리게 될 것이다.

 

즉, WM_PAINT 메세지가 발생 했을 때 사용하도록 만들어진 것이 BeginPaint( ) 함수.

이외에 따로 DC 만 얻어와야 할 때 쓰는 것이 GetDC 함수이다.

 

 

 

 

사용자정의 클래스에서 DC 얻기.

 

1. GetDC( ) 함수의 인자로 해당 윈도우의 핸들이 필요하다.

    따라서 핸들정보를 전역적으로 사용하기위한 변수를 하나 선언.

 

2. InitInstance( ) 함수에서 CreateWindow 함수의 반환값인 핸들을 전역변수(extern 선언된 변수) 에 저장.

 

3. GetDC( ) 함수의 인자로 전역으로 선언해논 핸들을 인자값으로 줘서 DC를 가져옴.

 

 

소멸자기준으로 동적할당 해제보다는 함수로인해서 해제하면 디버깅을 할 수 있다.

 

define에 쓰이는 extern 변수는 전체에 쓸수 있다.

 

FPS : 초당 몇프레임을 표현할지 정해주는 것이다.

 

GetTickCount : rand보다는 정교하고 난수를 가져온다. 

728x90
반응형
728x90
반응형

1. GetMessage()

메시지 큐에서 메시지를 꺼내온다. 그리고 그 메시지를 TranslateMessage로 보내는데..

그런데 만약에 WM_QUIT를 만나면, false를 리턴하여 바로 while문을 탈출한다.

WM_QUIT를 만나지 않았다면, 그 메시지를 TranslateMessage로 보낸다.

 

 

 

 

2. TranslagteMessage()

가상 키를 키보드로 눌렀을때 문자열 값이면 WM_CHAR로 보낸다.

아니면 DispatchMessage로 보낸다.

 

 

 

 

3. DispatchMessage()

윈도우 메시지를 WndProc로 보낸다.

 

 

 

 

4. WM_TIMER

사용자의 동작과 상관없이 발생하는 메시지이다.

한번 지정해 놓으면 일정한 시간 간격을 두고, 연속적으로 계속 발생한다.

 

 

 

 

5. 타이머를 생성하는 함수

UINT SetTimer( HWND hWnd, UINT nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc );

nIDEvent = 타이머의 번호

uElapse = 타이머의 주기 (단위는 1/1000 초)

lpTimerFunc = TimerPROC 콜백 함수의 주소 값.

 

5 - 1) 타이머를 제거하는 함수

BOOL KillTimer( HWND hWnd, UINT uIDEvent );

hWnd = 타이머를 소유한 윈도우의 핸들 값

uIDEvent = 타이머의 ID를 넣는다.

 

5 - 2) 현재 시간을 불러오는 함수

void WINAPI GetLocalTime( LPSYSTEMTIME lpSystemTime );

lpSystemTime = SYSTEMTIME의 구조체의 주소 값을 넣는다.

 

 

 

 

6. WM_LBUTTONUP, WM_LBUTTONDOWN

WM_LBUTTONUP : 마우스를 띄었을때 발생한다.

WM_LBUTTONDOWN : 마우스를 눌렀을때 발생한다.

 

 

 

 

7. WM_KEYDOWN, WM_CHAR 각각 설명과 차이점.

7 - 1) WM_KEYDOWN

nonsystem key가 눌러졌을때 키보드 포커스와 함께 해당 윈도우로 보내지는 메시지이다.

nonsystem key라고 하면 ALT를 누르지 않고, 그냥 키를 누른 것을 의미한다.

 

7 - 2) WM_CHAR

WndProc의 wParam에 해당 키의 문자 코드가 저장 된다.

 

 

 

 

8. WM_PAINT를 강제로 발생 시키는 함수와 인자에 대한 설명!!

InvalidateRect( hWnd, lpRect, true );

InvalidateRect( hWnd, NULL, false );

lpRect = 작업 영역

NULL  = 화면 전체

ture    = 그 영역을 싹다 지워서 다시 그린다.

false   = 새로 작업하는 영역을 갱신되고, 나머지 영역은 그대로 둔다.

 

 

 

 

9. HDC를 얻는 2가지의 방법

1) HDC GetDC( HWND hWnd );

    int ReleaseDC( HWND hWnd, HDC hDC );

 

2) HDC beginPaint( HWND hWnd, LPPAINTSTRUCT lpPaint );

    BOOL EndPaint( HWND hWnd, CONST PAINTSTRUCT *lpPaint );

 

 

 

 

10. 강제로 윈도우를 종료 시키는 함수

PostQuitMessage();

 

 

 

 

11. DC( Device Context )

출력에 필요한 모든 정보를 가지는 데이터 구조체이다.

 

 

 

 

12. 마우스가 움직일때 발생되는 이벤트 메시지를 쓰고, 좌표 얻는 방법에 대한 설명!!

(이벤트 메시지)

WM_MOUSEMOVE

 

(좌표를 얻는 방법)

X = LOWORD(lParam)

Y = HIWORD(lParam)

 

 

 

 

13. 사각형의 충돌체크에 사용되는 함수를 쓰고, 각각의 인자를 설명!!

bool IntersectRect( &rc, &rcPlayer, &rcMonster );

(충돌이 아닐 경우) false IntersectRect( &rc, &rcPlayer, &rcMonster );

(충돌이 있을 경우) true IntersectRect( &rc, &rcPlayer, &rcMonster );

lpRect = 충돌 체크 할 사각형.

POINT = 충돌 체크 할 점(좌표).

 

 

 

 

14. 점과 사각형의 충돌 체크에 사용되는 함수를 쓰고, 각각의 인자를 설명 하시오.

bool    PtInRect( lpRect, POINT );

(충돌이 아닐 경우) false  PtInRect( lpRect, POINT );

(충돌이 있을 경우) true   PtInRect( lpRect, POINT );

lpRect = 충돌 체크 할 사각형.

POINT = 충돌 체크 할 점 (좌표)

 

 

 

 

15. RECT

top, bottom, left, right (좌표)를 가진 구조체

 

 

 

 

16. 선

시작점  :  MovetoEx( hdc, x, y, NULL );

끝   점  :  LineTo( hdc, x, y );

원   형  :  Ellipse( hdc, left, top, right, bottom );

사각형  :  Ractangle( hdc, left, top, right, bottom );

문자열 입력  :  TextOut( hdc, x, y, "문자열", strlen("문자열") );

 

 

 

 

17. 클라이언트 영역이란? 

작업이 진행되는 작업 영역을 뜻 한다.

즉! 윈도우 영역에서 캡션바나 프레임부분을 뺀 영역이라고 말할 수 있다.

 

 

 

 

18. 윈도우 구조 5단계

WndClass 정의     -   윈도우를 정의한다.

RegisterClass      -   윈도우를 등록한다.

CreateWindow      -   윈도우를 만든다.

ShowWindow       -   윈도우를 보여준다.

메시지 루프          -   메시지를 처리한다. 

 

 

 

 

19. CALLBACK  WndProc (콜백함수)

보통 함수들은 운영체제가 제공하며, 프로그램에서는 이 함수들을 호출해서 운영체제의 서비스를 받는다.

즉, 응용 프로그램이 운영체제에 내장된 함수를 호출하여 작업을 한다.

콜백함수의 호출시점은 운영체제가 필요할때 호출하는 함수이다.

일반 함수와 다른 점을 명시하자.

 

728x90
반응형

'back-end > C & API' 카테고리의 다른 글

window api GetDc() 함수  (0) 2023.07.21
window api RECT 관련 API 함수들  (0) 2023.07.21
window api GetCurPos, ScreenToClient  (0) 2023.07.21
window api wsprintf 와 swprintf의 차이점  (0) 2023.07.21
리스트 간단 설명 요약  (0) 2023.07.21
728x90
반응형
BOOL DrawFocusRect(HDC hdc, CONST RECT *lprc);

점선의 포커스 활성화 이미지를 그린다.



int FillRect(HDC hdc, CONST RECT *lprc, HBRUSH hbr);

특정 브러쉬로 내부를 채운다.



int FrameRect(HDC hdc, CONST RECT *lprc, HBRUSH hbr);

1픽셀의 브러쉬로 외곽선을 채운다.



BOOL InverRect(HDC hdc, CONST RECT *lprc);

Rect영역을 반전 시킨다.



BOOL SetRect(LPRECT lprc, int xLeft, int yTop, int xRight, int yBottom);

Rect 영역 설정



BOOL SetRectEmpty(LPRECT lprc);

비운다.



BOOL CopyRect(LPRECT lprcDst, CONST RECT *lprcSrc);

복사한다.



BOOL InflateREct(LPRECT lprc, int dx, int dy);

RECT 확장하기.



BOOL IntersectRect(LPRECT lprcDst, CONST rect *lprcSrc1, CONST rect *lprcSrc2);

Rect1, Rect2의 교집합 Rect를 구한다.



BOOL UnionRect(LPRECT lprcDst, CONST rect *lprcSrc1, CONST rect *lprcSrc2);

Rect1, Rect2의 합집합 Rect를 구한다.



BOOL SubtractRect(LPRECT lprcDst, CONST rect *lprcSrc1, CONST rect *lprcSrc2);

Rect1에서 Rect2를 뺀 Rect를 구한다.



BOOL OffsetRect(LPRECT lprc, int dx, int dy);

Rect를 x,y 만큼 이동한다.



BOOL IsRectEmpty(CONST RECT *lprc);

Rect가 비어있는지 검사한다.



BOOL EqualRect(CONST RECT *lprc1, CONST RECT *lprc2);

Rect1 과 Rect2가 같은지 비교한다.



BOOL PtInRect(CONST RECT *lprc, POINT pt);
Rect 영역 안에 Point좌표가 있는지 검사한다.
728x90
반응형
728x90
반응형

GetCurPos()

 ; 전체화면 기준으로 현재 마우스 커서 좌표를 얻어오는 함수

 

ScreenToClient()

 ; 전체화면 기준으로 얻은 커서 좌표를 해당 윈도우 기준으로 변환해주는 함수

 

1024 by 768 윈도우 기준으로 게임을 개발할때

마우스 포인터를 얻기위해 GetCurPos를 쓰면, 전체화면 기준으로 좌표가 리턴되기 때문에

내 해상도가 1024 by 768보다 높다면 좌표계의 불일치가 발생하게 되므로,

ScreenToClient()를 이용해 좌표계를 변환하여 사용하면 된다

728x90
반응형
728x90
반응형

포멧을 가진 문자열을 생성하기 위해서 sprintf함수를 많이 사용합니다.

 

요즘은 글로벌한 시대라 wide string을 많이 사용하기 때문에 sprintf의 wide string 버전 함수가 필요할 때가 많습니다.

 

그런데 swprintf 와 wsprintf 함수가 존재합니다. 두 함수는 동일한 목적을 가진 함수 입니다.

 

이 두 함수의 차이점은 아래와 같습니다.

 

 - swprintf 는 VC++ 라이브러리에 포함된 함수로서 우리가 사용해야 할 함수 입니다.

 - wsprintf 는 WinAPI에 포함된 라이브러리이고, format string 파라메터 중에 지원하지 않는 부분이 있습니다. 예를 들어 "*" 같은 width 특수화를 지원하지 않습니다.

 

swprintf를 사용하는 것이 옳겠습니다.

 

그리고 VS2005 부터는 이 함수의 secure 버전인 swprintf_s 를 사용하는 것이 좋습니다.

_s가 붙으면 버퍼의 크기를 파라메터로 받아 버퍼를 넘어설 때 exception을 발생시켜 줍니다. 또한 format string이 유효하지 않을 때도 exception을 발생 시켜 주도록 되어 있습니다.

exception이 발생하니까 그냥 swprintf를 써야 겠다고 생각하는 프로그래머가 있다면 바보같은 선택이니 왜 여기서 exception을 발생시켜주도록 변경되었을 지를 잘 생각해 보시기 바랍니다

728x90
반응형

'back-end > C & API' 카테고리의 다른 글

window api RECT 관련 API 함수들  (0) 2023.07.21
window api GetCurPos, ScreenToClient  (0) 2023.07.21
리스트 간단 설명 요약  (0) 2023.07.21
c언어에서 리스트란?  (0) 2023.07.21
STL 란?  (0) 2023.07.21
728x90
반응형

링크드 리스트

 

- 리스트를 구현하는 여러가지 기법중 가장 간단한 방법

 

- 리스트에서 마디를 노드라 한다.

 

- 리스트의 첫번째 노드 : 헤드 , 마지막 노드 : 테일

 

======================================================================

 

C언어로 표현하는 링크드 리스트의 노드

 

struct Node

{

int Data; /* 데이터 필드 */

 

struct Node* NextNode; /* 다음 노드를 가리키는 포인터 */

};

 

======================================================================

 

링크드 리스트를 구축하고 자료를 사용하기 위한 필요연산은

 

- 노드 생성/소멸

- 노드 추가

- 노드 탐색

- 노드 삭제

- 노드 삽입

 

여기서 노드탐색은 구축되어있는 데이터를 활용하기위한 연산이고, 그외4가지는  자료구조를 구축하기 위한 연산

 

======================================================================

 

c언어로 작성된 프로그램은 세가지 종류의 메모리 영역을 가진다.

 

- 정적 메모리 : 전역변수나 정적변수가 저장

 

- 자동 메모리 : 지역변수가 저장

 

- 자유 저장소 

 

 

여기서 정적메모리는 프로그램이 종료될때 해제되는 영역

 

자동메모리는 코드블록이 끝나는 곳에서 자동으로 메모리를 해제

 

자동메모리는 스택 구조로 이루어져 있다.

 

======================================================================

 

STL_ : Singly Linked List 의 약자

 

======================================================================

 

노드 생성  - 함수 : STL_CreateNode();

 

Node* NewNode = (Node*)malloc(sizeof(Node));

 

malloc 함수는 sizeof 연산자가 측정한 노드의 크기만큼 자유저장소에 할당한 후

 

NewNode에 그 메모리주소를 저장한다.

 

ex)  /* 노드 생성 */

 

Node* STL_CreateNode(ElementType NewData)

{

Node* NewNode = (Node*)malloc(sizeof(Node));

NewNode->Data=NewData;  /* 데이터를 저장한다 */

NewNode->NextNode = NULL; /* 다음 노드에 대한 포인터는 NULL로 초기화한다 */

 

return NewNode; /* 노드의 주소를 반환한다 */

}

 

 

노드 소멸  - 함수 : STL_DestroyNode();

 

void STL_DestroyNode(Node* Node)

{

free(Node);

}

 

 

노드 추가  - 함수 : STL_AppendNode();

 

링크드 리스트 테일 노드 뒤에 새로운 노드를 만들어 연결하는것이다.

 

 

노드 탐색   - 함수 : STL_GetNodeAt();

 

장점 : 배열이 인덱스를 이용하여 즉시 원하는  요소를 취할 수 있게 한다.

 

단점 : 헤드부터 시작해서 다음노드에 대한 포인터를 징검다리삼아 차근차근

노드의 수를 세어나가야만 원하는 요소에 접근할 수 있다.

 

 

노드 삭제   - 함수 : STL_RemoveNode();

 

임의의 노드를 제거하는 연산.

삭제하고자 하는 노드를 찾은 후 해당 노드의 다음 노드를 이전 노드의

NextNode 포인터에서 제거하면 된다.

 

그리고 삭제한 노드는 달리 쓸 곳이 없다면 STL_DestroyNode() 함수를 이용해

소멸 시키면된다.

 

 

노드 삽입   - 함수 : STL_InsertAfter();

 

노드 삽입은 노드와 노드 사이에 새로운 노드를 끼워넣는 것이다.

 

 

노드 개수 세기  - 함수 : STL_GetNodeCount()

728x90
반응형

'back-end > C & API' 카테고리의 다른 글

window api GetCurPos, ScreenToClient  (0) 2023.07.21
window api wsprintf 와 swprintf의 차이점  (0) 2023.07.21
c언어에서 리스트란?  (0) 2023.07.21
STL 란?  (0) 2023.07.21
자료구조 STL MAP  (0) 2023.07.21
728x90
반응형

리스트의 이해

 

순차 리스트

- 배열을 기반으로 구현된 리스트

 

연결 리스트

- 메모리의 동적 할당을 기반으로 구현된 리스트

 

이는 구현 방법을 기준으로 한 구분이다. 따라서 이 두 리스트의  ADT 가 동일하다고 해서 문제가 되지않는다.

 

 

리스트의 특징

- 저장형태 : 데이터를 나란히(하나의 열로) 저장한다.

- 저장특성 : 중복이 되는 데이터를 저장을 허용한다.

 

이것이 리스트의 ADT를 정의하는데  있어서 고려해야 할 유일한 내용이다.

 

 

ADT 

 

void ListInit(List* Plist);

 

- 초기화할 리스트의 주소 값을 인자로 전달한다.

- 리스트 생성 후 제일 먼저 호출되어야 하는 함수

 

void LInsert(List* Plist, LData data);

 

- 리스트에 데이터를 저장한다. 매개변수 data 에 전달된 값을 저장한다.

 

int LFirst(List* plist, LData* pdata)

 

- 첫번째 데이터가 pdata가 가리키는 메모리에 저장된다.

- 데이터의 참조를 위한 초기화가 진행된다.

- 참조 성공 시 TRUE(1), 실패시 FALSE(0) 반환

 

 

int LNext(List* plist, LData* pdata)

 

-참조된 데이터의 다음 데이터가  pdata 가 가리키는 메모리에 저장된다.

-순차적인 참조를 위해서 반복 호출이 가능하다.

-참조를 새로 시작하려면 먼저 LFirst 함수를 호출해야 한다.

- 참조 성공 시 TRUE(1), 실패시 FALSE(0) 반환

 

 

 

LDta LRemove(List* plist)

 

-LFirst  또는 LNext 함수의 마지막 반환 데이터를 삭제한다.

-삭제된 데이터는 반환된다.

-마지막 반환 데이터를 삭제하므로 연이은 반복 호출을 허용하지 않는다.

 

 

int Lcount(List* plist)

-리스트에 저장되어 있는 데이터의 수를 반환한다.

 

 

LData는 저장 대상의 자료형을 결정할 수 있도록 typedef로 선언된 자료형의 이름이다.

 

 

 LNext 와  LFirst 로 나뉜이유는 조회를 위해서 LFirst 가 필요한거다. 

 

 

배열의 특징

 
- 순차접근
 
 
Node는 데이타를 담을수 있어야하고, 연결이 가능해야한다.
 
ex)
 
typedef struct _node
{
int data; // 데이터를 담을공간
struct _none* next; //연결의 도구
}Node;
 
 
연결리스트의 삼형제
 
- Node* head = 무조건 필요하고 , 첫번째 자료구조를 표시한다.
 
- Node* tail = head는 필수지만 tail을 없어도 될때도 있다.
 
- Node* cur = 순차접근
 

 

728x90
반응형

'back-end > C & API' 카테고리의 다른 글

window api wsprintf 와 swprintf의 차이점  (0) 2023.07.21
리스트 간단 설명 요약  (0) 2023.07.21
STL 란?  (0) 2023.07.21
자료구조 STL MAP  (0) 2023.07.21
스택 예제  (0) 2023.07.21
728x90
반응형

컨테이너 : 객체를 저장하는 객체

 

반복자 : 포인터와 흡사한 개념이지만 절대 포인터가 아니다. 클래스화 되있다. 

 포인터는 변수이므로 다른것이다. 

 

함수템플릿 = 알고리즘

 

컨테이너 분류기준

 

- 메모리가 나열되는 순서 - 메모리가 배치되는 순서

 

표준 시퀀스 컨테이너 : Vector,list,deque ( 선형적인 구조 )

 

표준 연관 컨테니어 : Set,multiSet,Map,mulitMap

 

배열기반 컨테이너 : Vector , deque

 

노드기반 컨테이너 : list,Set,multiSet,Map,mulitMap

 

벡터는 push_front 와 pop_front 를 쓸수없다. 이유는 배열기반 컨테이너이기 때문이다.

 

리스트 기준으로 벡터는 느리다. 이유는 재할당을 하기 때문이다.

 

삽입,삭제에 대해서 갑은 리스트다.

 

주로쓰는 함수는 push_back() 만 쓴다고 볼수 있다.

 

컨테이너마다 반복자가 다르다.

 

벡터가 갖고있는 반복자는 임의접근 반복자이다.

 

모든 컨테이너가 동일하게 갖고있는것은 사이즈함수 이다.

 

순차열에서는 end()는 맨마지막 +1 한 상태를 가르킨다.

 

반복자 종류는 5가지가 있다.

 

입력 반복자

출력 반복자

정방향(순방향) 반복자

 

양방향 반복자 = 노드기반

임의 접근 반복자 = 배열기반

 

이레이즈 함수 = 해당부분을 지워라. 다음원소를 반환한다.

 

 

728x90
반응형

'back-end > C & API' 카테고리의 다른 글

리스트 간단 설명 요약  (0) 2023.07.21
c언어에서 리스트란?  (0) 2023.07.21
자료구조 STL MAP  (0) 2023.07.21
스택 예제  (0) 2023.07.21
리스트링크드 이용하여 산이름 추가 삭제 검색 찾기등 구현하기  (0) 2023.07.21
728x90
반응형

기본 map 은 오름차순으로 되어있다.

map은 양방향 반복자이다.

백터와 디큐만 임의접근 반복자이다.

map은 오로지 insert를 이용하여 삽입할 수 있다.

map은 first 는 key 값을 의미하는것이고 , second 는 value값을 의마한다.

key값 기준으로 정렬이 일어난다.

map은 중복되는 키값이 있을수 없다.

mulitmap은 중복되는 키값이 가능하다.

multimap 은 대입연산이 안된다.

make_pair()를 많이 쓴다.

728x90
반응형
728x90
반응형

#define SIZE 5

int top=0;

int s\[SIZE\];

void push(int data);

void pop();

void disPlay();

void main()

{

int menu=0;

int data=0;

while(menu <= 3)

{

cout <<"메뉴 선택 1. 푸시    2. 팝    3. 종료 : " << endl;;

cin >> menu;

switch (menu)

{

case 1:

printf("스택에 푸시할 값을 입력하세요 : ");

cin >>data;

push(data);

break;

case 2:

pop();

break;

case 3:

menu = 5;

break;

default :

cout << "잘못된 메뉴 입력" << endl;

break;

}

disPlay();

}

}

void push(int data)

{

if(top >= SIZE) {

cout <<"오버플로우!!" << endl;

}

else 

{

s\[top\] = data;

top++;

}

}

void disPlay()

{

int i;

for(i=0;i<SIZE;i++)

{

cout <<s\[i\] << "\\t";

}

cout << endl<< endl;

}

void pop()

{

if(top == 0) 

{

cout << "empty!!" << endl;

}

else

{

cout <<"pop된 값은 ?"<< s\[top-1\] <<"\\t";

s\[top-1\]=0;

top--;

}

} 
728x90
반응형

+ Recent posts

728x90
반응형