头插法、尾插法建立单链表(含详细注释C++)
一、信息须知:
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++)相关推荐
- 采用头插法和尾插法建立单链表
面说一下如果用C语言建立单链表,分为头插法和尾插法两种. 采用头插法建立单链表 该方法从一个空表开始,生成新结点,并将读取到的数据存放到新结点的数据域中,然后将新结点插入到当前链表的表头,即头结点之后 ...
- java实现单链表的建立(头插法和尾插法)
单链表 单链表(Single Linked List): 单链表是一种链式存取的数据结构,用一组地址任意(可能连续,也可能不连续)的存储单元存放线性表中的数据元素. 链表中的数据是以结点来表示的,每个 ...
- 头插法和尾插法建立带头节点的单链表
有两种方法建立单链表,尾插法和头插法,他们的区别是:头插法是按照输入元素倒序建立,为尾插法为顺序插入,并且多一个尾节点,我们一般使用尾插法. 一.头插法 代码为: pCurr -> next = ...
- c语言 链表建立头插法尾插法,单链表的创建(头插法和尾插法)
单链表的创建分为头插法和尾插法,头插法是不断地向头结点插入新的结点.这样会使你所插入的结点值呈现逆序,所以头插法也可以实现单链表的逆置.尾插法是不断地向插入的新元素之后再插入新的元素.需要注意的是头插 ...
- C语言头插法尾插法创建单链表
前言 链表 [Linked List]:链表是由一组不必相连[不必相连:可以连续也可以不连续]的内存结构 [节点],按特定的顺序链接在一起的抽象数据类型. 下面介绍单链表的创建: 创建节点 链表是由一 ...
- 单链表的头插法尾插法及删除节点操作
带头节点的单链表的头插法尾插法及删除节点操作 链表的操作对于初学者来说理解非常有难度,初学的同学们应该在学习链表的过程中多再练习本上画图,写一行代码就画出代码执行后链表各节点图的变化,方便理解.我也是 ...
- 数据结构学习(二)——单链表的操作之头插法和尾插法创建链表
http://blog.csdn.net/abclixu123/article/details/8210109 链表也是线性表的一种,与顺序表不同的是,它在内存中不是连续存放的.在C语言中,链表是通过 ...
- 单链表的头插法和尾插法c语言实现
/*单链表的头插法和尾插法c语言实现*/ #include <stdio.h> #include <stdlib.h> #include <string.h> #d ...
- 单链表头插法和尾插法
1.头插法 头插法:每次把新节点插入到头节点之后,创建的单链表和数据输入顺序相反. 防止单链表是空的而设的. 当链表为空的时候,带头结点的头指针就指向头结点,头结点的指针域存储的数值为NULL. &l ...
- C语言的单链表创建:头插法/尾插法
文章目录 前言 链表头插法 链表尾插法 源码实现 前言 接下来一段时间,将对数据结构进行复习,总的来说数据结构自大学之后忘记得有点吓人,为了防止脑容量本就小得脑袋更小,必须得持续性得温故了. 链表数据 ...
最新文章
- docker私有仓库harbor配置helm chart仓库(安装helm chart插件)
- C++学习笔记-----std::string的=,+,+=对int,char类型操作数的支持
- [Head First Java] - 给线程命名
- jzoj2679-跨时代【背包,dfs,状压】
- C语言笔试两题,有坑
- c语言将pwd结果赋给变量,《网络系统管理linux实训》全套PPT电子课件教案-第4章 shell编程.ppt...
- linux安装pytorch-GPU版本
- go语言 panic
- w10计算机字体怎么设置在哪里设置,如何设置修改win10系统电脑的显示字体
- Android 支付宝小程序跳转
- Camera Link协议解析图文及视频
- 数组分为两部分,使得其和相差最小
- 既是老师又是师兄的临别箴言
- GPS之MTK平台代码小结以及gps协议注释
- 电商平台促销方式汇总
- java的单行注释符是_Java 程序中的单行注释符是( ),多行注释符是( )_学小易找答案...
- Word:外国人中文译名中间的“点”怎么输入
- 命令行连接MySQL报错:mysql: [Warning] Using a password on the command line interface can be insecure
- winform 中自定义有透明度的panel,可用于加载遮盖层
- 想要完美蜕变就来广州传智播客平面UI设计培训机构
热门文章
面说一下如果用C语言建立单链表,分为头插法和尾插法两种. 采用头插法建立单链表 该方法从一个空表开始,生成新结点,并将读取到的数据存放到新结点的数据域中,然后将新结点插入到当前链表的表头,即头结点之后 ...
单链表 单链表(Single Linked List): 单链表是一种链式存取的数据结构,用一组地址任意(可能连续,也可能不连续)的存储单元存放线性表中的数据元素. 链表中的数据是以结点来表示的,每个 ...
有两种方法建立单链表,尾插法和头插法,他们的区别是:头插法是按照输入元素倒序建立,为尾插法为顺序插入,并且多一个尾节点,我们一般使用尾插法. 一.头插法 代码为: pCurr -> next = ...
单链表的创建分为头插法和尾插法,头插法是不断地向头结点插入新的结点.这样会使你所插入的结点值呈现逆序,所以头插法也可以实现单链表的逆置.尾插法是不断地向插入的新元素之后再插入新的元素.需要注意的是头插 ...
前言 链表 [Linked List]:链表是由一组不必相连[不必相连:可以连续也可以不连续]的内存结构 [节点],按特定的顺序链接在一起的抽象数据类型. 下面介绍单链表的创建: 创建节点 链表是由一 ...
带头节点的单链表的头插法尾插法及删除节点操作 链表的操作对于初学者来说理解非常有难度,初学的同学们应该在学习链表的过程中多再练习本上画图,写一行代码就画出代码执行后链表各节点图的变化,方便理解.我也是 ...
http://blog.csdn.net/abclixu123/article/details/8210109 链表也是线性表的一种,与顺序表不同的是,它在内存中不是连续存放的.在C语言中,链表是通过 ...
/*单链表的头插法和尾插法c语言实现*/ #include <stdio.h> #include <stdlib.h> #include <string.h> #d ...
1.头插法 头插法:每次把新节点插入到头节点之后,创建的单链表和数据输入顺序相反. 防止单链表是空的而设的. 当链表为空的时候,带头结点的头指针就指向头结点,头结点的指针域存储的数值为NULL. &l ...
文章目录 前言 链表头插法 链表尾插法 源码实现 前言 接下来一段时间,将对数据结构进行复习,总的来说数据结构自大学之后忘记得有点吓人,为了防止脑容量本就小得脑袋更小,必须得持续性得温故了. 链表数据 ...