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~

  • 相关阅读:
    Exchange 2013与 Office Web Apps 整合
    SharePoint2013 以其他用户登录和修改AD域用户密码 功能
    sharepoint 2010 自定义页面布局
    sharepoint 2010 记录管理 对象模型
    SharePoint2010 对象模型 关联列表
    在SharePoint Server 2010中更改“我的网站”
    xenapp 6.5 客户端插件第一次安装总是跳到官网
    如何解决在Windows Server 2008 R2 上安装证书服务重启后出现 CertificationAuthority 91错误事件
    在Win7 Hyper-v虚拟机中挂接真实机的声卡
    win8 中如何删除 共享文件夹 用户名和密码
  • 原文地址:https://www.cnblogs.com/Ssinoo/p/10919101.html
Copyright © 2011-2022 走看看