数据结构之头指针链表de三种插入方式(头插法,尾插法,在pos处插入)

1、头插法:

流程:1 ,判断传入数据是否正确 2,如果正确则创建一个新的节点,并判断节点是否创建成功 3,然后给节点成员变量赋值 4,最后让新节点变为链表的第一个节点。
代码实现:

// 链表的头插
int Insert_Head(Node** h, LinkData data)
{//判断传入数据是否正确if (NULL == h){return FALSE;}// 创建新的节点Node* node = (Node*) malloc(sizeof(Node) / sizeof(char));if (NULL == node)       // 判断节点创建是否成功{return FALSE;}// 给节点成员变量赋值node->data = data;node->next = *h;// 让新节点变为链表的第一个节点*h = node;return TRUE;    
}

2、尾插法:

流程:1,首先判断传入数据是否正确 2,如果正确则创建一个新的节点并判断节点是否创建成功 3,然后给成员变量赋值 4,找到最后一个节点(创建一个tmp指向第一个节点,遍历整个链表,最终指向最后一个节点),寻找最后一个节点时要判断是否为空表。
代码:

// 链表的尾插
int Insert_Last(Node** h, LinkData data)
{if (NULL == h){return FALSE;}// 创建新的节点Node* node = (Node*) malloc(sizeof(Node) / sizeof(char));if (NULL == node)       // 判断节点创建是否成功{return FALSE;}// 给节点成员变量赋值node->data = data;node->next = NULL;// 找到最后一个节点Node* tmp = *h;         // 指向第一个节点if (NULL == tmp)        // 空表{*h = node;}else {while (tmp->next){tmp = tmp->next;}tmp->next = node;}return TRUE;
}

3、中间插法(在第pos个节点处插入):

流程:1,判断传入数据是否正确、pos是否符合题意 2,如果正确则创建新节点 3,给变量成员赋值 4,判断是否是空表,如果是空表,则只能插在第一个节点处(需判断pos的值),如果不是空表,需要单独考虑插到第一节点处,然后判断pos是否会越界,找到插入位置的前一个节点(利用第三个指针遍历到pos前一个位置),然后执行插入(插入前要判断遍历后的tmp是否为空)。
代码:

// 在第pos个位置处插入数据
int Insert_Pos (Node** h, int pos, LinkData data)
{// 判断传入数据是否正确,插入位置是否大于1if (NULL == h || pos < 1){return FALSE;}// 创建新节点Node* node = (Node*) malloc(sizeof(Node) / sizeof(char));if (NULL == node){return FALSE;}// 给新节点赋值node->data = data;// 判断是否为空表,如果是空表则插在第一个节点处if (NULL == *h){if (1 != pos)           // 空表时判断pos是否为1{printf ("当前为空表,无法在第%d节点处插入数据\n", pos);free(node);return FALSE;}node->next = NULL;      // 插入第一个节点处*h = node;}// 不为空表时else{if (1 == pos){node->next = *h;*h = node;}else{int i;Node* tmp = *h;     // tmp 开始的时候指向第一个节点for (i = 0; i < pos - 2; i++){if (NULL == tmp)        // 如果pos太大会造成越界{break;}tmp = tmp->next;}if (NULL == tmp){printf ("插入位置越界\n");free(node);return FALSE;}node->next = tmp->next;tmp->next  = node;}}return TRUE;
}

最后附上头文件,宏定义,结构体声明和主函数:

#include <stdio.h>
#include <stdlib.h>#define TRUE  1
#define FALSE 0typedef int LinkData;       // 链表的数据类型typedef struct _node        
{LinkData data;          // 链表的数据struct _node* next;     // 指向链表的下一个指针
}Node;int main()
{Node* head = NULL;  //指向链表第一个结点的指针(头指针)int i;for (i = 0; i < 10; i++){Insert_Head(&head, i);//Insert_Last(&head, i);//Insert_Pos (&head, pos, i);}return 0;
}

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

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

相关文章

c# 科学计数法值转换成正常值,返回字符串

/// <summary>/// 科学计数法值转换成正常值/// </summary>/// <param name"value"></param>/// <returns></returns>public string ValueScientificNotationConvert(JToken value){if (value null) return "";var …

使用 Docker 部署 Node 服务

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 前言   Docker 是一个开源的容器引擎。开发者可以将自己的应用以及依赖打包为一个可移植的容器&#xff0c;然后发布到 Linux 机器上。…

科目三电子考的通过率普遍偏低

据调查&#xff0c;科目三电子考的通过率普遍偏低&#xff0c;是学员们公认的最难考项目。今天小编要通过自己的所看所听分析科目三电子考通过率低的三大原因。 原因一&#xff1a;考生基本功不扎实 从历年来考试失败的理由中&#xff0c;可以发现&#xff0c;大多都出现上车、…

打印python包含汉字报SyntaxError: Non-ASCII character '\xe4' in file

因为本人主要使用Scala语言&#xff0c;但是之前同事包括老大都是使用python&#xff0c;加上python在spark的使用中的确越来越受欢迎&#xff0c;所以最近准备入坑python&#xff0c;但是装完写demo的时候出了问题&#xff0c;如下&#xff1a; 查了下发现&#xff0c;这是pyt…

数据结构之头指针链表的逆序、输出和指定位置的删除

