[DataStruct 09.15] 2. 정리 두째날-링크드리스트!!ㅋㅋ

2010. 9. 15. 11:20Data Struct

1. 연결 리스트란?
일정 한 순서를 가지는데이터 요소들을 표현하는 방법 종료는 단일 링크드 환영 링크드 m중링크드 리스트가 있다 .
 사실 뭐 생각하는 모든것이 구조가 된다고 생각하면 될것이다.
 배열  연결리스트
 장점 : 논리적인 순서와 물리적인 순서와 같다. 그러므로 사용하기 쉬운 구조이고
 단점 :  새로운 자료의 삽입 또는 삭제 시 전체적으로 자료 이동 필요 ->검색할때 많은 시간이 걸린다.
항상 최대 원소 개수에 필요한 메모리 할당하며 실제 사용하지 않는 공간을 활당해야 한다.
 장점: 물리적구조와 다르며 필요에 의해 크기를 계속 확장할수 있는 구조이다. 검색시 빠르게 검색할수 있으면 쉽게 사용할수 있는 자료구조 형태이다.

단점 한두개의 자료를 저장할때는 메모리를 크게 활당한다.. 

2. 데이터 요소(NODE의 요소)


 데이터 정보(Data)와 위치정보(Pointer)두가지는 꼭 가지고 있어야 한다.
 데이터 정보(데이터 필드)는 정보가 저장되는 부분으로 시스템제공 데이터형 또는 사용자정의 데이터형이어야 한다.
 위치정보(링크필드)는 포인터를 가르키며 다음노드나 이전노드를 가르기게 된다.
 이 노드들은 메모리안에서 노드의 물리적 순서와 리스트의 논리적 순서와 일치할 필요가 없다.
 
  struct pnode{
          char data;
          struct pnode *next;
}*head;
tydef struct pnode NODE;


3. 노드 만들기
head=(NODE*)malloc(sizeof(NODE));
head=NULL;

4. 노드에 갑 삽입 하기
 if(head==NULL)// 처음 입력할 때
 {
        head->next=NULL;
        head->data='a';
 }
else//한번더 입력할때
{
       NODE temp;
       temp=head;
       while(temp->next!=NULL)
               temp=temp->next;
       temp->next=(NODE*)malloc(sizeof(NODE));
       temp=temp->next;
       temp->data='b';
       temp->next=NULL:
 }

5. 노드의 값 삭제 하기
 if(head==NULL)// 처음 입력할 때
 {
       //삭제할 값이 없습니다.
 }
else//삭제 값을 찾는다.
{
       char cha;
       scanf("%c",&cha);
       NODE temp;
       temp=head;
       while(temp->next!=NULL&&temp->next->date!=cha)
               temp=temp->next;
      if(temp->next!=NULL)
             temp->next=temp->next->next;
      else
             temp->next=NULL;
 }

추가적으로 뭐 환영이나 이중이나 뭐 별반 다를꺼 없으며 포인터가 없는 C#같은경우 걍 클래스로 하면 연결된다.
왜냐면 클래스는 참조형 변수기 때문에 ...ㅋㅋ 뭐 없는듯