一、信息须知:

1:malloc()函数,头文件为cstdlib。
用法: node *p=(node *)malloc(sizeof(node))。
作用:分配一个node类型大小的内存空间, 并把其赋值给node 型的指针p。 node *p=new node也可实现此作用。
2:typedef char datatype 为char起别名datatype,方便链表data数据类型修改。

二、思路分析:

1、头插法思路图示分析
2、尾插法思路图示分析

三、代码展示:

//以" & "结尾分别以头插法、尾插法创建单链表
#include <iostream>
#include <cstdlib> //malloc()函数头文件,作用:动态开辟空间。using namespace std;typedef  char datatype;  //为char起别名,方便建立链表data数据类型修改。
//此示例代码链表数据类型为char,若建立链表存储data数据类型为int,仅将此处改为 typedef int datatype即可。typedef struct node{//建立node结构体datatype data;node *next;
}node;node *InitList(node *L){//初始化单链表;L=(node *)malloc(sizeof(node));L->next=NULL;return L;
}node *HeadCreatList(node *L){   //头插法,含头结点node *p; int flag=1; datatype x;while(flag){cin>>x;if(x!='&'){p=(node *)malloc(sizeof(node));p->data=x;p->next=L->next;   //头插法关键步骤1L->next=p;         //头插法关键步骤2}else flag=0;}return L;
}node *RearCreatList(node *L){   //尾插法,含头结点node *p;node *r=L; //指针r存储链表当前的尾结点int flag=1;datatype x;while(flag){cin>>x;if(x!='&'){p=(node *)malloc(sizeof(node));p->data=x;p->next=NULL;r->next=p;      //尾插法关键步骤1:将新建节点p插入链表当前尾结点r后r=p;            //尾插法关键步骤2:由于上一操作将p插入链表尾部,此操作更新链表尾部为p。r一直存储链表当前尾结点}else flag=0;}return L;
}
void PrintList(node *L){  //输出单链表node *q=L->next;while(q!=NULL){cout<<q->data<<" ";q=q->next;}cout<<endl;
}int main(){node *L1,*L2;L1=InitList(L1);cout<<"头插法输入: ";L1=HeadCreatList(L1);L2=InitList(L2);cout<<"尾插法输入: ";L2=RearCreatList(L2);cout<<"头插法:";PrintList(L1);cout<<"尾插法:";PrintList(L2);return 0;
}

演示结果:

头插法输入: a b c d e &
尾插法输入: a b c d e &
头插法:e d c b a
尾插法:a b c d e

四、补充函数说明

此补充说明上示例代码中初始化函数为node *InitList(node *L),返回值为头指针L ,而不是无返回值 void Iiinlist (node *L)。建表函数node *HeadCreatList(node *L)同理。

1、无效操作:void InitList(node *L)
示例代码:

//此示例代码为了说明 应该用node *InitList(node *L) 而不是void *InitList(node *L)
#include <iostream>
#include <cstdlib>
using namespace std;typedef  char datatype;
typedef struct node{datatype data;node *next;
}node;void InitList(node *L){L=(node *)malloc(sizeof(node));L->next=NULL;cout<<L<<endl;
}int main()
{node *L1; cout<<L1<<endl;InitList(L1);cout<<L1<<endl;
}

演示结果:

0x10
0xfd1730
0x10

上述结果即显示,node IintList(node *L)操作无效。L1经此操作,并未改变。

2、正确有效操作:node *IintList(node *L)
示例代码:

//此示例代码为了说明 应该用node *InitList(node *L) 而不是void *InitList1(node *L)
#include <iostream>
#include <cstdlib>
using namespace std;typedef  char datatype;
typedef struct node{datatype data;node *next;
}node;node *InitList(node *L){L=(node *)malloc(sizeof(node));L->next=NULL;return L;
}int main()
{node *L2;  cout<<L2<<endl;L2=InitList(L2); cout<<L2<<endl;return 0;
}

演示结果:

0x10
0xdc1730

故事的开头总是极尽温柔,故事会一直温柔…

