초보 와 함께 데이터 구 조 를 배 우 는 간단 한 단일 체인 표 실현

국경일 이 끝 난 지 일주일 이 되 었 고 일 도 일주일 이 되 었 다.흐리멍덩 하고 sdk 와 문서 도 다 썼 으 며 bootloader 에 spi flash 의 읽 기와 쓰기 기능 도 실현 되 었 다.그러나 마음 은 텅 비어 왠 지 기분 이 좋 지 않 았 다.이번 주 에 저 는 많은 것 을 깨 달 았 습 니 다. 제 길 은 계속 가 는 것 을 선 택 했 습 니 다. 어쨌든.잘 될 거 야, 다 잘 될 거 야.
       토요일 에 도 회사 에 왔 습 니 다. 예전 과 달리 저 는 더 이상 일 을 하지 않 습 니 다. 저 는 배우 고 싶 은 것 을 배 워 야 합 니 다.배 운 데이터 구조 가 많 지 않 아 다 잊 어 버 리 고 정리 하기 시작 했다.
       예전 에는 기 존의 c + + 의 STL 로 각종 데이터 구 조 를 실 현 했 지만 이렇게 하면 데이터 구조의 참뜻 만 배 울 수 있 고 배우 지 못 했다.엄 울 민 선생님 의 책 을 다시 들 고 가장 간단 한 링크 부터 시작 하 자.
       우선 자신 이 쓴 코드 를 보 세 요.
#include <stdio.h>

#include <stdlib.h>

#include <string.h>

 

typedef struct list

{

       int data;

       struct list *next;     

}List;

 

List* list_create(void);

void list_insert(List *head, int value);

void list_delete(List *head, int value);

void list_destroy(List *head);

void list_order(List *head);

void list_print(List *head);

 

int main(void)

{

       List *head;

       int i;

       

       head = list_create();

 

       for(i = 1; i <= 5 ;i++)

              list_insert(head, i);

 

       list_print(head);     

       printf("
"); list_order(head); list_print(head); printf("
"); list_delete(head, 3); list_print(head); printf("
"); list_destroy(head); return 0; } /* 。 */ List* list_create(void) { List *head; head = (List *)malloc(sizeof(List)); head->next = NULL; return head; } /* value */ void list_insert(List *head, int value) { List *stu, *pos; pos = head; while(pos->next != NULL) pos = pos->next; stu = (List *)malloc(sizeof(List)); stu->data = value; stu->next = NULL; pos->next = stu; pos = pos->next; } /* value */ void list_delete(List *head, int value) { List *pos1, *pos2; int flag = 1; pos1 = head; while(pos1->next != NULL) { if(pos1->next->data == value) { pos2 = pos1->next; pos1->next = pos2->next; free(pos2); flag = 0; break; } pos1 = pos1->next; } if(flag) { printf("No emlement
"); } } /* */ void list_print(List *head) { int i = 0; List *pos; pos = head; if(pos->next == NULL) { printf("Empty list
"); return; } while(pos->next != NULL) { pos = pos->next; printf("%d ", pos->data); } printf("
"); } /* */ void list_destroy(List *head) { List *pos1, *pos2; pos1 = head; if(pos1->next == NULL) { printf("Empty list
"); return; } while(pos1->next != NULL) { pos2 = pos1; pos1 = pos1->next; free(pos2); } free(pos1); } /* */ void list_order(List *head) { List *pos1, *pos; List *tail1, *pri1, *mid1; List *tail2, *pri2, *mid2; pos = head; if(pos->next == NULL) { printf("Empty list
"); return; } while(pos->next != NULL) { pri1 = pos; mid1 = pri1->next; tail1 = mid1->next; pos1 = pos; while(pos1->next != NULL) { pri2 = pos1; mid2 = pri2->next; tail2 = mid2->next; if(mid1->data < mid2->data) { mid1->data ^= mid2->data; mid2->data ^= mid1->data; mid1->data ^= mid2->data; } pos1 = pos1->next; } pos = pos->next; } }

     비교적 간단 하면 설명 을 많이 하지 않 겠 다.

좋은 웹페이지 즐겨찾기