zoukankan      html  css  js  c++  java
  • C语言 数据结构单链表(未解决版)

    头文件

    #ifndef LINKLIST_H
    #define LINKLIST_H
    
    #include<stdlib.h>
    #include<stdio.h>
    
    //链表结点
    typedef struct LINKNODE {
        void* data; //指向任何类型的数据
        struct LINKENODE* next;
    }LinkNode;
    
    //链表结构体
    typedef struct LINKLIST {
        LinkNode* head;
        int size;
    }LinkList;
    
    //打印函数指针
    typedef void(*PRINTLINKNODE)(void*);
    
    //初始化链表
    LinkList* Init_LinkList();
    //指定位置插入
    void Insert_LinkList(LinkList* list, int pos, void* data);
    //删除指定位置的值
    void RemoveByPos_LinkList(LinkList* list, int pos);
    //获得链表的长度
    int Size_LinkList(LinkList* list);
    //查找
    int Find_LinkList(LinkList* list, void* data);
    //打印链表结点
    void print_LinkList(LinkList* list, PRINTLINKNODE print);
    //返回第一个结点
    void* Front_LinkList(LinkList* list);
    #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) {
    
    }
    //查找
    int Find_LinkList(LinkList* list, void* data) {
        if (list == NULL) {
            return;
        }
        if (data == NULL) {
            return;
        }
        //遍历查找 
        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);
    }

     

    #define _CRT_SECURE_NO_WARNINGS
    
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include"LinkList.h"
    
    //自定义数据类型
    typedef struct PERSON{
        char name[64];
        int age;
        int score;
    }Person;
    
    //打印函数
    void MyPrint(void* data) {
        Person* p = (Person*)data;
        printf("Name:%s Age:%d Score:%d
    ", p->name, p->age, p->score);
    }
    int main(void) {
        //创建一个链表
        LinkList* list = Init_LinkList();
    
        //创建数据
        Person  p1 = { "aaa",18,100 };
        Person  p2 = { "bbb",19,90 };
        Person  p3= { "ccc",20,80 };
        Person  p4 = { "ddd",21,60 };
        //数据插入链表
        Insert_LinkList(list ,0, &p1);
        Insert_LinkList(list ,0, &p2);
        Insert_LinkList(list ,0, &p3);
        Insert_LinkList(list ,0, &p4);
        //打印
        Print_LinkList(list, MyPrint);
        //销毁链表
        FreeSpace_LinkList(list);
        printf("
    ");
        system("pause");
        return 0;
    }

    跟着视频教学打的,还有17个报错没解决QAQ,正在解决ing~

  • 相关阅读:
    MVC部署到IIS 出现未能加载文件或程序集“System.Web.Http.WebHost.....
    web在线聊天框滚动条自动在底部
    IE 浏览器下英文 微软雅黑 不起作用
    U3D MonoBehaviour.InvokeRepeating 和 MonoBehaviour.Invoke
    U3D 中关于相同的怪物不发生碰撞 或者是想让一些物体发生碰撞 又不想让一些物体发生碰撞
    U3D 2D中给精灵添加刚体后 发现精灵会倒 ..
    Axure教程 | 轻量级的后台原型框架
    Axure:侧导航收缩与展开
    SQLSERVER数据库调优
    MySQL用GROUP BY分组取字段最大值或最新一条
  • 原文地址:https://www.cnblogs.com/Ssinoo/p/10919101.html
Copyright © 2011-2022 走看看