动态创建链表 与头插法 和头插法的优化

news2024/10/6 22:26:25

1.代码一

思想:在main函数中实行三次头插法,在insertFromHead()函数中,主要创建新的节点new,开辟空间,输入想要增加的data;根据头节点的情况来判断插入,

如果head == NULL;head = new; 返回头节点 ;

如果不为空,新节点 new -> next = head; head = new ;返回头节点

#include<stdio.h>
#include<stdlib.h>
struct Test
{
        int data;
        struct Test *next;
};

void printLink(struct Test *head)
{
        struct Test *point;
        point = head;
        printf("output the new insert data:\n");
        while(point !=NULL){
                printf("%d ",point->data);
                point = point->next;
        }
        putchar('\n');
}

struct Test* insertFromHead(struct Test *head)
{
        struct Test *new;
new = (struct Test*)malloc(sizeof(struct Test));
        printf("Please input your new node data:\n");
        scanf("%d",&(new->data));
        if(head ==NULL)
        {
                head = new;
                return head;
        }else
        {
                new ->next = head;
                head = new;
        }
        return head;
}

int main()
{
        int i = 3;
        struct Test *head = NULL;
        while(i--){
                head = insertFromHead(head);
        }
  printLink(head);
        return 0;
}

2.代码二

优化思想:

        在insertFromHead()函数,用while(1)无限循环 输入, 当输入的data =0 时;终止输入,返回 head ,打印函数。

#include<stdio.h>
#include<stdlib.h>
struct Test
{
        int data;
        struct Test *next;
};

void printLink(struct Test *head)
{
        struct Test *point;
        point = head;
        printf("output the new insert data:\n");
        while(point !=NULL){
                printf("%d ",point->data);
                point = point->next;
        }
        putchar('\n');
}

struct Test* insertFromHead(struct Test *head)
{
        struct Test *new;
        while(1){
        new = (struct Test*)malloc(sizeof(struct Test));
        printf("Please input your new node data:\n");
        scanf("%d",&(new->data));
        if(new->data ==0){
                printf("0 quit\n");
                return head;
        }
        if(head ==NULL)
        {
                head = new;
        }else
        {
                new ->next = head;
                head = new;
        }
    }
        return head;
}

int main()
{
    
        struct Test *head = NULL;
  
        head = insertFromHead(head);

        printLink(head);
        return 0;
}

3.代码三

优化思想:创建链表和插入节点的两个功能用函数封装的方式分开,目的是有利于调用插入函数;

insertFromHead()  函数中,判断head是否为空,否则插入

creatLinkHead()  函数中,开辟new 节点的空间,在while(1)循环中,无限输入data,若data为0则跳出循环,不为0则调用插入函数insertFromHead()

        另外,在动态创建链表的同时,''new''  ,可以用free()函数释放内存。

#include<stdio.h>
#include<stdlib.h>
struct Test
{
        int data;
        struct Test *next;
};

void printLink(struct Test *head)
{
        struct Test *point;
        point = head;
        printf("output the new insert data:\n");
        while(point !=NULL){
                printf("%d ",point->data);
                point = point->next;
        }
        putchar('\n');
}

struct Test* insertFromHead(struct Test *head,struct Test *new)
{
        if(head ==NULL)
        {
                head = new;
        }else
        {
                new ->next = head;
                head = new;
        }
        return head;
}

struct Test *creatLink(struct Test *head)
{
        struct Test *new;
        while(1){
                 new = (struct Test*)malloc(sizeof(struct Test));
                 printf("Please input your new node data:\n");
                 scanf("%d",&(new->data));
                 if(new->data ==0){
                         printf("0 quit\n");
                         free(new);
                         return head;
                 }
                head = insertFromHead(head,new);
        }
}