头指针链表指定位置的删除 实现&#xff1a;1&#xff0c;先判断传入的数据是否正确&#xff0c;然后再判断是否为空表&#xff0c;最后判断pos的值是否满足题意 2&#xff0c;分删除位置为1和不为1讨论&#xff1a;为1时&#xff0c;直接将h指向第二个节点并释放第一个节点的…

软件包管理 之 fedora-rpmdevtools 工具介绍

作者&#xff1a;北南南北来自&#xff1a;LinuxSir.Org提要&#xff1a;fedora-rpmdevtools 是一款Fedora的RPM包的开发工具&#xff0c;用于Fedora Core 2.0 以上版本&#xff1b; 正文 一、fedora-rpmdevtools 介绍&#xff1b; 用于制作RPM包的工具&#xff0c;为开发者提供…

Node.js 多版本安装配置(Window、Ubuntu 、CentOS 、Mac OS、Cloud Studio)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 向大家介绍在window和Linux上安装Node.js的方法。 本安装教程以Node.js v4.4.3 LTS(长期支持版本)版本为例。 Node.js安装包及源码下载…

场外科目三考试技巧

科目三考试可以说是学车中最有用的&#xff0c;因为这和将来正式上路是完全相同的&#xff0c;所以掌握c1科目三考试技巧也是很必要的。下面就来看看小编为大家总结的场外科目三考试技巧吧。 一、考前准备 要从车头前绕过进入车内&#xff0c;并注意关牢车门&#xff0c;之后双…

数据结构之单链表(头结点)的一些常用操作(增删改查逆)

删除指定结点 流程&#xff1a;判断传入数据和pos的位置是否符题意——找到删除位置的前一个结点&#xff0c;找到后要判断所找的位置是否越界——删除指定结点。代码&#xff1a; //删除指定结点 int Delete_Pos(Node* h, int pos) {if (NULL h || pos < 1){return FALS…

cookie ? 利用cookie实现 显示上次访问时间?

二、 <%page import"java.text.SimpleDateFormat"%> <%page import"java.util.Date"%> <% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%> <!DOCTYPE html PUBLIC &…

Java9Java10 Java11新特性

1转载于:https://www.cnblogs.com/LXL616/p/11100177.html

数据结构之头结点链表的三种插入方式(头插法,尾插法,在pos处插入)

创建头结点 流程&#xff1a;首先创建头结点表指针并为其分配空间——并将头结点指向空&#xff0c;防止出现段错误。 代码&#xff1a; //创建头结点 Node* Create_List () {//创建头结点Node* list (Node*) malloc(sizeof(Node) / sizeof(char));if (NULL list) //检验…

JAVA 构造 MAP 并初始化 MAP、定义时就初始化

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 第一种方法&#xff1a;static块初始化 public class Demo{private static final Map<String, String> myMap;static{myMap new…

心​理​学​家​告​诉​你​:​男​女​怎​样​才​叫​合​适

心理学家认为..判断男女两个人是否适合牵手..应考虑以下10个因素.. 第一..彼此都是对方的好朋友..不带任何条件..喜欢与对方在一起.. 第二..彼此很容易沟通..互相可以很敞开地坦白任何事情..而不必担心被对方怀疑或轻视.. 第三..两人在心灵上有共同的理念和价值观..并…

回溯---分割字符串使得每个部分都是回文数

分割字符串使得每个部分都是回文数 131. Palindrome Partitioning (Medium) For example, given s "aab", Return[["aa","b"],["a","a","b"] ] 题目描述&#xff1a; 给定一个字符串&#xff0c;将其分割成回文串…

C# 调用FLashPaper2(二)

C#调用FlashPaper2 [2011-4-14 10:06:41]c:相信大家都知道“FlashPaper”这个东西是用来干什么的&#xff0c;他是一个转换的软件&#xff0c;通过虚拟打印机把文件流转换成PDF或SWF文件。这里废话就不多说了&#xff0c;直接看如何使用C#调用FlashPaper2&#xff1a; protecte…

C语言实现简单的电子通讯录

**制作一个电子通讯录&#xff0c;通过该通讯录能录入好友ID号、姓名(英文)、手 机号码&#xff0c;家庭住址&#xff0c;公司电话。** 原理&#xff1a;分成5个模块&#xff0c;将模块功能实现写入头文件中。主函数部分代码&#xff1a; 显示函数部分&#xff0c;在Markdow…

Jackson使用:String 与对象互转、Jackson 从 json 字符串转换出对象

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、从json字符串转换出对象 Pager类&#xff1a; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; JsonIgnoreProper…

13个好习惯 教你健康一整年

怎么在坐着上班时&#xff0c;练出紧实小腹&#xff1f;如何在酗咖啡的紧凑中&#xff0c;帮身体排毒&#xff1f;新年初始&#xff0c;《天下》介绍十三个小诀窍&#xff0c;让你轻松变健康。 一年初始&#xff0c;该如何规划最重要的“健康”&#xff1f;《天下》邀请专家&am…

结构体的传参理解成员的存储方式

结构体的成员变量在内存中存储的方式&#xff0c;决定于设定的内存对齐方式是几字节&#xff1a;gcc编译默认使用4字节对齐&#xff1a; 1 #include <stdio.h>2 3 typedef struct test_buf4 {5 int a;6 char c;7 char buf[8];8 char *str;9 10 }buf…