`
zy3381
  • 浏览: 155133 次
  • 性别: Icon_minigender_1
  • 来自: 昆明
社区版块
存档分类
最新评论

链表按序插入节点

阅读更多
在一个有序的链表上插入一个节点,使得插入节点后的链表仍然有序

#include<stdio.h>
#define N 5
struct Node
{
    int data;
    struct Node *next;
};

//创建链表并初始化数据
struct Node *create()
{
    int i;
    struct Node *head,*p1,*p2;
    head = p1 = p2 = (struct Node*)malloc(sizeof(struct Node));
    head->data = 89101;
    for(i=1; i<N; i++)
    {
        p1 = (struct Node*)malloc(sizeof(struct Node));
        p1->data = 89102+2*i-1;
        p2->next = p1;
        p2 = p1;
    }
    p2->next = NULL;
    return head;
}

//插入一个节点
void insert(struct Node *head, struct Node *p)
{
    struct Node *pt = head;
    int temp;
    while(pt != NULL)
    {
        if(p->data < pt->data)
        {
            break;
        }
        pt = pt->next;
    }
    //将找到的大于p中的数据值的节点和p的数据进行交换
    temp = pt->data;
    pt->data = p->data;
    p->data = temp;
    //现在pt存储的是p的数据,p存储的是pt的数据,构造连接pt->p->
    p->next = pt->next;
    pt->next = p;
}

void main()
{
    int i;
    struct Node *head,*pt;
    //创建一个链表
    head = pt = create();
    //创建一个新节点
    struct Node *p;
    p = (struct Node*)malloc(sizeof(struct Node));
    p->data = 89102;
    printf("链表初始数据:\n");
    while(pt)
    {
        printf("%d\n", pt->data);
        pt = pt->next;
    }

    printf("\n插入节点%d:\n", p->data);
    //插入链表
    insert(head, p);

    pt = head;
    while(pt)
    {
        printf("%d\n", pt->data);
        pt = pt->next;
    }


    //插入一个节点
    p = (struct Node*)malloc(sizeof(struct Node));
    p->data = 89106;

    printf("\n插入节点%d:\n", p->data);
    insert(head, p);

    pt = head;
    while(pt)
    {
        printf("%d\n", pt->data);
        pt = pt->next;
    }

    //插入一个节点
    p = (struct Node*)malloc(sizeof(struct Node));
    p->data = 89107;

    printf("\n插入节点%d:\n", p->data);
    insert(head, p);


    pt = head;
    while(pt)
    {
        printf("%d\n", pt->data);
        pt = pt->next;
    }
}












分享到:
评论

相关推荐

    家电库存管理系统课程设计报告.doc

    《数据结构》课程设计 报告 学 院:_电气与信息工程学院_ 专业班级: 学生姓名: 学 号: 设计地点...7 3.2插入节点函数代码解释 7 3.3删除节点函数代码解释 8 3.4查找函数代码解释 8 3.5货品信息修改函数代码解释 9 3.6

    工资管理系统课程设计报告(1).doc

    (3) 更新记录模块:更新数据包括对员工工资信息的删除、插入、和排序(排序是对链表节点 的修改而不修改员工信息)。删除功能是彻底删除掉某员工的工资信息,也就是单链表的 删除操作,在删除某员工的同时也要修改她...

    数据结构与算法分析_Java_语言描述

    小结 练习 参考文献 笫3章 表、栈和队列 3.1 抽象数据类型(ADT) 3.2 表ADT 3.2.1 表的简单数组实现 3.2.2 链表 3.2.3 程序设计细节 3.2.4 双链表 3.2.5 循环链表 3.2.6 例子 3.2.7 链表的游标实现 ...

    数据结构与算法分析第二版 ---C语言描述(附加答案)

    摊还分析11.1 一个无关的智力问题11.2 二项队列11.3 斜堆11.4 斐波那契堆11.4.1 切除左式堆中的节点11.4.2 二项队列的懒惰合并11.4.3 斐波那契堆操作11.4.4 时间界的证明11.5 伸展树总结练习参考文献第12章 高级数据...

    Absolute C++中文版(原书第2版)-完美的C++教程,文档中还包含英文版

    17.1.4 向链表中插入或移除节点 495 17.1.5 搜索链表 498 17.2 链表的应用 504 17.3 迭代器 514 17.3.1 指针作为迭代器 514 17.3.2 迭代器类 515 17.4 树 520 第18章 异常处理 535 18.1 异常处理基础 535 ...

    数据结构(C++)有关练习题

    b. 创建一个班机链表,每个节点都包含指向一个乘客链表的指针; c. 该程序要有顾客购票,查询班机起飞降落时间,班机订票情况等3个功能,并实现菜单选项 5、 用C++编写一个简单的行编辑器,每个结点保存一...

    数据结构与算法分析Java语言描述(第二版)

    摊还分析11.1 一个无关的智力问题11.2 二项队列11.3 斜堆11.4 斐波那契堆11.4.1 切除左式堆中的节点11.4.2 二项队列的懒惰合并11.4.3 斐波那契堆操作11.4.4 时间界的证明11.5 伸展树小结练习参考文献第12章 高级...

    数据结构与算法分析-Java语言描述(第2版)_2_2

    8.6 路径压缩和按秩求并的最坏情形 8.7 一个应用 小结 练习题 参考文献第9章 图论算法 9.1 若干定义 9.2 拓扑排序 9.3 最短路径算法 9.3.1 无权最短路径 9.3.2 dijkstra算法 9.3.3 具有负边值的...

    数据结构与算法分析-Java语言描述(第2版)_1_2

    8.6 路径压缩和按秩求并的最坏情形 8.7 一个应用 小结 练习题 参考文献第9章 图论算法 9.1 若干定义 9.2 拓扑排序 9.3 最短路径算法 9.3.1 无权最短路径 9.3.2 dijkstra算法 9.3.3 具有负边值的...

    数据结构与算法分析_Java语言描述(第2版)]

    摊还分析11.1 一个无关的智力问题11.2 二项队列11.3 斜堆11.4 斐波那契堆11.4.1 切除左式堆中的节点11.4.2 二项队列的懒惰合并11.4.3 斐波那契堆操作11.4.4 时间界的证明11.5 伸展树小结练习参考文献第12章 高级数据...

    数据结构与算法分析 Java语言描述第2版

    摊还分析11.1 一个无关的智力问题11.2 二项队列11.3 斜堆11.4 斐波那契堆11.4.1 切除左式堆中的节点11.4.2 二项队列的懒惰合并11.4.3 斐波那契堆操作11.4.4 时间界的证明11.5 伸展树小结练习参考文献第12章 高级数据...

    数据结构与算法分析_Java语言描述(第2版)

    8.6 路径压缩和按秩求并的最坏情形 8.7 一个应用 小结 练习题 参考文献 第9章 图论算法 9.1 若干定义 9.2 拓扑排序 9.3 最短路径算法 9.3.1 无权最短路径 9.3.2 Dijkstra算法 9.3.3 具有负边值的图 9.3.4 无圈图 ...

Global site tag (gtag.js) - Google Analytics