int main()
{
        struct Test *head = NULL;
        struct Test t1 = {1000,NULL};
        head = creatLink(head);
        printLink(head);
        head = insertFromHead(head,&t1);
        printLink(head);
        return 0;
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1619051.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DSPy入门:告别指令提示,拥抱编程之旅!

原文&#xff1a;intro-to-dspy-goodbye-prompting-hello-programming 2024 年 2 月 27 日 DSPy框架如何通过用编程和编译代替提示来解决基于LLM的应用程序中的脆弱性问题。 目前&#xff0c;使用大型语言模型(LLMs)构建应用程序不仅复杂而且脆弱。典型的pipelines通常使用pr…

Xinlinx FPGA内的存储器BRAM全解

目录 一、总体概述1.7系列FPGA的BRAM特点2.资源情况 二、BRAM分类1.单端口RAM2.简单双端口RAM3.真双端口RAM 三、BRAM的读写1、Primitives Output Registers读操作注意事项2.三种写数据模式&#xff08;1&#xff09;Write_First&#xff08;2&#xff09;Read_First&#xff0…

梯度,hesse阵与Jacobi矩阵

分清楚三个量的含义和计算方法。 梯度 表征的是一个列向量&#xff0c;是相对于某个方向而言的&#xff0c;但是某个方向上可能有多个变量&#xff0c;所以梯度不是简单的直接求偏导&#xff0c;并且说了&#xff0c;它是一个列向量&#xff0c;所以&#xff0c; 我们设 f : …

从0到1—POC编写基础篇(二)

接着上一篇 POC常用基础模块 urllib 模块 Python urllib 库用于操作网页 URL&#xff0c;并对网页的内容进行抓取处理。 urllib 包 包含以下几个模块&#xff1a; ●urllib.request - 打开和读取 URL。 ●urllib.error - 包含 urllib.request 抛出的异常。 ●urllib.parse - …

Access2019直接将数据导入SQL Server数据库中,再直接链接回来

Access2019 的数据表等&#xff0c;除了通过 SSMA 导入数据库外&#xff0c;还可以利用access2019 自身的外部数据导出功能来达到目的。本文将详细介绍这一操作过程。 一、命令行操作阶段 1.以SA这一超级用户登录SQL Server&#xff0c;创建一个数据库&#xff0c;例如“个人…

【java毕业设计】 基于Spring Boot+mysql的高校心理教育辅导系统设计与实现(程序源码)-高校心理教育辅导系统

基于Spring Bootmysql的高校心理教育辅导系统设计与实现&#xff08;程序源码毕业论文&#xff09; 大家好&#xff0c;今天给大家介绍基于Spring Bootmysql的高校心理教育辅导系统设计与实现&#xff0c;本论文只截取部分文章重点&#xff0c;文章末尾附有本毕业设计完整源码及…

C++中的list类模拟实现

目录 list类模拟实现 list类节点结构设计 list类非const迭代器结构设计 迭代器基本结构设计 迭代器构造函数 operator()函数 operator*()函数 operator!()函数 operator(int)函数 operator--()函数 operator--(int)函数 operator()函数 operator->()函数 list…

MATLAB 数据类型

MATLAB 数据类型 MATLAB 不需要任何类型声明或维度语句。每当 MATLAB 遇到一个新的变量名&#xff0c;它就创建变量并分配适当的内存空间。 如果变量已经存在&#xff0c;那么MATLAB将用新内容替换原始内容&#xff0c;并在必要时分配新的存储空间。 例如&#xff0c; Tota…

Java虚拟机类加载机制详细总结

1、概述 Java虚拟机把描述类的数据从Class文件加载到内存&#xff0c;并对数据进行校验、转换解析和初始化&#xff0c;最终形成可以被虚拟机直接使用的Java类型&#xff0c;这个过程被称作虚拟机的类加载机制。 2、类加载的时机 一个类型从被加载到虚拟机内存中开始&#xff…

idea自定义配置文件的注释

打开 IntelliJ Idea 软件 依次找到 File—>Editor—>File and Code Templates 设置 Files 下的Class、Interface、Enum等 输入下面的内容 /** * description: ${NAME} * date: ${YEAR}-${MONTH}-${DAY} ${HOUR}:${MINUTE} * author: author **/

ElasticSearch总结二

正向索引和倒排索引&#xff1a; 正向索引&#xff1a; 比方说我这里有一张数据库表&#xff0c;那我们知道对于数据库它一般情况下都会基于i d去创建一个索引&#xff0c;然后形成一个b树。 那么你根据i d进行检索的速度&#xff0c;就会非常的快&#xff0c;那么这种方式的…

VMware 15 安装centos7虚拟机

1. 安装前准备 1.1 下载centos 阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 下载需要版本的centos版本 直达链接 centos7.9 &#xff1a; centos-7.9.2009-isos-x86_64安装包下载_开源镜像站-阿里云 .基础使用的话安装选择这个就行了&#xff0c;大概下载几分钟 2. …

iOS ------代理 分类 拓展

代理协议 一&#xff0c;概念&#xff1a; 代理&#xff0c;又称委托代理&#xff08;delegate&#xff09;&#xff0c;是iOS中常用的一种设计模式。顾名思义&#xff0c;它是把某个对象要做的事委托给别的对象去做。那么别的对象就是这个对象的代理&#xff0c;代替它来打理…

【简单讲解下如何学习C++】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

P1106 删数问题

本题为洛谷&#xff1a; #include<iostream> #include<string> using namespace std; int main(){string n;int k;cin>>n>>k;while(k--){for(int i0;i<n.length();i){if(n[i]>n[i1]){n.erase(i,1); break;} }for(int i0;i<n.length()-1&&…

uniapp APP检测更新

需求&#xff1a; 1.首次进入APP给出弹窗提示是否存在最新版本APP&#xff0c;可选择更新或者取消 2.选择取消后&#xff0c;在使用期间不再弹出该弹窗 3.在设置中增加按钮&#xff0c;点击进行版本检测&#xff0c;再弹窗 效果图&#xff1a; 使用到的插件&#xff1a;APP升…

如何理解自然语言处理中的位置编码(Positional Encoding)

在自然语言处理和特别是在使用Transformer模型中,位置编码(Positional Encoding)是一个关键的概念。它们的作用是为模型提供序列中各个元素的位置信息。由于Transformer架构本身并不像循环神经网络(RNN)那样具有处理序列的固有能力,位置编码因此显得尤为重要。 为什么需…

大语言模型微调过程中的 RLHF 和 RLAIF 有什么区别?

目前想要深入挖掘大型语言模型&#xff08;LLM&#xff09;的全部潜力需要模型与我们人类的目标和偏好保持一致。从而出现了两种方法&#xff1a;来自人类反馈的人力强化学习&#xff08;RLHF&#xff09;和来自人工智能反馈的人工智能驱动的强化学习&#xff08;RLAIF&#xf…

linux磁盘管理和挂载和镜像源管理

一.分清文件类型 所有的设备都在/dev中 我们知道d开头是目录 c开头是外部设备比如打印机&#xff0c;鼠标等外接设备 b开头才是我们要找的块文件&#xff0c;即硬盘 二. 3个磁盘管理 1.mount负责挂载外部磁盘2.fdisk查看磁盘分区情况3.lsblk查看可用设备信息以及它们的挂载点…

Android Studio Iguana | 2023.2.1配置优化

一. 前言 本篇文章记录最新版本的Android Studio的配置优化&#xff0c;写这篇文章的是由于电脑中的AS工具更新版本覆盖安装后&#xff0c;AS会经常卡死&#xff0c;Debug的时候也经常莫名其妙的断掉&#xff0c;非常影响工作效率&#xff0c;所以重新把配置环境整理一下&#…