기타 강좌

#include <stdio.h>
#include <stdlib.h>


int stack[10];
int top;
enum {PUSH = 0, POP, PRINT, EXIT};

void init_stack()
{
 top = -1;
}

void push(int nPushVal)
{
 if(top >= 9)
  printf("Stack OverFlow!! n");
 else
  stack[++top] = nPushVal;
}

int pop()
{  
    int nPopVal = 0;

 if(top < 0){
  printf("Stack is Empty!! n");
  return -1;
    }
   
 else{
    nPopVal = stack[top--];
    return nPopVal;
    }
}

void printstack()
{
 int i;
 
 for(i = 0; i<=top; i++)
  printf("%d. %d n", i, stack[i]);
}

void ShowMenu()

 printf("Select : 0)PUSH 1)POP 2)PRINT 3)EXIT n");
}

main()
{
 int nSelectNum = 0;
 int nPushVal   = 0;
 int nPopVal    = 0;


 init_stack();

 while(1)
 {
  ShowMenu();
  scanf("%d", &nSelectNum);
 
   switch(nSelectNum)
   {
   case PUSH :
    printf("Input Value : ");
    scanf("%d", &nPushVal);
    push(nPushVal);
    printf("PUSH %d n", nPushVal);
    break;

   case POP :
    nPopVal = 0;
    nPopVal = pop();
    
    if(nPopVal == -1)
    break;
    
    else
    printf("POP %d n", nPopVal);
    break;

   case PRINT :
    printstack();
    break;

   case EXIT :
    printf("EXIT!! n");
    exit(1);

   default :
    printf("Wrong Number!! n");
    break;
   }
   
             
  
  }
 }

 

휴;;(삐질삐질)  자료구조 중 가장 기본이라고 보셔도 되는 스택을 한번 구현해 봤습니다;;ㅋㅋ

오류가 있다면 댓글로 정중한 태클을 걸어주시기 바랍니다^^

-강아지포스
 


 

  

Comment '3'
  • ?
    제니스 2009.06.13 22:17

    자료구조 ㅎㅎ;;

    초보자분들이 배우기엔 ㅎㅎ

  • ?
    Cin 2009.06.14 00:00

    우선 프로그램 메인변수
    stack 10 개
    top
    enum {PUSH=0, POP, PRINT, EXIT}
        이건 값에대한 문자열 반환 같은데. . .;; 잘은...

    해석은 메인부터

    int nSelectNum,NPushVal nPopVal 생성및 초기값 0 대입

    init_stack-이름으로 봐선 stack 초기화
    =실행된 내용은 top 에 -1 대입

    다음
    while(1) //반복조건이 생략되고 상수 1이 들어갔으므로
          //항상 참인 조건이 되므로 무한반복. ; ;
          //break; 시에도 여기로 돌아와 다시 반복함.
    ShowMenu(); - 메뉴표시?
    화면에 문자표시 >> "Select : 0)PUSH 1)POP 2)PRINT 3)EXIT

    scanf("%d", &nSelectNum); 키보드에서 입력 1개 받음
           그리고 그 값을 nSelectNum 에 저장함.

    switch(nSelectNum) 여기부터 좀 이해 불가..
                     int 로 선언되었고 enum 참조도 안되었는데;
                nSelectNum이 문자열 반환이;;;???
               기초지식이 얇은 관계로 패스;
    :::PUSH 선택시
       Input Value 표시와 입력 받음
    push(nPushVal) 입력받은 값으로 Push 실행

     {
      if(top >= 9) // 입력된 값이 만든 스텍보다 많을경우()
       printf("Stack OverFlow!! n");//에러메세지[가득참.]
      else
       stack[++top] = nPushVal; // 현재 스텍에 값저장.
    >>여기에.
    | //++top 이건 전처리 문자로
    |          해당 줄이 처리되기이전에 해당값을 증가시킴.
    |    top 가 -1 이 초기값 이었으므로 이시점에서 0이됨
    | }
     printf("PUSH %d n", nPushVal);
     // 이프린트문이 push() 문 안에 들어가있는건 어떨까  생각해봄;;
     break; 이후 스위치 문은 생략함. .

    switch 문의 경우 선택된 문항 이후로 모든 처리가 되므로.
    필요한 문장이 끝났을경우 이후 불필요한 문장의 실행을
    방지하기 위하여 break; 를 넣어줍니다.

    :::POP
        nPopVal = 0; // 변수 초기화
        nPopVal = pop(); // pop 실행
    ///// pop
    int pop()
    {  
        int nPopVal = 0; //이변수는 문장처음에 선언된것과는 다른변수 입니다.
     pop()라는 변수 안에서만 사용가능한 변수로 선언됨.

     if(top < 0){  // top 가 0보다 작다 즉 -1일때이므로.

                    이는 입력되었던 값이 없었다. . .

      printf("Stack is Empty!! n"); // 스텍은 비었다.
      return -1;  // -1을 반환
        }
       
     else{
        nPopVal = stack[top--];  스택에 들어온 마지막 값을 nPopVal 에 반환후  top 를 감소 시킴
     //  ++top    top -- 문장의 전에 있는지
     // 후에 있는지에 따라.
     // 문장 실행전에 실행되는지
     // 문장 실행 후에 실행될지가 정해짐.
     // --top top++ 가능함.
        return nPopVal;   스텍에서나온값을 반환함.
     // return stack[top--]; 이건 안됨?
        }
    }
    ///
       
        if(nPopVal == -1) //반환된 값이 -1 이라면 정지됨;
     //이건 -1이란 값은 정상적으로 반환이 되더라도.
     // 값으로 인정안할수도 있을거 같네요.
            break;
        else  //-1 이 아닐경우
        printf("POP %d n", nPopVal); 스텍에서 nPopVal 갑을 빼왔습니다.
        break; //끝냄.

       case PRINT :  // 프린트 실행시.
        printstack();  실행함.
    /////*
    void printstack()
    {
     int i; // 반복문에서 쓸 변수 선언
     
     for(i = 0; i<=top; i++)  i=0 에서 스텍에 값이 들어와있는
                    //변수의 위치까지의 값을 반복함.
      printf("%d. %d n", i, stack[i]);
     //매 값을 프린트 함. 0. 33  이런식?
    }
    */////
        break; //브레이크.

       case EXIT :
        printf("EXIT!! n");//문장표시
        exit(1); //프로그램을 종료함.

       default :  //PUSH POP PRINT EXIT 가 아닌 값이 입력되면.
        printf("Wrong Number!! n"); //문장표시하고
        break;  //정지..
    그럼.. while(1) 로 돌아가서; 반복 다시.

     

  • ?
    Last H 2009.06.17 19:35

    스택을 구현 했지만 스택을 모르시는 분들이 많으실 듯 한데...

    제가 아~~주 간단히 설명드리자면 스택이란 쉽게 말해 연탄 아궁이 같은 놈입니다.

    제일 밑에 깔린 연탄은 모든 연탄을 다 뺀뒤에야 뺄 수 있다 이거죠. 즉!! 키포인트!!(FILO!!!!!! 이겁니다!! first in!! last out)

    가장 처음 들어간놈이 가장 나중에 나온다!!!

    이게 가장 중요합니다.  이게 가장 중요한 이유는 자신이 처음 있던 자리를 알 수 있기 때문이죠.

    즉 내가 출발한 지점이 가장 밑에 깔려 있으니 모든 일 처리를 끝내면 다시 자기 위치로 돌아 올 수 있는 주소를 알 수 있는겁니다.

    간단히 하려니 더 어렵게 말한듯 ...;


