网站设计类型焊工培训技术学校
web/
2025/9/27 12:32:21/
文章来源:
网站设计类型,焊工培训技术学校,阿里云网站建设教程视频,下载手机app软件前言#xff1a;本节内容主要了解链表的基本概念及特点#xff0c;以及能够通过数组模拟学会链表的几种基本操作#xff0c;下一节我们将通过STL模板完成链表操作#xff0c;可以通过专栏进入查看下一节哦~ 目录
单链表及其特点
完整链表构成
完整链表简述
创建单链表 … 前言本节内容主要了解链表的基本概念及特点以及能够通过数组模拟学会链表的几种基本操作下一节我们将通过STL模板完成链表操作可以通过专栏进入查看下一节哦~ 目录
单链表及其特点
完整链表构成
完整链表简述
创建单链表
定义节点存储结构
尾插法插入元素
遍历并显示链表内容
头插法插入元素
向链表中插入元素
删除元素
查找元素
链表基本操作完整代码 单链表及其特点
链表的种类较多这里我们主要讲解最常见的带头结点的单链表。
单链表是一种链式存取的数据结构用一组地址任意的存储单元存放线性表中的数据元素。 如图所示链表中每个数据的存储都由以下两部分组成
1.数据元素本身其所在的区域称为数据域
2.指向直接后继元素的指针所在的区域称为指针域
完整链表构成
1.头结点头节点是一个不存储任何数据的结点是为了方便找到链表位置。
2.首元结点它是链表中称第一个存有数据的节点为首元结点称呼没有实际意义。
3.其他结点链表中其他的结点。
完整链表简述 注意链表中有头结点时头指针指向头结点反之若链表中没有头结点则头指针指向首元结点。
简单的来说链表就像一环扣一环的链子一样当你想插入删除元素的时候只需要找到你要插入或者删除的位置然后解开该位置两边的环然后将新的环连接上即可。
由于链表的特殊结构决定了它拥有一个数组所没有的优势那就是进行插入删除操作的时候不需要移动元素。但是缺点就是查找元素需要从头结点开始一个一个往后找。
创建单链表
单链表在创建的时候需要先声明结点方可创建链表即向链表中插入元素。插入元素时又可分为头插法和尾插法。头插法和尾插法的区别后面会通过结果展示出来。
头插法在头结点之后插入数据其特点是读入的数据顺序与线性表的逻辑顺序正好相反可用来实现倒序输出一个元素序列。
尾插法将每次插入的新结点放在链表的尾部。
定义节点存储结构
struct Node
{int data; //保存节点中存储的数据Node *next; //指向下一结点
};
尾插法插入元素
void Wcreate(Node *l,int n) //尾插法向链表中插入n个数字
{Node *p,*r; //p用来指向新生成的结点。r始终指向l的终端结点。rl; //r指向了头节点此时的头节点也是终端节点int k;for(int i0;in;i) {cink;pnew Node; //为结点分配空间p-datak; //将数值存入新结点r-nextp; //接受新的结点rp; //r指向终端结点}r-nextNULL; //l的终端结点指针域为NULLl建立完成
}
遍历并显示链表内容
void show(Node *l)
{Node *p;pl-next;while(p!NULL){coutp-data ;pp-next;}coutendl;
}
头插法插入元素
void Tcreate(Node *l,int n) //头插法向链表中插入n个数字
{Node *p; //p用来指向新生成的结点l-nextNULL;int k;for(int i0;in;i) {cink;pnew Node; //为结点分配空间p-datak; //将数值存入新结点p-nextl-next; //将l指向的地址赋值给p;l-nextp; //头指针的指针域next指向p结点使得p成为开始结点。}
} 向链表中插入元素
void insert(Node *l,int k,int e)//在第k个位置后插入元素e;
{Node *p,*r;rl;if(r-nextNULL) cout链表为空;for(int i0;ik;i) //找到第k个位置之前的那个位置rr-next;pnew Node; //为新结点申请空间p-datae;p-nextr-next;r-nextp;
} 删除元素
void Delete(Node *l,int x) //删除第一个值为x的数。
{Node *r,*pre;prel; //记录前驱结点防止断链rl-next;while(r-data!x){prer; //记录该结点前一个结点rr-next;}pre-nextr-next; //将其前驱next指向其后继实现删除
} 查找元素
//查找值为X的数是否存在在则输出第一次出现的位置。
void Search(Node *l,int x) {int k1; //记录位置Node *p;pl-next;while(p-data!xp-next!NULL) {pp-next;k;}if(p-data!x) cout未找到endl;else cout是第k个数字endl;
}
链表基本操作完整代码
#includeiostream
using namespace std;
struct Node
{int data; //保存结点中存储的数据Node *next; //指向下一结点
};void Wcreate(Node *l,int n) //尾插法向链表中插入n个数字
{Node *p,*r; //p用来指向新生成的节点。r始终指向l的终端节点。rl; //r指向了头节点此时的头节点也是终端节点int k;for(int i0;in;i) {cink;pnew Node; //为节点分配空间p-datak; //将数值存入新节点r-nextp; //接受新的节点rp; //r指向终端节点}r-nextNULL; //l的终端节点指针域为NULLl建立完成
}void Tcreate(Node *l,int n) //头插法向链表中插入n个数字
{Node *p; //p用来指向新生成的结点l-nextNULL;int k;for(int i0;in;i) {cink;pnew Node; //为结点分配空间p-datak; //将数值存入新结点p-nextl-next; //将l指向的地址赋值给p;l-nextp; //头指针的指针域next指向p结点使得p成为开始结点。}
}void show(Node *l)
{Node *p;pl-next;while(p!NULL){coutp-data ;pp-next;}coutendl;
}void Search(Node *l,int x) //查找第一个值为X的数是否存在。
{int k1; //记录位置Node *p;pl-next;while(p-data!xp-next!NULL){pp-next;k;}if(p-data!x) cout未找到endl;else cout是第k个数字endl;
}int main()
{Node *L; //数据第一个数字位置是0Lnew Node;L-nextNULL;int n,x,m;cinn;Wcreate(L,n);cout尾插法插入结果;show(L);/*Tcreate(L,n);cout头插法插入结果;show(L);cout\n请输入插入的位置及元素值endl;cinmx;Insert(L,m,x);show(L);cout\n请输入要删除的数值endl;cinx;Delete(L,x);show(L);*/cout\n请输入要查找的数值endl;cinx;Search(L,x);return 0;
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/82767.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!