블로그 이미지
하루, 글. 그림. 영상매체. 표현을 도와주는 기기들. 도전 중. 동화다아아
    동화다아아

    카테고리

    분류 전체보기 (176)
    잡담 (1)
    IT 기기-리뷰&뉴스 (7)
    리뷰 - 도서 (1)
    리뷰 - 영상 (0)
    리뷰 - 그림/음악 (1)
    내장형 하드웨어 (163)
    Total
    Today
    Yesterday

    -동적자료형의 특징

    ⇒ 프로그램의 실행 도중 필요에 따라 변수를 생성시키거나 소멸시킬 수 있다. 이것은 프로그램 실행시 한 번 선언된 변수는 함수의 실행이 종료될 때까지 지속되는 정적자료형과는 다른 개념이다.

    ⇒ 동적자료형의 변수는 정적자료형의 변수처럼 변수 자체가 이름을 갖는 것이 아니라 포인터 변수(참조변수)를 이용하여 간접적으로 접근한다. 이때 참조변수는 동적변수의 주소를 가지고 있다.


    - 구조체 복습

    struct _node

    {

            int iNum;

    };

    ⇒ _node는 tag이며 type이 아닌 이유는 변수명 앞에 혼자 쓸수가 없기 때문이다.

      (C++에서는 가능하다.)

    ⇒ 위의 구조체에서 type은 struct _node이다.


    typedef struct _node NODE;

    ⇒ NODE가 type이 된다.

    ⇒ 그리고 아래와 같이 풀어 쓴다.

    typedef struct _node

    {

            int iNum;

    }NODE;

    ⇒ 위 구조체에서 연결리스트를 위해

    typedef struct _node

    {

            int iNum;

            struct _node *next;

    }NODE;

    를 추가한다.

    struct _node *next;(자기참조 구조체)



    - 연결리스트의 구조

    ⇒ 연결리스트는 구조체를 이용하여 만든다. 연결 리스트는 구조체 내에 다른 구조체를 가리키는 포인터를 가짐으로서 만들 수 있다.

     


    #include<stdio.h>
    /*struct _node
    {
      int iNum;
    };
    */
    typedef struct _node
    {
            
    int iNum;
            
    struct _node *next;
    }NODE;
    int main()
    {
            NODE one;
            NODE two;
            NODE three;
            NODE *P;
        
            one.iNum 
    = 1;
            two.iNum 
    = 2;
            three.iNum 
    = 3;
      
            printf(
    "-------------------\n");  
            printf(
    "one.iNum   = %d\n", one.iNum);
            printf(
    "two.iNum   = %d\n", two.iNum);
            printf(
    "three.iNum = %d\n", three.iNum);
            

            printf("-------------------\n");  
            one.next 
    = &two;
            two.next 
    = &three;
            three.next 
    = NULL;
      
            P
    =&one;
      
            printf(
    "%d -> ", P -> iNum); // 포인터를 이용한 출력
            P
    =P->next;
            printf(
    "%d -> ", P -> iNum);
            P
    =P->next;
            printf(
    "%d -> ", P -> iNum);
            printf(
    "NULL\n");
      
            printf(
    "-------------------\n"); 
            printf(
    "%d -> ", one.iNum); // 구조체 출력
            printf(
    "%d -> ", one.next->iNum);
            printf(
    "%d -> ", one.next->next->iNum);
            printf(
    "NULL\n");
      
            printf(
    "-------------------\n");  

            P
    =&one;
            
    while(1) // 반복문 이용 1
            {
                    printf(
    "%d -> ", P -> iNum);
                    P
    =P->next;
                    
    if(P==NULL)
                    {
                            
    break;
                    }
            }
            printf(
    "NULL\n");
            printf(
    "-------------------\n");  
      
            
    for(P=&one;P!=NULL;P=P->next) // 반복문 이용 2
            {
                    printf(
    "%d -> ", P -> iNum);
            }  
            printf(
    "NULL\n");
            printf(
    "-------------------\n");  
            
    return 0;
    }

    ⇒ 실행 결과         

     

    ⇒ 처음에는 포인터를 이용하여 1 -> 2 -> 3 -> NULL로 출력해 보았고 다음은 구조체 멤버를 이용하여 출력했고 마지막으로 반복문을 이용해 값의 변화를 출력했다.



    [내장형]김동화_연결리스트 문제 풀이 보고서

    #include"node.h"
    #include
    <stdio.h>
    int main()
    {
            NODE array[
    5];
            NODE *head;
        
            printf(
    "-----------------------------\n");
            array[
    0].iNum = 5;
            array[
    0].next = 0; // NULL을 의미한다.
            array[
    1].iNum = 1;
            array[
    1].next = &array[3];
            array[
    2].iNum = 4;
            array[
    2].next = &array[0];
            array[
    3].iNum = 2;
            array[
    3].next = &array[4];
            array[
    4].iNum = 3;
            array[
    4].next = &array[2];

            head 
    = &array[1]; // head의 주소가 array[1]부터 시작한다.
            
    while(head!=NULL)
            {
                    printf(
    "%d -> ", head -> iNum);
                    head 
    = head -> next;
            }
            printf(
    "NULL\n"); 

            printf(
    "-----------------------------\n");
        
            head 
    = array; // head의 주소가 array[0]부터 시작한다.
            array[
    0].next = &array[2];
            array[
    1].next = 0;
            array[
    2].next = &array[4];
            array[
    3].next = &array[1];
            array[
    4].next = &array[3];
            
            
    while(head!=NULL) // 0이 아닐때까지
            {
                    printf(
    "%d -> ", head -> iNum);
                    head 
    = head -> next;
            }
            printf(
    "NULL\n"); 
            printf(
    "-----------------------------\n");

            
    return 0;

    ⇒ 출력 결과         

     

    Posted by 동화다아아
    , |

    최근에 달린 댓글

    최근에 받은 트랙백

    글 보관함