头插法、尾插法建立单链表(含详细注释C++)相关推荐

  1. 采用头插法和尾插法建立单链表

    面说一下如果用C语言建立单链表,分为头插法和尾插法两种. 采用头插法建立单链表 该方法从一个空表开始,生成新结点,并将读取到的数据存放到新结点的数据域中,然后将新结点插入到当前链表的表头,即头结点之后 ...

  2. java实现单链表的建立(头插法和尾插法)

    单链表 单链表(Single Linked List): 单链表是一种链式存取的数据结构,用一组地址任意(可能连续,也可能不连续)的存储单元存放线性表中的数据元素. 链表中的数据是以结点来表示的,每个 ...

  3. 头插法和尾插法建立带头节点的单链表

    有两种方法建立单链表,尾插法和头插法,他们的区别是:头插法是按照输入元素倒序建立,为尾插法为顺序插入,并且多一个尾节点,我们一般使用尾插法. 一.头插法 代码为: pCurr -> next = ...

  4. c语言 链表建立头插法尾插法,单链表的创建(头插法和尾插法)

    单链表的创建分为头插法和尾插法,头插法是不断地向头结点插入新的结点.这样会使你所插入的结点值呈现逆序,所以头插法也可以实现单链表的逆置.尾插法是不断地向插入的新元素之后再插入新的元素.需要注意的是头插 ...

  5. C语言头插法尾插法创建单链表

    前言 链表 [Linked List]:链表是由一组不必相连[不必相连:可以连续也可以不连续]的内存结构 [节点],按特定的顺序链接在一起的抽象数据类型. 下面介绍单链表的创建: 创建节点 链表是由一 ...

  6. 单链表的头插法尾插法及删除节点操作

    带头节点的单链表的头插法尾插法及删除节点操作 链表的操作对于初学者来说理解非常有难度,初学的同学们应该在学习链表的过程中多再练习本上画图,写一行代码就画出代码执行后链表各节点图的变化,方便理解.我也是 ...

  7. 数据结构学习(二)——单链表的操作之头插法和尾插法创建链表

    http://blog.csdn.net/abclixu123/article/details/8210109 链表也是线性表的一种,与顺序表不同的是,它在内存中不是连续存放的.在C语言中,链表是通过 ...

  8. 单链表的头插法和尾插法c语言实现

    /*单链表的头插法和尾插法c语言实现*/ #include <stdio.h> #include <stdlib.h> #include <string.h> #d ...

  9. 单链表头插法和尾插法

    1.头插法 头插法:每次把新节点插入到头节点之后,创建的单链表和数据输入顺序相反. 防止单链表是空的而设的. 当链表为空的时候,带头结点的头指针就指向头结点,头结点的指针域存储的数值为NULL. &l ...

  10. C语言的单链表创建:头插法/尾插法

    文章目录 前言 链表头插法 链表尾插法 源码实现 前言 接下来一段时间,将对数据结构进行复习,总的来说数据结构自大学之后忘记得有点吓人,为了防止脑容量本就小得脑袋更小,必须得持续性得温故了. 链表数据 ...

最新文章

  1. docker私有仓库harbor配置helm chart仓库(安装helm chart插件)
  2. C++学习笔记-----std::string的=,+,+=对int,char类型操作数的支持
  3. [Head First Java] - 给线程命名
  4. jzoj2679-跨时代【背包,dfs,状压】
  5. C语言笔试两题,有坑
  6. c语言将pwd结果赋给变量,《网络系统管理linux实训》全套PPT电子课件教案-第4章 shell编程.ppt...
  7. linux安装pytorch-GPU版本
  8. go语言 panic
  9. w10计算机字体怎么设置在哪里设置,如何设置修改win10系统电脑的显示字体
  10. Android 支付宝小程序跳转
  11. Camera Link协议解析图文及视频
  12. 数组分为两部分,使得其和相差最小
  13. 既是老师又是师兄的临别箴言
  14. GPS之MTK平台代码小结以及gps协议注释
  15. 电商平台促销方式汇总
  16. java的单行注释符是_Java 程序中的单行注释符是( ),多行注释符是( )_学小易找答案...
  17. Word:外国人中文译名中间的“点”怎么输入
  18. 命令行连接MySQL报错:mysql: [Warning] Using a password on the command line interface can be insecure
  19. winform 中自定义有透明度的panel,可用于加载遮盖层
  20. 想要完美蜕变就来广州传智播客平面UI设计培训机构

热门文章

  1. 判断字符串是否是英文
  2. 计算机教师教学能手演讲,关于教学能手的演讲稿范文
  3. 龙芯 mysql_龙芯是什么架构
  4. debian 显示器使用自定义分辨率
  5. NAT技术如何解决IP地址不足的问题
  6. 未来的预想--5G时代与私人云存储
  7. 如何规划设计一款成熟的互联网产品?
  8. mysql 1577_Mysql ERROR 1577错误解决方法
  9. 通过sql截取查询到的数据
  10. C++深度优先和广度优先的实现