建立单链表 单链表的插入_单链列表插入

建立单链表 单链表的插入

All possible cases:

所有可能的情况:

  1. Inserting at beginning

    开始插入

  2. Inserting at the ending

    在末尾插入

  3. Inserting at given position

    在给定位置插入

Algorithms:

算法:

1)开始插入 (1) Inserting at the beginning)

In this case, a new node is to be inserted before the current head node, i.e. , every time the node that got inserted is being updated to the head node. Such insertion can be done using following steps.

在这种情况下,要在当前头节点之前插入一个新节点,即每次将插入的节点更新为头节点时。 可以使用以下步骤完成这种插入。

  1. Update next pointer of the new node (node to be inserted) to point to the current node.

    更新新节点(要插入的节点)的下一个指针,使其指向当前节点。

  2. Update new node as head node.

    节点更新为头节点。

2)在结尾处插入 (2) Inserting at the ending)

In such case the new node is going to be the last node, i.e. , the next pointer of the new node is going to be NULL. The steps are:

在这种情况下,新节点将成为最后一个节点,即新节点的下一个指针将为NULL。 这些步骤是:

  1. Set the next pointer of the new node to be NULL.

    将新节点的下一个指针设置为NULL。

  2. Last node of the existing node is linked with the new node, i.e. , the last node's(existing) next pointer points to the new node.

    现有节点的最后一个节点与节点链接,即,最后一个节点的(现有) 下一个指针指向新节点。

3)插入指定位置 (3) Inserting at given position)

Such case can be handles using following steps:

可以使用以下步骤处理这种情况:

  1. Move the current pointer upto the position where node to be inserted.

    将当前指针移到要插入节点的位置。

  2. Store current next pointer address to tmp_node next.

    将当前的下一个指针地址存储到next tmp_node 。

  3. Store tmp_node address to current next.

    将tmp_node地址存储到当前的下一个地址。

    See the below given program...

    请参阅以下给定的程序...

Insertion is done.

插入完成。

在链接列表中插入新节点的C实现 (C implementation of inserting a new node to a link list)

//
//  main.c
//  linkedlist_insert_element_code
//
//  Created by Anshuman Singh on 22/06/19.
//  Copyright © 2019 Anshuman Singh. All rights reserved.
//
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data;
struct node* next;
} node;
void insert_node(node** head, int val, int position);
void insert_node(node** head, int val, int position)
{
struct node *curr = *head, *tmp_node = NULL;
int count = 1;
tmp_node = (node*)malloc(sizeof(node));
if (tmp_node == NULL) {
printf("Memory allocation is failed:");
return;
}
tmp_node->data = val;
tmp_node->next = NULL;
if (*head == NULL) {
// List is empty, assigning head pointer to tmp_node
*head = tmp_node;
return;
}
if (position == 1) {
// Inserting node at the beginning of the list
tmp_node->next = *head;
*head = tmp_node;
return;
}
while (curr && count < position - 1) {
curr = curr->next;
count++;
}
if (position > (count + 1)) {
printf("\n position doesn't exists in the list ");
return;
}
if (count + 1 == position && curr->next == NULL) {
// Inseting node at the end of the list
curr->next = tmp_node;
return;
}
// Inserting node in the list at given position
tmp_node->next = curr->next;
curr->next = tmp_node;
}
void print_list(node* head)
{
printf("\nList elements:\n");
while (head) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
return;
}
int main()
{
int num_nodes, value, index, position;
node* head = NULL;
printf("Enter the no. of nodes to create list: ");
scanf("%d", &num_nodes);
for (index = 1; index <= num_nodes; index++) {
printf("Enter node data for position %d in the list:  ", index);
scanf("%d", &value);
insert_node(&head, value, index);
}
print_list(head);
printf("\nInsert the element at 1st position:  ");
scanf("%d", &value);
insert_node(&head, value, 1);
// We have inserted one more element, hence num_nodes get increased by 1
num_nodes += 1;
print_list(head);
printf("\nInsert the element at last position:  ");
scanf("%d", &value);
insert_node(&head, value, num_nodes + 1);
// We have inserted one more element, hence num_nodes will get increased by 1
num_nodes += 1;
print_list(head);
printf("\nInsert the element at any position in the list\n");
printf("Enter the position: ");
scanf("%d", &position);
printf("Enter the element value: ");
scanf("%d", &value);
insert_node(&head, value, position);
// We have inserted one more element, hence num_nodes will get increased by 1
num_nodes += 1;
print_list(head);
return 0;
}

