C/C++程序开发(03):链式物理结构(元素查找、元素删除、元素插入)

本文详细介绍了链表的基本操作,包括节点的初始化与显示、查找指定数值的节点位置、插入新节点以及删除特定节点等过程,并提供了完整的C语言实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <cstdio>
#include <cstdlib>
struct node{
    int iNum;
    node* pNext;
};
int main()
{
    //一个节点的初始化与显示
    node node1 = {15};
    printf("%d", node1.iNum);
    //输出两个节点
    node node2 = {19};
    node1.pNext = &node2;
    node head = {0};
    node tail = {0};
    head.pNext = &node1;
    node2.pNext = &tail;
    tail.pNext = NULL;
    for (node* p_node = &node1; p_node != &tail; p_node = p_node->pNext)
    {
        node* p_first = p_node;
        node* p_mid = p_first->pNext;
        node* p_last = p_mid->pNext;
        if(p_mid != &tail)
        {
            printf("%d  ",p_mid->iNum);
        }
    }
    printf("\n");
    //查找节点
    int tmp1 = 19, cnt1 = 1;
    for (node* p_node = &head; p_node != &tail; p_node = p_node->pNext)
    {
        node* p_first = p_node;
        node* p_mid = p_first->pNext;
        node* p_last = p_mid->pNext;
        if (p_mid->iNum == tmp1)
        {
            printf("%d是第%d个节点\n", p_mid->iNum, cnt1);
            break;
        }
    cnt1++;
    }
    printf("\n");
    //插入一个节点
    node node3 = {16};
    for (node* p_node = &head; p_node != &tail; p_node = p_node->pNext)
    {
        node* p_first = p_node;
        node* p_mid = p_first->pNext;

        node* p_last = p_mid->pNext;

//是尾节点直接插入,否则插入到p_first和p_mid之间

        if (p_mid == &tail || p_mid->iNum > node3.iNum)
        {
            p_first->pNext = &node3;
            node3.pNext = p_mid;
            break;
        }
    }
    for (node* p_node = &head; p_node != &tail; p_node = p_node->pNext)
    {
        node* p_first = p_node;
        node* p_mid = p_first->pNext;
        node* p_last = p_mid->pNext;
        if (p_mid != &tail)
        {
            printf("%d",p_mid->iNum);
        }
    }
    printf("\n");
    //删除一个元素
    for (node* p_node = &head; p_node != &tail; p_node = p_node->pNext)
    {
        node* p_first = p_node;
        node* p_mid = p_first->pNext;

        node* p_last = p_mid->pNext;

//删除的不能是尾节点

        if (p_mid != &tail && p_mid->iNum == 16)
        {
            p_first->pNext = p_last;
            break;
        }
    }
    for (node* p_node = &head; p_node != &tail; p_node = p_node->pNext)
    {
        node* p_first = p_node;
        node* p_mid = p_first->pNext;
        node* p_last = p_mid->pNext;
        if (p_mid != &tail)
        {
            printf("%d",p_mid->iNum);
        }
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薛桂琴

喜欢的读者,可以打赏鼓励一下

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值