제10 장 기본 데이터 구조 (2) 링크

2283 단어 데이터 구조
에서 실 현 된 것 은 무질서 한 양 방향 링크 이다.
원본 파일 list. h: 링크 의 인터페이스, 링크 와 노드 의 유형, 그리고 링크 가 지원 하 는 동작 을 정의 합 니 다.
typedef int DATA_TYPE;

//               
struct tagNode {
     DATA_TYPE data;
     struct tagNode *prev, *next;
};
typedef struct tagNode Node;

typedef struct {
     Node *head;    
} List;


List * list_create(void);
Node * node_create(DATA_TYPE k);
void list_destory(List*);
void list_print(List*);

Node * list_search(List*, DATA_TYPE);
void list_insert(List*, Node*);
void list_delete(List*, Node*);

원본 파일 list. c: 링크 의 실현.
#include <stdio.h>
#include <stdlib.h>
#include "list.h"

List * list_create(void)
{    
     return malloc(sizeof(List));
}

Node * node_create(DATA_TYPE k)
{
     Node *node = malloc(sizeof(Node));
     node->data = k;
     node->prev = NULL;
     node->next = NULL;
     return node;
}

void list_destory(List *list)
{
     free(list);
}

void list_print(List* list)
{
     Node *node = list->head;
     while (node != NULL) {
          printf("%d -> ", node->data);
          node = node->next;
     }
     printf("
"); } Node * list_search(List *list, DATA_TYPE k) { Node *node = list->head; while (node != NULL && node->data != k) node = node->next; return node; } void list_insert(List *list, Node *x) { x->next = list->head; if (list->head != NULL) list->head->prev = x; list->head = x; x->prev = NULL; } void list_delete(List *list, Node *x) { if (x->prev != NULL) x->prev->next = x->next; else list->head = x->next; if (x->next != NULL) x->next->prev = x->prev; }

원본 파일 list테스트 데이터.
#include <stdio.h>
#include "list.h"

int main(void)
{
     List *list = list_create();

     list_insert(list, node_create(13));
     list_insert(list, node_create(8));
     list_insert(list, node_create(11));
     list_print(list);

     Node *node = list_search(list, 8);
     list_delete(list, node);    
     list_print(list);    

     list_destory(list);

     return 1;
}

좋은 웹페이지 즐겨찾기