링크: C 언어 설명

2373 단어
링크 목록
정의.
데 이 터 를 포함 한 독립 된 데이터 구조의 집합 이다.링크 의 모든 노드 는 체인 이나 지침 을 통 해 연결 되 어 있다.프로그램 은 포인터 로 링크 의 노드 를 방문 합 니 다.
싱글 체인 리스트
각 노드 는 다음 노드 를 가리 키 는 지침 을 포함 하고 링크 의 마지막 노드 의 지침 필드 의 값 은 NULL 이 며 링크 를 제시 한 후에 다른 노드 가 없습니다.
  • 링크 의 첫 번 째 노드 를 통 해 나머지 모든 노드 를 방문 할 수 있다.
  • 루트 포인터 (root pointer) 는 링크 의 첫 번 째 노드 를 가리킨다.
  • typedef struct NODE{
        struct NODE *link;
        int value;
    }Node;
    

    싱글 체인 시트 삽입
    새 노드 를 질서 있 는 단일 체인 시트 에 삽입 합 니 다.
  • 삽입 함 수 는 링크 의 끝 에 도 착 했 는 지 확인 해 야 합 니 다
  • root 는 지침
  • 새 노드 에 메모리 할당 성공 여부
  • #define FALSE 0
    #define TRUE 1
    
    int sll_insert(Node **linkp,int new_value){
        Node *current;
        Mode *new;
        
        //        :      
        while((current = *linkp) != NULL && current->value < new_value)
        linkp = &current -> link;
        
        //         
        new = (Node *)malloc(sizeof(Node));
        
        //           false
        if(new == NULL)
        return FALSE;
        
        //          
        new->value = new_value;
        new->link = current;
        
        return TRUE;
    }
    

    더 블 링크
    모든 노드 는 두 개의 지침 을 포함한다. 앞의 노드 를 가리 키 는 지침 과 뒤의 노드 를 가리 키 는 지침 이다.
    typedef struct NODE{
        struct NODE *fwd;
        struct NODE *bwd;
        int value;
    }Node;
    

    루트 노드
  • 루트 노드 fwd 필드 는 링크 의 첫 번 째 노드
  • 를 가리킨다.
  • 루트 노드 bwd 필드 는 링크 의 마지막 노드
  • 를 가리킨다.
  • 계량 표 가 비어 있 으 면 두 필드 모두 NULL
  • 입 니 다.
    더 블 링크 삽입
    삽입 값 이 링크 에 존재 하지 않 을 때 삽입 하 는 삽입 함 수 를 만 듭 니 다.
    노드 를 링크 에 삽입 하면 발생 할 수 있 는 네 가지 상황
  • 새 값 을 링크 의 중간 위치 에 삽입 합 니 다
  • 새 값 을 링크 의 시작 위치 에 삽입 합 니 다
  • 새 값 을 링크 의 끝 위치 에 삽입 합 니 다
  • 원래 링크 가 비어 있 는 상황 에서 삽 입 된 위 치 는 시작 위치 이자 끝 위치
  • int dll_insert(Node *rootp,int value){
        Node *this;
        Node *next;
        Node *new;
        
        for(this = rootp;(next = this->fwd) != NULL;this = next){
            if(next->value == value)
            return 0;
            if(next->value>value)
            break;
        }
        new = (Node *)malloc(sizeof(node));
        
        if(new == NULL)
        return -1;
        
        new->value = value;
        
        newnode->fwd = next;
        this->fwd = new;
        
        if(this != rootp)
        new->bwd = this;
        else
        new->bwd = NULL;
        
        if(next != NULL)
        next->bwd = new;
        else
        rootp->bwd - new;
        
        return 1;
    }
    

    좋은 웹페이지 즐겨찾기