单链表基本概念和操作

单链表(Singly Linked List)是一种常见的数据结构,用于存储线性数据。它由一系列节点组成,每个节点包含两个部分:数据域和指针域。数据域存储实际的数据,指针域指向下一个节点。以下是单链表的基本概念和操作:

 

单链表的特点

1. 非连续存储:单链表的节点在内存中不需要连续存储。

2. 单向链接:每个节点只包含一个指向下一个节点的指针。

3. 动态大小:可以根据需要动态增加或减少节点数量。

单链表的基本操作

1. 初始化:创建一个空的单链表。

    typedef struct LNode {

        int data;

        struct LNode *next;

    } LNode, *LinkList;

 

    void InitList(LinkList *L) {

        *L = (LNode *)malloc(sizeof(LNode));

        (*L)->next = NULL;

    }

2. 插入:

    头插法:将新节点插入到链表的头部。

 

        void HeadInsert(LinkList *L, int x) {

            LNode *s = (LNode *)malloc(sizeof(LNode));

            s->data = x;

            s->next = (*L)->next;

            (*L)->next = s;

        }

 

    尾插法:将新节点插入到链表的尾部。

 

        void TailInsert(LinkList *L, int x) {

            LNode *s = (LNode *)malloc(sizeof(LNode));

            s->data = x;

            LNode *r = *L;

            while (r->next != NULL) {

                r = r->next;

            }

            r->next = s;

            s->next = NULL;

        }

      

 

3. 删除:删除指定值的节点。

 

    void DeleteNode(LinkList *L, int x) {

        LNode *p = *L;

        while (p->next != NULL && p->next->data != x) {

            p = p->next;

        }

        if (p->next != NULL) {

            LNode *q = p->next;

            p->next = q->next;

            free(q);

        }

    }

 

4. 查找:查找指定值的节点。

  

    LNode* FindNode(LinkList L, int x) {

        LNode *p = L->next;

        while (p != NULL && p->data != x) {

            p = p->next;

        }

        return p;

    }

 

5. 遍历:遍历并打印链表中的所有节点。

  

    void PrintList(LinkList L) {

        LNode *p = L->next;

        while (p != NULL) {

            printf("%d ", p->data);

            p = p->next;

        }

        printf("\n");

    }

具体操作

int main() {

    LinkList L;

    InitList(&L);

    HeadInsert(&L, 1);

    HeadInsert(&L, 2);

    TailInsert(&L, 3);

    PrintList(L); // 输出: 2 1 3

    DeleteNode(&L, 1);

    PrintList(L); // 输出: 2 3

    LNode *node = FindNode(L, 3);

    if (node != NULL) {

        printf("Found: %d\n", node->data); // 输出: Found: 3

    }

    return 0;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值