栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言单链表实现增删改查

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言单链表实现增删改查

1.概述

单链表使是一种链式存储结构,链表中的数据以结点的方式表示.每个结点由数据域和指针域两部分构成.数据域存储链表的数据元素,指针域存储连接相邻结点的地址.

2.单链表基本组成
typedef struct linklist_t{
    int data;                   // 数据域.
    struct linklist_t *next;    // 指针域.
}linkList_T;
static linkList_T *pHead;       // 头指针.

上述代码中我们定义了 pHead 头指针结点.这个结点并不包含实际的数据域,仅仅是为了我们更加方便的操作链表.

3.单链表基础操作

3.1创建单链表

创建单链表的整体思路是依托于pHead头结点,创建结点,并建立结点之间的相互关系.

int creatlist(int n)
{
    linkList_T *pTmp = NULL, *pEnd = NULL;
    int i = 0;
    pHead = (linkList_T*)malloc(sizeof (linkList_T));
    if (NULL == pHead)
        return -1;
    pEnd = pHead;
    
    for (i = 0; i < n; i++){
        pTmp = (linkList_T*)malloc(sizeof (linkList_T));
        pTmp->data = i;
        pEnd->next = pTmp;
        pEnd = pTmp;
    }
    pEnd->next = NULL;
    return 0;
}
3.2插入新结点

插入结点的思路是找到要插入的位置,先建立待插入结点与下一个结点的关系,然后再建立待插入结点与 上一个结点的位置关系(即断开插入之前的连接关系).

int insertlist(int n, int num)
{
    
    linkList_T *pTmp = NULL, *pNode = NULL;
    int j = 0;

    pTmp = pHead;

    
    while (pTmp && (j < n)){
        pTmp = pTmp->next;
        j++;
    }
    
    if (NULL == pTmp)
        return -1;
    pNode = (linkList_T *)malloc(sizeof (linkList_T));
    if (NULL == pNode)
        return -1;

    
    pNode->next = pTmp->next;
    pNode->data = num;
    pTmp->next = pNode;
    return 0;
}
3.3删除节点

删除结点的思路是找到待删除的结点,建立待删除结点的前一个结点与待删除结点的后一个结点之间的连接关系.然后删除待删除结点.

int dellist(int n)
{
    linkList_T *pTmp = pHead;
    linkList_T *pPrv = pHead;
    int j = 0;

      
    while(pTmp && (j < n)){
        pPrv = pTmp;
        pTmp = pTmp->next;
        j++;
    }
    if (NULL == pTmp)
        return -1;

    
    pPrv->next = pTmp->next;
    pTmp->next = pTmp;
    free(pTmp);
    return 0;
}
3.4修改链表数据

修改链表指定结点数据的思路是遍历链表找到待修改结点,修改数据域.

int changelist(int n, int num)
{

    linkList_T *pTmp = NULL;
    int j = 0;

    pTmp = pHead;

    
    while(pTmp && (j < n)){
        pTmp = pTmp->next;
        j++;
    }


    if (NULL == pTmp)
        return -1;
    
    pTmp->data = num;
    return 0;
}
3.5查询链表
int querylist(void)
{
    linkList_T *pTmp = NULL;
    int i = 0;
    pTmp = pHead;
    while(pTmp->next){
        pTmp = pTmp->next;
        i++;
        printf ("第 %d 结点的值是 %d rn",i, pTmp->data);
    }
    printf ("rn");
    return 0;
}
4.测试程序
int main(int argc, char **argv)
{
    creatlist(5);
    querylist();
    insertlist(5, 8);
    querylist();
    changelist(2, 6);
    querylist();
    insertlist(2, 8);
    querylist();
    dellist(3);
    querylist();
}
5测试结果
第 1 结点的值为 0 
第 2 结点的值为 1 
第 3 结点的值为 2 
第 4 结点的值为 3 
第 5 结点的值为 4 

第 1 结点的值为 0 
第 2 结点的值为 1 
第 3 结点的值为 2 
第 4 结点的值为 3 
第 5 结点的值为 4 
第 6 结点的值为 8 

第 1 结点的值为 0 
第 2 结点的值为 6 
第 3 结点的值为 2 
第 4 结点的值为 3 
第 5 结点的值为 4 
第 6 结点的值为 8 

第 1 结点的值为 0 
第 2 结点的值为 6 
第 3 结点的值为 8 
第 4 结点的值为 2 
第 5 结点的值为 3 
第 6 结点的值为 4 
第 7 结点的值为 8 

第 1 结点的值为 0 
第 2 结点的值为 6 
第 3 结点的值为 2 
第 4 结点的值为 3 
第 5 结点的值为 4 
第 6 结点的值为 8 
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/698638.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号