数据结构例程——单链表应用举例

简介:   本文针对数据结构基础系列网络课程(2):线性表中第11课时单链表应用举例。例:拆分单链表 (linklist.h是单链表“算法库”中的头文件,详情单击链接…)#include <stdio.h>#include <malloc.h>#include "linklist.h"void split(LinkList *&L,Lin

  本文针对数据结构基础系列网络课程(2):线性表中第11课时单链表应用举例

例:拆分单链表 (linklist.h是单链表“算法库”中的头文件,详情单击链接…

#include <stdio.h>
#include <malloc.h>
#include "linklist.h"
void split(LinkList *&L,LinkList *&L1,LinkList *&L2)
{
    LinkList *p=L->next,*q,*r1; //p指向第1个数据节点
    L1=L;       //L1利用原来L的头节点
    r1=L1;                  //r1始终指向L1的尾节点
    L2=(LinkList *)malloc(sizeof(LinkList));    //创建L2的头节点
    L2->next=NULL;          //置L2的指针域为NULL
    while (p!=NULL)
    {
        r1->next=p;         //采用尾插法将*p(data值为ai)插入L1中
        r1=p;
        p=p->next;          //p移向下一个节点(data值为bi)
        q=p->next;          //由于头插法修改p的next域,故用q保存*p的后继节点
        p->next=L2->next;   //采用头插法将*p插入L2中
        L2->next=p;
        p=q;                //p重新指向ai+1的节点
    }
    r1->next=NULL;          //尾节点next置空
}
int main()
{
    LinkList *L,*L1,*L2;
    int i;
    ElemType a[]= {1,2,3,4,5,6,7,8,9,10};
    InitList(L);
    InitList(L1);
    InitList(L2);
    for(i=9; i>=0; i--)
        ListInsert(L, 1, a[i]);
    printf("L:");
    DispList(L);
    printf("L->L1,L2\n");
    split(L,L1,L2);
    printf("L1:");
    DispList(L1);
    printf("L2:");
    DispList(L2);
    DestroyList(L1);
    DestroyList(L2);
    return 0;
}

例:删除元素最大的节点(linklist.h是单链表“算法库”中的头文件,详情单击链接…

#include <stdio.h>
#include <malloc.h>
#include "linklist.h"

void delmaxnode(LinkList *&L)
{
    LinkList *p=L->next,*pre=L,*maxp=p,*maxpre=pre;
    while (p!=NULL) //用p扫描整个单链表,pre始终指向其前驱节点
    {
        if (maxp->data<p->data)  //若找到一个更大的节点
        {
            maxp=p; //更改maxp
            maxpre=pre; //更改maxpre
        }
        pre=p;      //p、pre同步后移一个节点
        p=p->next;
    }
    maxpre->next=maxp->next;    //删除*maxp节点
    free(maxp);         //释放*maxp节点
}

int main()
{
    LinkList *L;
    int i;
    ElemType a[]= {1,3,2,9,0,4,7,6,5,8};
    InitList(L);
    for(i=9; i>=0; i--)
        ListInsert(L, 1, a[i]);
    printf("L:");
    DispList(L);
    printf("删除最大值节点\n");
    delmaxnode(L);
    printf("L:");
    DispList(L);
    DestroyList(L);
    return 0;
}

例:增序排列节点(linklist.h是单链表“算法库”中的头文件,详情单击链接…

#include <stdio.h>
#include <malloc.h>
#include "linklist.h"

void sort(LinkList *&L)
{
    LinkList *p,*pre,*q;
    p=L->next->next;        //p指向L的第2个数据节点
    L->next->next=NULL;     //构造只含一个数据节点的有序表
    while (p!=NULL)
    {
        q=p->next;          //q保存*p节点后继节点的指针
        pre=L;              //从有序表开头进行比较,pre指向插入*p的前驱节点
        while (pre->next!=NULL && pre->next->data<p->data)
            pre=pre->next;  //在有序表中找插入*p的前驱节点*pre
        p->next=pre->next;  //*pre之后插入*p
        pre->next=p;
        p=q;                //扫描原单链表余下的节点
    }
}
int main()
{
    LinkList *L;
    int i;
    ElemType a[]= {1,3,2,9,0,4,7,6,5,8};
    InitList(L);
    for(i=9; i>=0; i--)
        ListInsert(L, 1, a[i]);
    printf("L:");
    DispList(L);
    printf("排序\n");
    sort(L);
    printf("L:");
    DispList(L);
    DestroyList(L);
    return 0;
}
目录
相关文章
|
3月前
|
存储 Java
Java中的HashMap和TreeMap,通过具体示例展示了它们在处理复杂数据结构问题时的应用。
【10月更文挑战第19天】本文详细介绍了Java中的HashMap和TreeMap,通过具体示例展示了它们在处理复杂数据结构问题时的应用。HashMap以其高效的插入、查找和删除操作著称,而TreeMap则擅长于保持元素的自然排序或自定义排序,两者各具优势,适用于不同的开发场景。
55 1
|
3月前
|
存储 算法 C语言
通义灵码在考研C语言和数据结构中的应用实践 1-5
通义灵码在考研C语言和数据结构中的应用实践,体验通义灵码的强大思路。《趣学C语言和数据结构100例》精选了五个经典问题及其解决方案,包括求最大公约数和最小公倍数、统计字符类型、求特殊数列和、计算阶乘和双阶乘、以及求斐波那契数列的前20项和。通过这些实例,帮助读者掌握C语言的基本语法和常用算法,提升编程能力。
94 4
|
3月前
|
机器学习/深度学习 存储 人工智能
数据结构在实际开发中的广泛应用
【10月更文挑战第20天】数据结构是软件开发的基础,它们贯穿于各种应用场景中,为解决实际问题提供了有力的支持。不同的数据结构具有不同的特点和优势,开发者需要根据具体需求选择合适的数据结构,以实现高效、可靠的程序设计。
203 63
|
2月前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
68 5
|
2月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
65 1
|
2月前
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
44 5
|
3月前
|
算法 程序员 索引
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
栈的基本概念、应用场景以及如何使用数组和单链表模拟栈,并展示了如何利用栈和中缀表达式实现一个综合计算器。
54 1
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
|
3月前
|
存储
[数据结构] -- 单链表
[数据结构] -- 单链表
29 1
|
3月前
|
存储
【数据结构】——单链表实现
【数据结构】——单链表实现
|
3月前
|
存储
数据结构(单链表)
数据结构(单链表)
23 0