본문 바로가기

Daily Report

110708 연결리스트 / 자기참조포인터

typedef struct _node    =  typedef struct _node {int iNum;}NODE;
{
  int iNum;
  }NODE;


왼쪽의 구조체를 바꾸면 오른쪽과 같습니다
이것은 typedef 형을 보면 쉽게 이해할수 있습니다

typedef oldtype newtype;


typedef     struct _node {int iNum;}      NODE;
                                    [oldtype]             [newtype]              


값을 연결하여 전달하는 두가지 방법

1) 똑같이 반복되어 코드가 수월해진다
  p = &one;
  
  printf("\n");
  
  printf("%d->",p->iNum);
  p=p->next;
  printf("%d->",p->iNum);
  p=p->next;
  printf("%d->",p->iNum);
  p=p->next;
  printf("NULL\n");



2) 변수가 추가되면  printf문의 길이가 길어진다 하지만 1)보다는 간결하다
  printf("%d->",one.iNum);
  printf("%d->",one.next->iNum);
  printf("%d->",one.next->next->iNum);
  printf("NULL\n");


자기참조포인터
typedef struct _node
{
  int iNum;
  struct _node *next;
}NODE;


: 구조체가 자기 자신을 가리키는 포인터


과제1)
array[4] = {5,1,4,2,3} 를  1,2,3,4,5 그리고 5,4,3,2,1로 순서대로 출력하기

#include <stdio.h>
#include "NODE.h"

int main()
{
  NODE array[5];
  NODE *head;
  
  array[0].iNum = 5;
  array[1].iNum =1;
  array[2].iNum = 4;
  array[3].iNum = 2;
  array[4].iNum = 3;
  
  array[1].next = &array[3];
  array[3].next = &array[4];
  array[4].next = &array[2];
  array[2].next = &array[0];
  array[0].next = 0;
  
  head = &array[1];
  
  while(head != 0)
  {
    printf("%d -> ", head->iNum);
    head = head->next;
  }
  printf("NULL\n");
  
  array[0].next = &array[2];
  array[2].next = &array[4];
  array[4].next = &array[3];
  array[3].next = &array[1];
  array[1].next = 0;
  
  head = &array[0];
  
  while(head != 0)
  {
    printf("%d -> ", head->iNum);
    head = head->next;
  }
  printf("NULL\n");
  
  return 0;
}

결과