List of Articles
분류 제목 글쓴이 날짜 조회 수
Vegas Pro 베가스 강좌 목록 아방스 2017.09.28 886
파이널컷X 파컷 강좌 목록 아방스 2017.06.18 757
기타 해커스쿨 F.T.Z서버에 대해 궁금하신 분들은 글올려주세요... - 하늘 - 2009.08.03 3428
C언어 한글자씩 출력하기 file 정체불명 2012.01.21 3730
플래시 플래시 MX 활용법! 1 은색바람 2011.09.09 2796
어도비 프리미어 프리미어 cc 2014 새로운 기능 - Premiere Pro CC – April 2014 – New Features 아방스 2014.07.07 1443
게임기획 프롤로그의 여러가지 작성 방법 2 아방스 2012.04.17 4135
기타 프로그래밍 스킴 Scheme 4 "3두개 7두개로 24를 만들려면?" 프로그래밍으로 풀기 2 정체불명 2010.10.03 2479
기타 프로그래밍 스킴 Scheme 3 "3두개 7두개로 24를 만들려면?" 프로그래밍으로 풀기 1 정체불명 2010.10.03 2607
기타 프로그래밍 스킴 Scheme 2 프로그래밍한 걸 exe파일 만들어 배포하기! 2 file 정체불명 2010.10.02 3156
기타 프로그래밍 스킴 Scheme 1 다운로드부터 문법 대부분을 314초만에 알려줄게요 9 file 정체불명 2010.10.02 4828
기타 프로그래밍 스킴 7줄로 윈도우창에 그림을 출력하고 움직여보자. file 정체불명 2010.10.04 2477
기타 프로그래밍 scheme 빨간 공을 움직이다가 특정 좌표에 가면 파랗게 만들어 보자. file 정체불명 2010.10.06 2648
C언어 푸쉬푸쉬 func.h파일 file 정체불명 2012.01.25 2868
C언어 푸쉬푸쉬 data structure.h 의 내용 file 정체불명 2012.01.25 2596
기타 폴더 100개 일괄적으로 만들기 정체불명 2014.11.02 739
기타 포토스케이프 - 사진 색감 보정하기 아방스 2010.11.04 2782
기타 포토샵 크기 조절 1 제니스 2008.06.22 3914
기타 포샵 빛나는 공 4 제니스 2008.06.22 3075
에프터 이펙트 펜툴을 이용해서 키프레임 추가,삭제 및 수정방법 아방스 2011.12.08 5204
C언어 파일읽어서 배열에 넣고 다시배열에서 읽어서 화면에 출력 정체불명 2012.01.21 2702
기타 파이썬 총 강좌파일 올립니다... 3 file - 하늘 - 2009.09.10 7007
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Next
/ 19