链表

一,传统链表的创建

1. 链表的有头结点 (有一个结构体 表示大小头结点)
2. 链表的结构体是只有数据和指向下一个的指针

第一个结构是链表

``` struct LinedNode
    {
    void* data;             //数据
    struct LinedNode* next; //指针
    } LinedNode;
```

第二个结构是链表头结点和链表大小的表示

链表的数据结构
struct LListNode
{
sturct LinedNode LLinedNode;
int m_size; //链表的大小
} LListNode;

二,链表头文件的声明

1. 初始化链表的头结点
2. 插入数据(位置,数据)插入
3. 删除数据(位置,数据)删除
4. 计算结点数量
5. 链表置空
6. 链表销毁
    ``` 
    typedef void* ListNode;
    //1,初始化链表的信息
    ListNode Init_LinedNode(int Capcatiy);

    //2,插入数据
    void Insert_LinedNodeData(ListNode* list, int pos, void* data);

    //3,删除数据(位置,数据)
    void Remove_ByPostionLinedeNodeData(ListNode* list, int pos);
    void Remove_ByValueLinedNodeData(ListNode* list, void* data, int (*MyObjectCmp)(void*, void*));

    //4,计算结点的数量
    int getLinedNode(ListNode* list);

    //5, 链表置空
    void Emtry_LinedNodeData(ListNode* list);

    //6,链表销毁
    void Destroy_LinedNodeData(ListNode* list);

    ```

三,头文件的链表的实现

```
#define _CRT_SECURE_NO_WARNINGS
#include "ListNode.h"



//1,初始化链表的信息
ListNode Init_LinedListNode(int capcatiy)
{
//1,条件判断
if (!capcatiy) return;

//2,开辟内存保存链表的信息
LLinedNode* linednode = (LLinedNode*)malloc(sizeof(LLinedNode*));
linednode->LedNode.next = NULL;
linednode->s_size = 0;



return linednode;
}

//2,按照位置插入数据到链表中
void Insert_LinedListNodeData(ListNode list, int pos, void* data)
{
//1,条件判断
if (!list) return;
if (!data) return;
LLinedNode* headnode = list;
if (pos < 0 || pos > headnode->s_size)
    pos = headnode->s_size; //置尾

//2,插入数据一些操作
LinedNode* ParentNode = headnode->LedNode.next;
int i;
for (i = 0; i <= pos; i++)
    ParentNode = ParentNode->next; //找到pos节点


LinedNode* ChilderNode = NULL;
ChilderNode->data = data;
ChilderNode->next = NULL;
ChilderNode = ParentNode->next;
ParentNode->next = ChilderNode;


//链表信息更改
headnode->s_size++;

    }


//3,按照位置删除数据
void Remove_LinedListNodeData(ListNode list, int pos)
{
//1,条件判断
if (!list) return;
LLinedNode* headnode = list;
if (pos < 0 || pos > headnode->s_size)
    return;


//双向指针
LinedNode* parentNode = headnode->LedNode.next;
LinedNode* ChilderNode = parentNode->next;

int i;
for (i = 0; i < headnode->s_size; i++)
{

}



}

//4,按照数据删除数据
void Remove_ByValueListedNodeData(ListNode list, void* data,
int(*ByValue)(void*, void*))
{
}

//5,得到数据的节点
int get_LinedNode(LinedNode list)
{
}

//6,将链表置空
void Emtry_LinedNode(ListNode list)
{
}

//7,销毁链表
void Destroy_LinedNode(ListNode list)
{
}

```     
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值