데이터 구조 - c 언어 설명 제2 장 (2) 단 방향 링크

2922 단어 데이터 구조
여기 서 단 방향 링크 의 c 언어 실현 을 해 보 겠 습 니 다. 예전 에 여러 번 이 루어 졌 지만 이번 실현 은 얻 은 것 이 있 습 니 다!아래 코드.
typedef struct node {
    char data;
    struct node *next;
}Linklist;

Linklist *createlinklist_head () ;
Linklist *createlinklist_tail () ;
Linklist *get (Linklist *L , int i) ;
int del (Linklist *L , int i , char *e) ;

이것 은 헤더 파일 입 니 다. 주로 단일 링크 의 데이터 구조 와 함수 헤드 를 정 의 했 습 니 다. 여기 서 저 는 디 테 일 에 신경 쓰 지 않 고 단일 링크 의 데이터 부분 을 char 형식 으로 바 꾸 었 습 니 다. 주로 알고리즘 을 실현 합 니 다.)
#include 
#include "linklist.h"
#include 

Linklist *createlinklist_head () {
    Linklist *L , *s;
    int flag = 1;
    char c;

    L = (Linklist *) malloc (sizeof (Linklist));
    L->next = NULL;

    while (flag) {
        c = getchar ();
        if (c == '.')
            flag = 0;
        else {
            s = (Linklist *) malloc (sizeof (Linklist));
            s->data = c;
            s->next = L->next;
            L->next = s;
        }
    }
    return L;
}

Linklist *createlinklist_tail () {
    Linklist *L , *s , *temp;
    int flag = 1;
    char c;

    L = (Linklist *) malloc (sizeof (Linklist));
    L->next = NULL;
    temp = L;

    while (flag) {
        c = getchar ();
        if (c == '.')
            flag = 0;
        else {
            s = (Linklist *) malloc (sizeof (Linklist));
            s->data = c;
            temp->next = s;
            s->next = NULL;
            temp = s;
        }
    }
    return L;
}

Linklist *get (Linklist *L , int i) {
    int j = 0;
    Linklist *temp = L;

    while (temp->next != NULL && j < i) {
        temp = temp->next;
        j++;
    }
    return temp;
}

int del (Linklist *L , int i , char *e) {
    int j = 0;
    Linklist *temp = L;
    Linklist *pre;

    if (temp == NULL) {
        printf ("arguement L error!
"); return 0; } if (i <= j) { printf ("arguement i error!(too small)
"); return 0; } while (1) { j++; pre = temp; temp = temp->next; if (j == i && temp != NULL) { *e = temp->data; pre->next = temp->next; free (temp); return 1; } else if (temp == NULL) { printf ("arguement i error!(too big)
"); return 0; } } }

이상 은 단일 링크 의 주요 기본 적 인 조작 인 데 그 중에서 머리 삽입 법 건축 표, 꼬리 삽입 법 건축 표, 취 조작, 삭제 작업 을 포함한다.그 중의 모든 알고리즘 을 나 는 모두 검 사 했 기 때문에 디 버 깅 코드 를 놓 지 않 을 것 이다.
결론: 여기 서 쉽게 범 할 수 있 는 오류 가 있 습 니 다. 하 나 는 성명 의 지침 을 직접 사용 할 수 없 는 것 이 아니 라 이 를 할당 하거나 malloc 를 해 야 한 다 는 것 입 니 다. 저 는 여기 서 반나절 동안 테스트 를 했 는데 마지막 으로 이 자주 범 하 는 문 제 를 발 견 했 습 니 다.또한 헤드 삽입 법 으로 시 계 를 만 들 때 도 헤드 노드 의 처리 에 주의해 야 한다. 이것 도 매우 중요 하 다.이것 이 이번 의 주요 수확 이 겠 지!매일 진보 해 야 한다!곧 기 말 이 니 좀 더 멈 춰 야 할 것 같 습 니 다.

좋은 웹페이지 즐겨찾기