연결 리스트란 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식이다.



Ⅰ. 연결 리스트의 구성 



연결 리스트는 노드로 이루어져 있다. 노드란 자료 하나를 담고있는 것을 말한다.


노드는 자기 자신의 값과 다음 노드를 가리키는 노드 포인터로 구성된다.

( 처음 부분의 노드를 Head 마지막 부분의 노드를 Tail 이라고 한다 )


아래 그림들의 연보라 색과 하늘색과 같이 각 노드는 값을 가지고 그 옆에 다음 노드로 가는 주소값을 가져 서로 연결되게 된다.( 연보라 부분이 값을 담는 부분, 하늘색 부분이 다음 노드로 넘어가는 주소 부분이다)


노드를 연결한 방법에 따라 단순 연결 리스트, 이중 연결 리스트, 원형 연결 리스트로 구분된다.



  ① 단순 연결 리스트



위의 그림과 같이 각 노드에 자료 공간과 한 개의 포인터 공간이 있고, 각 노드의 포인터는 다음 노드를 가리킨다.




② 이중 연결 리스트



위의 그림과 같이 단순 연결 리스트와 비슷하지만, 포인터 공간이  앞과 뒷 부분에 2개가 있어 

각각의 포인터는 앞의 노드와 뒤의 노드를 가리킨다.


③ 원형 연결 리스트 



위의 그림과 같이 일반적인 연결 리스트에 마지막 노드와 처음 노드를 연결시켜 원형으로 만든 구조 이다.




Ⅱ. 링크드 리스트 구현 


#include <stdio.h>

#include <stdlib.h>


typedef struct member

{

    char name[20];

    int age;

    struct node *NEXT;

}MEM;


int main(void)

{

    int nop=0,i;

    printf("사람은  명입니까? : ");

    scanf("%d",&nop);

    MEM* name=(MEM*)malloc(sizeof(MEM));

    MEM* age=(MEM*)malloc(sizeof(MEM));

    

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

    {

        printf("%d번째 사람의 이름은? : ",i+1);

        scanf("%s",name[i].name);

        printf("%d번째 사람의 나이는? : ",i+1);

        scanf("%d",&age->age);

        printf("\n\n\n이름 : %s\n나이: %d\n\n\n",name[i].name,age->age);

    }

 

}

'Programming > C' 카테고리의 다른 글

[ Project ] Wild!  (0) 2015.08.27
[ Project ] Stack_Linked List  (0) 2015.08.27
구조체 ( Struct )  (0) 2015.08.27
Stack과 Queue  (0) 2015.08.26
Call-by-value 와 Call-by-reference  (0) 2015.08.26
구조체 ( Struct ) Programming/C 2015. 8. 27. 10:10

구조체란 서로 관련있는 하나 이상의 변수들을 묶어 사용하는 것을 말합니다.

예를 들면 변수 중에 신원 정보를 파악할 수 있도록 이름, 나이, 성별등을 입력하는 변수들을 하나로

묶어 사용하는 것을 말합니다.

 


Ⅰ.  구조체 정의


 구조체를 정의 할때의 형식은 아래와 같은 형식으로 정의합니다.


struct identity{

    int age;

    char name[20];

    char gender[6];

};


identity란 구조체 명을 의미하고 안에 있는 변수들은 identity라는 구조체에 포함된 변수들입니다.

 



Ⅱ. 구조체의 선언



구조체를 선언하는 방식에는 여러가지의 방법들이 있습니다. 



struct identity{

    int age;

    char name[20];

    char gender[6];

} iden;




struct identity{

    int age;

    char name[20];

    char gender[6];

};

    struct identity iden;




struct identity{

    int age;

    char name[20];

    char gender[6];

};

typedef struct identity IDEN;

IDEN iden;




typedef struct identity{

    int age;

    char name[20];

    char gender[6];

}IDEN;

IDEN iden;



위와 같이 여러가지의 선언 방법이 있습니다.

③번과 ④번에 나온 typedef라는 것은 구조체 뿐만 아니라 다른 곳에서도 유용하게 널리쓰입니다.

 

typedef의 기능은 변수를 선언할 때 자료형의 이름을 사용자의 임의대로 바꿔줄 수 있습니다.

예를 들어 unsigned int * 와 같이 긴 자료형을 일일이 칠려면 귀찮기도 하고 불편합니다.

이때 typedef unsigned int* P_UNIT; 를 입력하여 unsigned int*을 P_UNIT로 

바꿔줄 수 있습니다. 


위와 같이 typedef를 사용하실 때에는 typedef (변경할 자료형)(변경후 자료형)형식으로 사용 합니다.





Ⅲ. 구조체 사용 


구조체를 사용할 때는 아래와 같이 사용 합니다.


#include <stdio.h>


struct identity{ // 구조체의 

    int age;

    char name[20];

    char gender[6];

} iden; // 구조체의 식별자


int main (void){

struct identity iden; // 구조체 변수의 선언

    printf("Name? : "); scanf("%s",iden.name); 

// 구조체를 사용할 때는 구조체 .변수  으로 사용

    printf("Age? : "); scanf("%d",&iden.age);

    printf("Gender? : "); scanf("%s",iden.gender);


 

}


의 주석에서의 설명과 같이 다른 함수내에서 사용하기 위해 구조체를 선언 해줍니다.

main 함수에서 iden.name 같은 형식은 구조체를 사용하기 위한 형식으로 (구조체 명.변수명)으로 

사용합니다.


★ 구조체를 사용하여 함수의 인자로 전달과 반환 대입연산은 가능하지만 사칙연산은 안됩니다. 




'Programming > C' 카테고리의 다른 글

[ Project ] Stack_Linked List  (0) 2015.08.27
연결 리스트 ( Linked List )  (0) 2015.08.27
Stack과 Queue  (0) 2015.08.26
Call-by-value 와 Call-by-reference  (0) 2015.08.26
2차원 배열  (0) 2015.08.26
Stack과 Queue Programming/C 2015. 8. 26. 23:41

Ⅰ. Stack


Stack 은 LIFO ( Last In First Out ) 으로 늦게 들어온 게 먼저 나오는 형태입니다. 

(Ex) 1, 2, 3 순으로 들어가면 3, 2, 1 순으로 나온다.


< 코드 설명 >

1. Stack 에서 데이터를 넣는 것을 푸시 ( Push ) , 빼내는 것을 팝 ( Pop ) 이라고 합니다. 

2. Top 이라는 위치에서 데이터의 입력과 출력이 일어납니다.


< Stack 예제 >




< 실행 결과 >





Ⅱ. Queue


Queue FIFO ( First In First Out )  으로 먼저 들어온 게 먼저 나오는 형태입니다.

(Ex) 1, 2, 3 순으로 들어가면 1, 2, 3 순으로 나온다.


Stack는 입력을 받는 곳에서 출력이 되지만 Queue 입력을 받는 곳과 출력을 하는 곳이 다르기 때문에 

Rear에서 입력이,  Front에서 출력이 됩니다.


< Queue 예제 > 



전에 만들어 놓은 코드의 Push() 함수 부분에 큰 오류가있어서 다시 만들었습니다..


< 출력 결과 >




구분하기 쉽게 " . " 으로 구분할 수 있게 하였습니다.


'Programming > C' 카테고리의 다른 글

연결 리스트 ( Linked List )  (0) 2015.08.27
구조체 ( Struct )  (0) 2015.08.27
Call-by-value 와 Call-by-reference  (0) 2015.08.26
2차원 배열  (0) 2015.08.26
동적 할당  (0) 2015.08.26