Output

输出量

Enter the no. of nodes to create list: 5 
Enter node data for position 1 in the list:  11  
Enter node data for position 2 in the list:  22  
Enter node data for position 3 in the list:  33  
Enter node data for position 4 in the list:  44  
Enter node data for position 5 in the list:  55  
List elements:   
11 22 33 44 55   
Insert the element at 1st position:  10  
List elements:   
10 11 22 33 44 55
Insert the element at last position:  20 
List elements:   
10 11 22 33 44 55 20 
Insert the element at any position in the list   
Enter the position: 4
Enter the element value: 40  
List elements:   
10 11 22 40 33 44 55 20

翻译自: https://www.includehelp.com/data-structure-tutorial/single-linked-list-insertion.aspx

建立单链表 单链表的插入

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

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

相关文章

mysql学习笔记(1-安装简介)

mysql的安装方式&#xff1a;(1)通过系统提供的默认版本(rpm包&#xff0c;稳定版&#xff0c;该版本满足了使用的需求&#xff0c;建议使用&#xff0c;os vendor)(2)mysql官方提供官方提供的通用rpm安装包通用二进制格式的程序包(直接下载文件&#xff0c;解压到指定目录&…

存储器间接寻址方式_8086中的数据存储器寻址模式

存储器间接寻址方式In this type of addressing mode, first the offset address is calculated, then the memory address is calculated and then the operand form that memory location is fetched. There are following modes which lie under the Data Addressing Mode: …

oracle asm 删除diskgroup,ASM磁盘组删除DISK操作

没想到这么简单的操作&#xff0c;由于不熟悉还碰到了两个小问题。[oracledbserver1 ~]$ sqlplus / as sysdbaSQL*Plus: Release 11.2.0.2.0 Production on Tue Aug 9 10:08:062011Copyright (c) 1982, 2010, Oracle.All rights reserved.Connected to:Oracle Database 11g Ent…

intellij idea 最常用的快捷键

F2&#xff0c; 可以快速的向下跳走 CtrlF7&#xff0c;可以查询当前元素在当前文件中的引用&#xff0c;然后按 F3 可以选择AltQ&#xff0c;可以看到当前方法的声明CtrlP&#xff0c;可以显示参数信息CtrlAltV&#xff0c;可以引入变量。例如&#xff1a;new String(); 自动导…

如何在Java中检查字符串是否为数字?

We will check whether string is a number or not – with the help of logic we will solve this problem, 我们将检查字符串是否为数字-借助逻辑&#xff0c;我们将解决此问题&#xff0c; In the first step, we will take a string variable named str and store any val…

oracle清理告警日志,Oracle 跟踪/告警/监听日志的清理脚本

[root ~]# cat del_oracle_log.sh#!/bin/bashsource /home/oracle/.bash_profilefunction audit_log(){ #---audit_log日志跟踪文件#audit_log$(strings $ORACLE_HOME/dbs/spfile$ORACLE_SID.ora|grep -i audit_file_dest|awk -F {print $NF}|sed "s///g")audit_lo…

python爬虫之scrapy框架

Scrapy是一个为了爬取网站数据&#xff0c;提取结构性数据而编写的应用框架。 其可以应用在数据挖掘&#xff0c;信息处理或存储历史数据等一系列的程序中。其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的&#xff0c; 也可以应用在获取API所返回的数据(例如 Amazon As…

oracle中的事务回滚,ORACLE 死事务的回滚

死事务出现在异常关闭数据库或者事务进程不正常结束&#xff0c;比如KILL -9&#xff0c;shutdown abort的情况下。当前数据库里的死事务可以通过查询内部表x$ktuxe来获得。select ADDR,KTUXEUSN,KTUXESLT,KTUXESQN,KTUXESIZ from x$ktuxe where KTUXECFLDEAD;ADDR …

