C++ 单链表的基本算法
2016-01-04 22:10
330 查看
线性表是最简单,最常用的一种数据结构。线性表的逻辑结构是n个数据元素的有限序列(a1,a2,…,an)。而线性表的物理结构,我们已经学习过顺序表,也就是数组 ;另一种线性表的物理结构——链表 。
typedef int Datatype; //节点的数据为整型
struct node
{
Datatype info;//节点的数据信息
node *link;
//指向下一个节点的指针,是结构自身的指针类型,决不能是结构自身类型
};
◆ 2、由节点形成单链表
单链表的第一个节点首先通过new运算获得,并用链表的表头指针head指向, head在使用中必须妥善保存,千万不可丢失,否则单链表整个丢失,内存也发生泄漏。
……//有关node的声明,见上段代码
node *head;
head=new node;
//第一个节点的数据不赋值,则该节点仅作head
head->link=NULL;//指针初始化
单链表后面的节点可以通过插入与删除来维护:只要改变链中节点指针的指向,而无需移动表中的元素,就能实现插入和删除操作。
新插入节点作为单链表的第一个结点;
也有可能新插入节点是中间节点;
也有可能新插入节点作为最后一个节点。
首先要先产生新节点:
……//有关node的声明
node *newone;
newone=new node;
newone->info=13;//给该节点的数据赋值
newone->link=NULL;//指针初始化
◆ 1、新节点插在链首
//注意:链表操作次序非常重要
……//node、head、newone的声明及定义,见上面
newone->link=head->link;
Head->link=newone;//注意指针赋值
◆ 2、新节点插在单链表中间
首先用工作指针p找到指定节点,而让指针q指向紧跟其后的节点;新节点插在p、q之间;
node *p,*q;
……//此段代码实现:利用查找算法将p定位在指定节点(稍后将学习)
q=p->link; //注意指针赋值
newone->link=q;
//或newone->link=p->link;这样就不需要q了
p->link=newone;
如有问题,欢迎和我联系。 我的邮箱 cq20151207@163.com
什么是单链表
单链表(Singly Linked list)也称线性链表。每个元素占用一个节点(Node)。一个节点至少包含两个域,一个域存放数据信息info,其数据类型由应用问题决定,另一个存放指向该链表中下一个节点的指针link。单链表的c++实现思路
◆ 1、单链表节点的数据类型typedef int Datatype; //节点的数据为整型
struct node
{
Datatype info;//节点的数据信息
node *link;
//指向下一个节点的指针,是结构自身的指针类型,决不能是结构自身类型
};
◆ 2、由节点形成单链表
单链表的第一个节点首先通过new运算获得,并用链表的表头指针head指向, head在使用中必须妥善保存,千万不可丢失,否则单链表整个丢失,内存也发生泄漏。
……//有关node的声明,见上段代码
node *head;
head=new node;
//第一个节点的数据不赋值,则该节点仅作head
head->link=NULL;//指针初始化
单链表后面的节点可以通过插入与删除来维护:只要改变链中节点指针的指向,而无需移动表中的元素,就能实现插入和删除操作。
单链表的基本插入算法
现在已经存在单链表“head”,插新节点时考虑三种情况:新插入节点作为单链表的第一个结点;
也有可能新插入节点是中间节点;
也有可能新插入节点作为最后一个节点。
首先要先产生新节点:
……//有关node的声明
node *newone;
newone=new node;
newone->info=13;//给该节点的数据赋值
newone->link=NULL;//指针初始化
◆ 1、新节点插在链首
//注意:链表操作次序非常重要
……//node、head、newone的声明及定义,见上面
newone->link=head->link;
Head->link=newone;//注意指针赋值
◆ 2、新节点插在单链表中间
首先用工作指针p找到指定节点,而让指针q指向紧跟其后的节点;新节点插在p、q之间;
node *p,*q;
……//此段代码实现:利用查找算法将p定位在指定节点(稍后将学习)
q=p->link; //注意指针赋值
newone->link=q;
//或newone->link=p->link;这样就不需要q了
p->link=newone;
如有问题,欢迎和我联系。 我的邮箱 cq20151207@163.com
相关文章推荐
- C++基础知识总结
- C++模版-重载,嵌套
- C/C++之回调函数
- C语言中,头文件和源文件的关系(转)
- 第4讲C语言程序初体验-练习
- c#与c++交互
- c#与c++类型对应
- c/c++常见的排序算法
- 【C++ OpenGL ES 2.0编程笔记】4: 纹理贴图-图片叠加效果实现
- C++ 释放基类分配的内存(1)
- c++ 编译期与运行期总结
- C++的const类成员函数
- C++成员变量初始化
- 将C基于控制台的可执行程序右上角的红叉禁掉
- C语言中static详解
- hdoj2024C语言合法标识符
- C++命名空间里面定义变量出现重定义错误
- C++运行时类型识别
- 【c/c++】流插入运算符和流提取运算符重载
- Sicily.最简分数