• 《算法导论》第10章 基本数据结构 (2)链表



    《算法导论》里实现的是无序双向链表

    源文件 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("\n");         
    }
    
    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_test.c:测试数据。

    #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;
    }
    



  • 相关阅读:
    如何把pdf文档转化为word
    Win7系统中wmiprvse.exe占用CPU高如何解决
    Visual studio加载项目时报错 尚未配置为Web项目XXXX指定的本地IIS,需要配置虚拟目录。解决办法。
    SQL Server新增用户并控制访问权限设置。
    vs2013 中已经添加了引用,编译还是提示没有添加引用
    vue-cli中引入jquery方法
    vue-vuex安装
    vue2.0项目结构和打包发布
    从(0)新开始vue2.0【安装】
    js判断网络连接情况:navigator.onLine
  • 原文地址:https://www.cnblogs.com/xiaomaohai/p/6157857.html
Copyright © 2020-2023  润新知