大数据数据可视化设计原则_数据可视化设计的8顶帽子

大数据数据可视化设计原则8 hats of data visualization are basically the important persons and their roles that are basically required to carry out data visualization are as follows: 数据可视化有8个基本要素&#xff0c;而进行数据可视化所需的基本角色如下&#…

debian8.8安装谷歌浏览器

第一步&#xff1a;下载&#xff1a; wget https://dl.google.com/linux/direct/google-chrome-stable_current_i386.deb //32位 wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb //64位第二步&#xff1a;安装dpkg -i google-chrome*.deb…

MB_LEN_MAX常数,带C ++示例

C MB_LEN_MAX宏常量 (C MB_LEN_MAX macro constant) MB_LEN_MAX constant is a macro constant which is defied in climits header, it is used to get the maximum number of bytes in a multibyte character, for any locale, it returns maximum number of bytes that a m…

php谷歌收录接口,php实现查询百度google收录情况(示例代码)

PHP$SEOdetail array();$domain !empty($_GET[q]) ? $_GET[q] : www.mycodes.net;baidudetail($domain);googledetail($domain);var_dump($SEOdetail);function baidudetail($domain) {$baidu_site http://www.baidu.com/baidu?wordsite%3A . $domain;$baidu_link http:/…

Linux学习第三步(Centos7安装mysql5.7数据库)

版本&#xff1a;mysql-5.7.16-1.el7.x86_64.rpm-bundle.tar 前言&#xff1a;在linux下安装mysql不如windows下面那么简单&#xff0c;但是也不是很难。本文向大家讲解了如何在Centos7下如何安装mysql5.7版本,如果有什么问题和错误的地方&#xff0c;欢迎大家指出。 注释&…

linux oracle删除恢复数据恢复,Linux下Oracle误删除数据文件恢复操作

检查数据文件的位置如下&#xff1a;SQL> select name from v$datafile;NAME--------------------------------------------------------------------------------/u01/app/Oracle/oradata/marven/system01.dbf/u01/app/oracle/oradata/marven/undotbs1.dbf/u01/app/oracle/…

数据库如何处理数据库太大_网络数据库中的数据处理

数据库如何处理数据库太大Before learning the data manipulation in a network model, we are discussing data manipulation language, so what is the data manipulation language? 在学习网络模型中的数据操作之前&#xff0c;我们正在讨论数据操作语言&#xff0c;那么什…

oracle12537错误,ORA-12537:TNS:connection closed错误处理方法

1.ORA-12537:TNS:connection closed错误处理过程检查监听正常&#xff0c;Oracle服务也是正常启动的&#xff0c;但是登录不进去。2.解决方案1. cd $ORACLE_HOME/bin/ 进入bin目录2. ll oracle-rwxrwxrwx. 1 ora12 dba 323762222 6?. 14 19:12 oracle3.chmod 6571 oracle 更改…

操作系统中的死锁_操作系统中的死锁介绍

操作系统中的死锁1.1究竟什么是僵局&#xff1f; (1.1 What exactly is a deadlock?) In a multiprogramming environment, there may be several processes with a finite number of resources. A process may request another resource while still holding some of the oth…

《云数据管理:挑战与机遇》2.3 数据库系统

本节书摘来自华章出版社《云数据管理》一书中的第2章&#xff0c;第3节&#xff0c;作者迪卫艾肯特阿格拉沃尔&#xff0c;更多章节内容可以访问云栖社区“华章计算机”公众号查看本节中&#xff0c;我们将为数据库系统中的一些主要概念提供一个相当抽象、简洁和高层次的描述。…

sql server与oracle的分页,详解SQLServer和Oracle的分页查询

不管是DRP中的分页查询代码的实现还是面试题中看到的关于分页查询的考察&#xff0c;都给我一个提示&#xff1a;分页查询是重要的。当数据量大的时候是必须考虑的。之前一直没有花时间停下来好好总结这里。现在又将Oracle视频中关于分页查询的内容看了一遍&#xff0c;发现很容…