浅谈单链表

浅谈单链表

本蒟蒻终于学到链表了(还是看不到大佬的尾灯),迫不及待来展示一下了

1.单链表基本概念

通过结构体创建一个链表~~
(头文件:<stdio.h>和<stdlib.h>)

typedef int Datatype;
typedef struct Node
{
    Datatype data;
    struct Node *next;
} Node, *Linklist;

每个元素都是一个“结点”
每个结点都有两部分:

1.用户需要的实际数据;
2.下一个结点的地址;

表头:存放第一个结点地址
表尾:它的地址存放NULL

创建链表

到了非常重要的一步咯
创建链表一般有两种方法:头插法和尾插法

头插法

头插法非常鲜明的一个特点就是主要执行代码有两步代码
但是最后结果是倒序的~~

Linklist Creat_Head()
{
    Linklist L;
    Node *pNew;
    int x;
    L = (Linklist)malloc(sizeof(Node));
    L->next = NULL;
    scanf("%d", &x);
    while (x != -1)
    {
        pNew = (Node *)malloc(sizeof(Node));
        pNew->data = x;
        pNew->next = L->next;
        L->next = pNew;
        scanf("%d", &x);
    }
    return L;
}
尾插法

尾插法有三步重要代码,但是结果是正序的~~

Linklist Creat_Tail()
{
    Linklist L;
    Node *pNew, *r;
    int x;
    L = (Linklist)malloc(sizeof(Node));
    L->next = NULL;
    r = L;
    scanf("%d", &x);
    while (x != -1)
    {
        pNew = (Node *)malloc(sizeof(Node));
        pNew->data = x;
        pNew->next = r->next;
        r = pNew;
        scanf("%d", &x);
    }
    r->next = NULL;
    return L;
}

插入元素~~

void Inslist(Linklist L, Node *p, Datatype e)
{
    Node *pNew;
    pNew = (Node *)malloc(sizeof(Node));
    pNew->data = e;
    pNew->next = p->next;
    p->next = pNew;
}

获得单链表的长度

int ListLengh(Linklist L)
{
    int count = 0;
    Node *p;
    p = L->next;
    while (p)
    {
        count++;
        p = p->next;
    }
    return count;
}

链表内查找

Node *Search_x(Linklist L, Datatype x)
{
    Node *p;
    p = p->next;
    while (p)
    {
        if (p->data != x)
            p = p->next;
        else
            break;
    }
    if (p == NULL)
        printf("没找到");
    return p;
}

删除结点

void DelList(Linklist L, Node *p)
{
    Node *pre;
    pre = L->next;
    while (pre->next != p)
        pre = pre->next;
    pre->next = p->next;
    free(p);
}

目前本蒟蒻就学了这么多,后面还会更新更多的知识滴~~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值