`
zy3381
  • 浏览: 157531 次
  • 性别: 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;
    }
}












分享到:
评论

相关推荐

    链表合并并按学号排序

    算法的核心是在遍历链表A的同时,根据B链表节点的学号大小插入到正确的位置,保持学号的升序排列。这涉及到对两个链表的节点进行比较,并适当调整指针指向,以完成插入操作。 3. **遍历链表**:`void print(struct ...

    c++链表string类程序

    这可以方便地存储和处理多个字符串,例如实现一个按字典序排序的字符串链表。 4. **链表操作示例** - **插入**:在链表的特定位置插入一个`std::string`,需要找到插入位置的前一个节点,然后更新它的`next`指针。...

    基础链表练习(附详细注释)

    这需要我们在插入时比较字符串的字典序,确保链表始终有序。我们可以遍历链表,找到合适的位置插入新字符串,或者在链表末尾插入如果新字符串是最大的。 2. **重复字符串的处理**:如果尝试插入已存在于链表中的...

    链表,顺序表,队列,栈的实现

    此外,循环链表是链表的一种变体,最后一个节点指向第一个节点,形成一个环。 栈是一种“后进先出”(LIFO)的数据结构,常用于处理函数调用、表达式求值等。在栈中,最后压入的元素最先弹出。栈的主要操作包括压栈...

    数据结构综合课设稀疏矩阵的完全链表表示及其运算.docx

    - 列表中,节点按着列序(同一列内按行序)链接,使用`down`域。 - 这两个链表共享一个头节点,并且额外有一个包含矩阵维数的结点。 3. **链表操作**: - 插入新节点:根据行和列索引,找到合适的插入位置,更新...

    数据结构经典算法试题 (2).docx

    如果第一个链表的节点值小于或等于第二个链表的节点值,就将第一个链表的节点插入到结果链表中,并逆置链表的指向,以此类推,直到其中一个链表遍历完。剩下的链表部分直接逆置插入到结果链表中。 第二个问题来自...

    单链表的操作实现实验报告.doc

    3. **尾部插入法**:在链表的末尾插入节点。先创建一个空链表,然后逐个读取数据,每次插入新节点到链表尾部,最后更新最后一个节点的next指针。 4. **求表长**:遍历整个链表,用一个计数器记录经过的节点数量,...

    高次稀疏多项式实验报告

    - **链表操作**:包括创建新节点、插入节点、删除节点以及遍历链表等功能。 #### 算法设计与实现 1. **输入**: - 创建空链表。 - 输入多项式的系数和指数,创建对应节点并插入到链表中,确保链表有序。 2. **...

    数据结构实习报告—链表维护.doc

    链表的节点通常包含以下几个数据域:家电名称、品牌型号、单价和数量。这些字段对应了商品的基本属性,其中家电名称和品牌型号为字符串类型,单价为浮点型,商品号和商品数量则为整型。在系统中,用户可以通过手动...

    表插入排序

    具体流程是遍历整个链表,对每个节点进行调整,使其按序排列。 4. **输出操作** ```c void Output(List SL) { // ...代码省略... } ``` 最后,通过遍历链表输出排序后的结果。 #### 四、关键点总结 1. **...

    约瑟夫环课设报告 - 副本.doc

    链表操作包括插入节点(构造链表)、删除节点(出列操作)和遍历链表(输出出列顺序)。 **详细设计说明**中提到的基本操作包括: - **Data_InPut()**:创建链表并输入数据。这一函数会先初始化一个空链表,然后...

    单链表博客文档1

    按序查找则需要在特定位置插入或删除节点,可能需要对链表进行部分重新排列。 - **单链表的删除**:删除操作分为按值查找和按序查找。按值查找找到匹配节点后删除,按序查找则在指定位置删除。 - **单链表的插入**...

     员工管理系统 员工管理系统.doc

    `ListInsert`函数实现了员工信息的插入操作,它根据员工姓名的字典序在链表中找到合适的位置进行插入,确保链表始终按姓名顺序排列。如果链表为空,新节点直接插入头部;否则,遍历链表找到合适位置并插入。插入过程...

    南航C语言_课设南航C语言_课设.doc

    6. Add Records from a Text File:从文本文档输入学生记录并按序插入已有列表。 7. Write to a Text File:将列表写入指定位置的文档。 8. Reverse List:将现有列表按逆序存放。 9. Delete the Same Record:删除...

    购物网站信息管理实验报告.pdf

    1. **增加商铺**:创建一个指针`p`,移动到链表尾部,然后从文件`increase.txt`读取数据,创建新的节点插入链表,并更新文件`change.txt`。 2. **删除商铺**:通过指针定位到待删除节点,删除节点后如果还有节点,...

    【Java数据结构与算法】单链表

    在上述代码中,`SingleLinkedList`类包含了添加、按序添加、更新和删除节点的方法。`add`方法遍历链表找到最后一个节点,然后将新节点插入其后。`addByOrder`方法则查找适当的插入位置,确保新节点按编号顺序排列。`...

    数据结构课程设计一元多项式.doc

    在解决多项式相加的问题上,由于事先建立的多项式函数已经按指数大小排好序,我们可以直接进行相加操作。首先,我们将比较两个多项式的指数值,如果指数值相同,则将系数值相加;否则,将较小的指数值插入到结果...

    《数据结构》第二章线性表习题及参考答案.pdf

    例如,访问元素和按序号存取操作的时间复杂度为O(1),而插入和删除操作的时间复杂度一般为O(n)。 3. 链表表示的线性表,其插入和删除操作的时间复杂度为O(1),前提是已知待操作的节点位置,否则查找节点的时间...

    计算机等级考试三级数据库历年真题

    - **成绩单输出**:采用对称序遍历二叉排序树,依次输出每个学生节点的链表中的所有成绩。 3. **设计理由**: - 选择二叉排序树和链表结构,因为它们能提供高效的插入(O(nlog2n))、查找(O(log2n))和输出(O(n...

Global site tag (gtag.js) - Google Analytics