zoukankan      html  css  js  c++  java
  • C语言 数据结构单向循环列表

     1 #ifndef LINKLIST_H
     2 #define LINKLIST_H
     3 
     4 #include<stdlib.h>
     5 #include<stdio.h>
     6 
     7 //链表结点
     8 typedef struct LINKNODE {
     9     void* data; //指向任何类型的数据
    10     struct LINKENODE* next;
    11 }LinkNode;
    12 
    13 //链表结构体
    14 typedef struct LINKLIST {
    15     LinkNode* head;
    16     int size;
    17 }LinkList;
    18 
    19 //打印函数指针
    20 typedef void(*PRINTLINKNODE)(void*);
    21 
    22 //初始化链表
    23 LinkList* Init_LinkList();
    24 //指定位置插入
    25 void Insert_LinkList(LinkList* list, int pos, void* data);
    26 //删除指定位置的值
    27 void RemoveByPos_LinkList(LinkList* list, int pos);
    28 //获得链表的长度
    29 int Size_LinkList(LinkList* list);
    30 //查找
    31 int Find_LinkList(LinkList* list, void* data);
    32 //打印链表结点
    33 void print_LinkList(LinkList* list, PRINTLINKNODE print);
    34 //返回第一个结点
    35 void* Front_LinkList(LinkList* list);
    36 #endif
    #include"LinkList.h"
    
    
    //初始化链表
    LinkList* Init_LinkList() {
     
        LinkList* list = (LinkList*)malloc(sizeof(LinkList));
        list->size = 0;
    
        //头结点是不保存数据信息的
        list->head = malloc(sizeof(LinkNode));
        list->head->data = NULL;
        list->head->next = NULL;
        return list;
    }
    //指定位置插入
    void Insert_LinkList(LinkList* list, int pos, void* data) {
        if (list == NULL) {
            return;
        }
        if (data == NULL) {
            return;
        }
        //友好的处理,pos越界
        if (pos < 0 || list->size) {
            pos = list->size;
        }
        //创建新的结点
        LinkNode* newnode = (LinkList*)malloc(sizeof(LinkNode));
        newnode->data=data;
        newnode->next = NULL;
        //找结点
        //辅助指针变量
        LinkNode* pCurrent = list->head;
        for (int i = 0; i < pos; i++) {
            pCurrent = pCurrent->next;
        }
        //新结点入链表
        newnode->next = pCurrent->next;
        pCurrent->next = newnode;
    
        list->size++;
    }
    //删除指定位置的值
    void RemoveByPos_LinkList(LinkList* list, int pos) {
        if (list == NULL) {
            return;
        }
        if (pos < 0 || list->size) {
            return;
        }
        //查找删除结点的前一个结点
        LinkNode* pCurrnet = list->head;
        for (int i = 0; i < pos; i++) {
            pCurrnet = pCurrnet->next;
        }
        //缓存删除的结点
        LinkNode* pDel = pCurrnet->next;
        pCurrnet->next = pDel->next;
        //释放删除结点的内存
        free(pDel);
        list->size--;
    }
    //获得链表的长度
    int Size_LinkList(LinkList* list) {
        return list->size;
    }
    //查找
    int Find_LinkList(LinkList*  list, void* data) {
        if (list == NULL) {
            return -1;
        }
        if (data == NULL) {
            return -1 ;
        }
        //遍历查找 
        LinkNode* pCurrent = list->head->next;
        int i = 0;
        while (pCurrent != NULL) {
            if (pCurrent->data == data) {
                break;
            }
            i++;
            pCurrent = pCurrent->next;
        }
        return i;
    
    }
    //打印链表结点
    void print_LinkList(LinkList* list, PRINTLINKNODE print) {
        if (list == NULL) {
            return;
        }
        //辅助指针变量
        LinkNode* pCurrent = list->head->next;
        while (pCurrent != NULL) {
            print(pCurrent->data);
            pCurrent = pCurrent->next;
        }
    }
    //返回第一个结点
    void* Front_LinkList(LinkList* list) {
        return list->head->next;
    }
    //释放链表内存 
    void FreeSpace_LinkList(LinkList* list) {
        if(list==NULL){
            return;
        }
        //辅助指针变量
        LinkNode* pCurrent = list->head;
        while (pCurrent != NULL) {
            //缓存下一个结点
            LinkNode* pNext = pCurrent->next;
            free(pCurrent);
            pCurrent = pNext;
        }
        //释放链表内存
        list->size = 0;
        free(list);
    }
    #include"LinkList.h"
    
    
    //初始化链表
    LinkList* Init_LinkList() {
     
        LinkList* list = (LinkList*)malloc(sizeof(LinkList));
        list->size = 0;
    
        //头结点是不保存数据信息的
        list->head = malloc(sizeof(LinkNode));
        list->head->data = NULL;
        list->head->next = NULL;
        return list;
    }
    //指定位置插入
    void Insert_LinkList(LinkList* list, int pos, void* data) {
        if (list == NULL) {
            return;
        }
        if (data == NULL) {
            return;
        }
        //友好的处理,pos越界
        if (pos < 0 || list->size) {
            pos = list->size;
        }
        //创建新的结点
        LinkNode* newnode = (LinkList*)malloc(sizeof(LinkNode));
        newnode->data=data;
        newnode->next = NULL;
        //找结点
        //辅助指针变量
        LinkNode* pCurrent = list->head;
        for (int i = 0; i < pos; i++) {
            pCurrent = pCurrent->next;
        }
        //新结点入链表
        newnode->next = pCurrent->next;
        pCurrent->next = newnode;
    
        list->size++;
    }
    //删除指定位置的值
    void RemoveByPos_LinkList(LinkList* list, int pos) {
        if (list == NULL) {
            return;
        }
        if (pos < 0 || list->size) {
            return;
        }
        //查找删除结点的前一个结点
        LinkNode* pCurrnet = list->head;
        for (int i = 0; i < pos; i++) {
            pCurrnet = pCurrnet->next;
        }
        //缓存删除的结点
        LinkNode* pDel = pCurrnet->next;
        pCurrnet->next = pDel->next;
        //释放删除结点的内存
        free(pDel);
        list->size--;
    }
    //获得链表的长度
    int Size_LinkList(LinkList* list) {
        return list->size;
    }
    //查找
    int Find_LinkList(LinkList*  list, void* data) {
        if (list == NULL) {
            return -1;
        }
        if (data == NULL) {
            return -1 ;
        }
        //遍历查找 
        LinkNode* pCurrent = list->head->next;
        int i = 0;
        while (pCurrent != NULL) {
            if (pCurrent->data == data) {
                break;
            }
            i++;
            pCurrent = pCurrent->next;
        }
        return i;
    
    }
    //打印链表结点
    void print_LinkList(LinkList* list, PRINTLINKNODE print) {
        if (list == NULL) {
            return;
        }
        //辅助指针变量
        LinkNode* pCurrent = list->head->next;
        while (pCurrent != NULL) {
            print(pCurrent->data);
            pCurrent = pCurrent->next;
        }
    }
    //返回第一个结点
    void* Front_LinkList(LinkList* list) {
        return list->head->next;
    }
    //释放链表内存 
    void FreeSpace_LinkList(LinkList* list) {
        if(list==NULL){
            return;
        }
        //辅助指针变量
        LinkNode* pCurrent = list->head;
        while (pCurrent != NULL) {
            //缓存下一个结点
            LinkNode* pNext = pCurrent->next;
            free(pCurrent);
            pCurrent = pNext;
        }
        //释放链表内存
        list->size = 0;
        free(list);
    }
    #include"LinkList.h"
    
    
    //初始化链表
    LinkList* Init_LinkList() {
     
        LinkList* list = (LinkList*)malloc(sizeof(LinkList));
        list->size = 0;
    
        //头结点是不保存数据信息的
        list->head = malloc(sizeof(LinkNode));
        list->head->data = NULL;
        list->head->next = NULL;
        return list;
    }
    //指定位置插入
    void Insert_LinkList(LinkList* list, int pos, void* data) {
        if (list == NULL) {
            return;
        }
        if (data == NULL) {
            return;
        }
        //友好的处理,pos越界
        if (pos < 0 || list->size) {
            pos = list->size;
        }
        //创建新的结点
        LinkNode* newnode = (LinkList*)malloc(sizeof(LinkNode));
        newnode->data=data;
        newnode->next = NULL;
        //找结点
        //辅助指针变量
        LinkNode* pCurrent = list->head;
        for (int i = 0; i < pos; i++) {
            pCurrent = pCurrent->next;
        }
        //新结点入链表
        newnode->next = pCurrent->next;
        pCurrent->next = newnode;
    
        list->size++;
    }
    //删除指定位置的值
    void RemoveByPos_LinkList(LinkList* list, int pos) {
        if (list == NULL) {
            return;
        }
        if (pos < 0 || list->size) {
            return;
        }
        //查找删除结点的前一个结点
        LinkNode* pCurrnet = list->head;
        for (int i = 0; i < pos; i++) {
            pCurrnet = pCurrnet->next;
        }
        //缓存删除的结点
        LinkNode* pDel = pCurrnet->next;
        pCurrnet->next = pDel->next;
        //释放删除结点的内存
        free(pDel);
        list->size--;
    }
    //获得链表的长度
    int Size_LinkList(LinkList* list) {
        return list->size;
    }
    //查找
    int Find_LinkList(LinkList*  list, void* data) {
        if (list == NULL) {
            return -1;
        }
        if (data == NULL) {
            return -1 ;
        }
        //遍历查找 
        LinkNode* pCurrent = list->head->next;
        int i = 0;
        while (pCurrent != NULL) {
            if (pCurrent->data == data) {
                break;
            }
            i++;
            pCurrent = pCurrent->next;
        }
        return i;
    
    }
    //打印链表结点
    void print_LinkList(LinkList* list, PRINTLINKNODE print) {
        if (list == NULL) {
            return;
        }
        //辅助指针变量
        LinkNode* pCurrent = list->head->next;
        while (pCurrent != NULL) {
            print(pCurrent->data);
            pCurrent = pCurrent->next;
        }
    }
    //返回第一个结点
    void* Front_LinkList(LinkList* list) {
        return list->head->next;
    }
    //释放链表内存 
    void FreeSpace_LinkList(LinkList* list) {
        if(list==NULL){
            return;
        }
        //辅助指针变量
        LinkNode* pCurrent = list->head;
        while (pCurrent != NULL) {
            //缓存下一个结点
            LinkNode* pNext = pCurrent->next;
            free(pCurrent);
            pCurrent = pNext;
        }
        //释放链表内存
        list->size = 0;
        free(list);
    }
    #include"LinkList.h"
    
    
    //初始化链表
    LinkList* Init_LinkList() {
     
        LinkList* list = (LinkList*)malloc(sizeof(LinkList));
        list->size = 0;
    
        //头结点是不保存数据信息的
        list->head = malloc(sizeof(LinkNode));
        list->head->data = NULL;
        list->head->next = NULL;
        return list;
    }
    //指定位置插入
    void Insert_LinkList(LinkList* list, int pos, void* data) {
        if (list == NULL) {
            return;
        }
        if (data == NULL) {
            return;
        }
        //友好的处理,pos越界
        if (pos < 0 || list->size) {
            pos = list->size;
        }
        //创建新的结点
        LinkNode* newnode = (LinkList*)malloc(sizeof(LinkNode));
        newnode->data=data;
        newnode->next = NULL;
        //找结点
        //辅助指针变量
        LinkNode* pCurrent = list->head;
        for (int i = 0; i < pos; i++) {
            pCurrent = pCurrent->next;
        }
        //新结点入链表
        newnode->next = pCurrent->next;
        pCurrent->next = newnode;
    
        list->size++;
    }
    //删除指定位置的值
    void RemoveByPos_LinkList(LinkList* list, int pos) {
        if (list == NULL) {
            return;
        }
        if (pos < 0 || list->size) {
            return;
        }
        //查找删除结点的前一个结点
        LinkNode* pCurrnet = list->head;
        for (int i = 0; i < pos; i++) {
            pCurrnet = pCurrnet->next;
        }
        //缓存删除的结点
        LinkNode* pDel = pCurrnet->next;
        pCurrnet->next = pDel->next;
        //释放删除结点的内存
        free(pDel);
        list->size--;
    }
    //获得链表的长度
    int Size_LinkList(LinkList* list) {
        return list->size;
    }
    //查找
    int Find_LinkList(LinkList*  list, void* data) {
        if (list == NULL) {
            return -1;
        }
        if (data == NULL) {
            return -1 ;
        }
        //遍历查找 
        LinkNode* pCurrent = list->head->next;
        int i = 0;
        while (pCurrent != NULL) {
            if (pCurrent->data == data) {
                break;
            }
            i++;
            pCurrent = pCurrent->next;
        }
        return i;
    
    }
    //打印链表结点
    void print_LinkList(LinkList* list, PRINTLINKNODE print) {
        if (list == NULL) {
            return;
        }
        //辅助指针变量
        LinkNode* pCurrent = list->head->next;
        while (pCurrent != NULL) {
            print(pCurrent->data);
            pCurrent = pCurrent->next;
        }
    }
    //返回第一个结点
    void* Front_LinkList(LinkList* list) {
        return list->head->next;
    }
    //释放链表内存 
    void FreeSpace_LinkList(LinkList* list) {
        if(list==NULL){
            return;
        }
        //辅助指针变量
        LinkNode* pCurrent = list->head;
        while (pCurrent != NULL) {
            //缓存下一个结点
            LinkNode* pNext = pCurrent->next;
            free(pCurrent);
            pCurrent = pNext;
        }
        //释放链表内存
        list->size = 0;
        free(list);
    }
    #include"LinkList.h"
    
    
    //初始化链表
    LinkList* Init_LinkList() {
     
        LinkList* list = (LinkList*)malloc(sizeof(LinkList));
        list->size = 0;
    
        //头结点是不保存数据信息的
        list->head = malloc(sizeof(LinkNode));
        list->head->data = NULL;
        list->head->next = NULL;
        return list;
    }
    //指定位置插入
    void Insert_LinkList(LinkList* list, int pos, void* data) {
        if (list == NULL) {
            return;
        }
        if (data == NULL) {
            return;
        }
        //友好的处理,pos越界
        if (pos < 0 || list->size) {
            pos = list->size;
        }
        //创建新的结点
        LinkNode* newnode = (LinkList*)malloc(sizeof(LinkNode));
        newnode->data=data;
        newnode->next = NULL;
        //找结点
        //辅助指针变量
        LinkNode* pCurrent = list->head;
        for (int i = 0; i < pos; i++) {
            pCurrent = pCurrent->next;
        }
        //新结点入链表
        newnode->next = pCurrent->next;
        pCurrent->next = newnode;
    
        list->size++;
    }
    //删除指定位置的值
    void RemoveByPos_LinkList(LinkList* list, int pos) {
        if (list == NULL) {
            return;
        }
        if (pos < 0 || list->size) {
            return;
        }
        //查找删除结点的前一个结点
        LinkNode* pCurrnet = list->head;
        for (int i = 0; i < pos; i++) {
            pCurrnet = pCurrnet->next;
        }
        //缓存删除的结点
        LinkNode* pDel = pCurrnet->next;
        pCurrnet->next = pDel->next;
        //释放删除结点的内存
        free(pDel);
        list->size--;
    }
    //获得链表的长度
    int Size_LinkList(LinkList* list) {
        return list->size;
    }
    //查找
    int Find_LinkList(LinkList*  list, void* data) {
        if (list == NULL) {
            return -1;
        }
        if (data == NULL) {
            return -1 ;
        }
        //遍历查找 
        LinkNode* pCurrent = list->head->next;
        int i = 0;
        while (pCurrent != NULL) {
            if (pCurrent->data == data) {
                break;
            }
            i++;
            pCurrent = pCurrent->next;
        }
        return i;
    
    }
    //打印链表结点
    void print_LinkList(LinkList* list, PRINTLINKNODE print) {
        if (list == NULL) {
            return;
        }
        //辅助指针变量
        LinkNode* pCurrent = list->head->next;
        while (pCurrent != NULL) {
            print(pCurrent->data);
            pCurrent = pCurrent->next;
        }
    }
    //返回第一个结点
    void* Front_LinkList(LinkList* list) {
        return list->head->next;
    }
    //释放链表内存 
    void FreeSpace_LinkList(LinkList* list) {
        if(list==NULL){
            return;
        }
        //辅助指针变量
        LinkNode* pCurrent = list->head;
        while (pCurrent != NULL) {
            //缓存下一个结点
            LinkNode* pNext = pCurrent->next;
            free(pCurrent);
            pCurrent = pNext;
        }
        //释放链表内存
        list->size = 0;
        free(list);
    }
  • 相关阅读:
    Study From DevOps 学习交流会议
    GS 服务器超时时间设置
    k8s 实验过程中遇到的两个小问题 端口 和 批量删除Error的pods
    这两天学到的简单Linux的命令
    Prometheus 和 Grafana的简单学习
    jenkins 添加 k8s 云
    常用的cpl 命令 运行直接打开控制台的简单方法
    [转贴] VIM 常用快捷键 --一直记不住
    [转载] 什么是istio 官网内容
    微软补丁201807补丁惹祸
  • 原文地址:https://www.cnblogs.com/Ssinoo/p/10932570.html
Copyright © 2011-2022 走看看