• 建立完整的单向动态链表(包括初始化、创建、插入、删除、查找、销毁、输出)


    建立完整的单向链表

    #include<stdio.h>
    #include<stdlib.h>
    typedef struct node
    {
         int data;//数据部分
         struct node *next;//指针部分
    }Node;
    typedef Node List;
    //初始化链表
    List* initList();
    //销毁链表
    void destoryList(List *list);
    //插入数据
    void insertData(List *list,int Data);
    //删除数据
    void removeData(List *list,int Data);
    //查找数据
    Node* findData(List *list,int Data);
    //打印链表内容
    void printList(List *list);
    int main()
    {
            //初始化链表
            List *list = initList(); 
            //插入数据
            for(int i=0; i<10; i++)
            {
                 insertData(list,i);
            }
            printList(list);
            //查找数据
            printf("5的地址:%p
    ",findData(list,5));
            printf("10的地址:%p
    ",findData(list,10));
            //删除数据
            removeData(list,0);
            printList(list);
            //销毁链表
            destoryList(list);
    return 0;
    }
    //初始链表
    List* initList()
    {
            List *list = (List*)malloc(sizeof(Node));
            list->data = 0;
            list->next = NULL;
            return list;
    }
    //销毁链表
    void destoryList(List *list)
    {
            Node *pHead = list;//用来记录初始化的链表头结点
            while(list != NULL)
            {
                      //先移到下一个结点
                      list = list->next;
                      //释放头结点
                      free(pHead);
                      //记录新的头结点
                     pHead = list;
             }
    }
    //插入数据(一般都在表尾插入数据)
    void insertData(List *list,int Data)
    {
             //先分配一个新的结点
            Node *pNode = (Node*)malloc(sizeof(Node));
            pNode->data = Data;
            pNode->next = NULL;
            //将新结点链接到到尾部
           while(list->next != NULL)
           {
                      list = list->next;//先找到链表的尾结点
            }
           list->next = pNode;//将新结点链接到尾结点
    }
    //删除数据(头结点不可删除,不然后面的结点就无法再进行遍历了)
    void removeData(List *list,int Data)
    {
            //1.查找结点,并记录上一个结点
            //Node *pPre = NULL;
            Node *pPre = list;
            list = list->next;//跳过头结点
            while(list!= NULL)
            {
                     if(list->data == Data)
                    {
                                  break;
                    }
                    pPre = list;
                    list = list->next;
           }
           if(list!=NULL)
           {
                    //2.找到后,将上一个结点和当前结点的下一个结点链接
                    pPre->next = list->next;
                   //3.删除当前结点
                    free(list);
          }
    }
    //查找数据
    Node* findData(List *list,int Data)
    {
         while(list!= NULL)
         {
                     if(list->data == Data)
                    {
                          break;
                    }
                   list = list->next;
          }
    return list;
    }
    //打印链表内容
    void printList(List *list)
    {
          list = list->next;//跳过头结点
          while(list!= NULL)
          {
                   printf("%5d",list->data);
                  list = list->next;
          }
          printf("
    ");
    }
     
  • 相关阅读:
    Java++:常用工具|性能监测|服务监控
    Vue++:Vuecli4.x 的配置文件配置方法
    Vue++: gyp ERR! find Python
    Node++:Windows 环境搭建 Vue 开发环境
    linux++:free h 详解
    踩坑纪:windows 系统下,nodejs版本管理器无法使用n来管理
    Node++:NodeJs 版本管理工具(n | nvm)n教程
    Vue++:Error: 'XXX' is defined but never used (nounusedvars)报错的解决方案
    [MOSS]关闭弹出窗口
    安装 64 位版本的 Office 2010 后,无法查看数据表视图中的列表
  • 原文地址:https://www.cnblogs.com/XYQ-208910/p/4707695.html
Copyright © 2020-2023  润新知