(C语言)在有序链表中插入数据 (40 分)

简介: (C语言)在有序链表中插入数据 (40 分)

在有序链表中插入数据 (40 分)

给定一批严格递增排列的整型数据,给定一个x,若x不存在,则插入x,要求插入后保持有序。存在则无需任何操作。

输入格式:

输入有两行: 第一个数是n值,表示链表中有n个数据。后面有n个数,分别代表n个数据。 第二行是要插入的数。

输出格式:

输出插入后的链表数据,以空格分开。行末不能有多余的空格。

输入样例1:

在这里给出一组输入。例如:

5 1 3 6 9 11
4

输出样例1:

在这里给出相应的输出。例如:

1 3 4 6 9 11

输入样例2:

在这里给出一组输入。例如:

5 1 3 6 9 11
3

输出样例2:

在这里给出相应的输出。例如:

1 3 6 9 11

题解

#include <stdio.h>
#include <stdlib.h> 

//单链表定义
typedef struct Node{
    int data;
    struct Node *next;
}LNode,*LinkList;

//单链表插入
void InsertList(LinkList L,int x){
    LinkList p, pp,q;
    pp = (LinkList)malloc(sizeof(LNode));
    pp->data = x;
    for (q = L->next; q && q->data != x; q = q->next);
    if(q!=NULL) return;
    for (p = L; p->next && p->next->data < x; p = p->next);//当数据大于时跳出
    pp->next = p->next;
    p->next = pp;
}
//打印
void PrintList(LinkList L){
    LinkList p = L->next;
    while(p){
        if(p->next!=NULL){
            printf("%d ",p->data);
            p = p->next;
        }else{
            printf("%d",p->data);
            p = p->next;
        }
    }
}

int main(){
    int n,t;
    LinkList L = (LinkList)malloc(sizeof(LNode));
    L->next = NULL;
    if(scanf("%d",&n)==1){
        for(int i=0;i<n+1;i++){
            if(scanf("%d",&t)==1)
                InsertList(L,t);
        }
        PrintList(L);
    }
    return 0;
}
相关文章
|
1月前
|
Python
【Leetcode刷题Python】21. 合并两个有序链表
介绍了几种不同的方法来合并多个已排序的链表,包括暴力求解、使用小顶堆以及分而治之策略。
31 2
|
28天前
|
存储 编译器 C语言
【C语言篇】数据在内存中的存储(超详细)
浮点数就采⽤下⾯的规则表⽰,即指数E的真实值加上127(或1023),再将有效数字M去掉整数部分的1。
|
7天前
|
存储 C语言
C语言程序设计核心详解 第九章 结构体与链表概要详解
本文档详细介绍了C语言中的结构体与链表。首先,讲解了结构体的定义、初始化及使用方法,并演示了如何通过不同方式定义结构体变量。接着,介绍了指向结构体的指针及其应用,包括结构体变量和结构体数组的指针操作。随后,概述了链表的概念与定义,解释了链表的基本操作如动态分配、插入和删除。最后,简述了共用体类型及其变量定义与引用方法。通过本文档,读者可以全面了解结构体与链表的基础知识及实际应用技巧。
|
6天前
|
存储 算法 C语言
C语言手撕实战代码_循环单链表和循环双链表
本文档详细介绍了用C语言实现循环单链表和循环双链表的相关算法。包括循环单链表的建立、逆转、左移、拆分及合并等操作;以及双链表的建立、遍历、排序和循环双链表的重组。通过具体示例和代码片段,展示了每种算法的实现思路与步骤,帮助读者深入理解并掌握这些数据结构的基本操作方法。
|
7天前
|
C语言
C语言程序设计核心详解 第二章:数据与数据类型 4种常量详解 常见表达式详解
本文详细介绍了C语言中的数据与数据类型,包括常量、变量、表达式和函数等内容。常量分为整型、实型、字符型和字符串常量,其中整型常量有十进制、八进制和十六进制三种形式;实型常量包括小数和指数形式;字符型常量涵盖常规字符、转义字符及八进制、十六进制形式;字符串常量由双引号括起。变量遵循先定义后使用的规则,并需遵守命名规范。函数分为标准函数和自定义函数,如`sqrt()`和`abs()`。表达式涉及算术、赋值、自增自减和逗号运算符等,需注意运算符的优先级和结合性。文章还介绍了强制类型转换及隐式转换的概念。
|
12天前
|
存储 测试技术 C语言
C语言实现链表的各种功能
本文详细介绍了如何使用C语言实现链表的各种功能,包括链表节点结构的定义与操作函数的实现。链表作为一种常用的数据结构,具有节点自由插入删除、动态变化等特点。文中通过`link_list.h`和`link_list.c`两个文件,实现了链表的初始化、插入、删除、查找、修改等核心功能,并在`main.c`中进行了功能测试。这些代码不仅展示了链表的基本操作,还提供了丰富的注释帮助理解,适合作为学习链表的入门资料。
|
2天前
|
C语言
C语言里的循环链表
C语言里的循环链表
|
26天前
|
C语言
【C语言】在限制定条件下数据移动
【C语言】在限制定条件下数据移动
24 1
|
1月前
|
存储 C语言
【C语言】C语言-学生成绩管理系统(源码+数据文件+课程论文)【独一无二】
【C语言】C语言-学生成绩管理系统(源码+数据文件+课程论文)【独一无二】
37 15
|
1月前
|
算法
LeetCode第21题合并两个有序链表
该文章介绍了 LeetCode 第 21 题合并两个有序链表的解法,通过创建新链表,依次比较两个链表的头节点值,将较小的值插入新链表,直至其中一个链表遍历完,再将另一个链表剩余部分接到新链表后面,实现合并。
LeetCode第21题合并两个有序链表