기타 강좌

#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
웹디자인 관련 웹 디자인 무료 버튼 템플릿! - Clean E-Commerce Web Buttons file 아방스 2011.12.07 2166
웹디자인 관련 웹 디자인 무료 버튼 템플릿! - Download Button file 아방스 2011.12.07 2321
웹디자인 관련 웹 디자인 무료 버튼 템플릿! - Download The Source Files Button file 아방스 2011.12.07 2752
웹디자인 관련 웹 디자인 무료 버튼 템플릿! - Green App Store Button file 아방스 2011.12.07 2888
웹디자인 관련 웹 디자인 무료 버튼 템플릿! - Light to Dark Web Buttons file 아방스 2011.12.07 2759
웹디자인 관련 웹 디자인 무료 버튼 템플릿! - Pink Vibrant “Call To Action” file 아방스 2011.12.07 2894
웹디자인 관련 웹 디자인 무료 버튼 템플릿! - PSD Download Buttons file 아방스 2011.12.07 3279
웹디자인 관련 웹 디자인 무료 버튼 템플릿! - Red Download Button file 아방스 2011.12.07 2829
웹디자인 관련 웹 디자인 무료 버튼 템플릿! - Sexy Green Download Button file 아방스 2011.12.07 2993
웹디자인 관련 웹 디자인 무료 버튼 템플릿! - Simple Download Buttons file 아방스 2011.12.07 2969
웹디자인 관련 웹 디자인 무료 버튼 템플릿! - Sticky 3D Buttons file 아방스 2011.12.07 3024
웹디자인 관련 웹 디자인 무료 버튼 템플릿! - Web 2.0 Download Buttons file 아방스 2011.12.07 3575
웹디자인 관련 웹 디자인 무료 버튼 템플릿! - Web Buttons Vector Graphic file 아방스 2011.12.07 3251
웹디자인 관련 웹 디자인 무료 버튼 템플릿! - Wide Green Button file 아방스 2011.12.07 3526
웹디자인 관련 웹 디자인 무료 버튼 템플릿! - “Call To Action” Button file 아방스 2011.12.07 2015
웹디자인 관련 웹 디자인 무료 버튼 템플릿! - “Call To Action” Buttons file 아방스 2011.12.07 1750
웹디자인 관련 웹 디자인 무료 버튼 템플릿! -Bright 3D Buttons file 아방스 2011.12.07 1380
기타 윈도우 XP에서 16비트 도스가 실행이 안될때 스크립트 2008.07.25 3567
기타 윈도우 게임을 휴대폰이나 태블릿으로 돌려보자 폰으로컴퓨터하기 2014.01.21 1428
기타 유튜브 동영상 다운로드 하기 6 아방스 2010.11.03 2499
Board Pagination Prev 1 ... 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Next
/ 19