介绍
这篇文章主要讲解了c++如何实现静态链表,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。
<强>一、动态链表和静态链表区别:强>
(1)动态链表:
(2)静态链表:,,,,,,应用:二叉树
<强>二、思路:强>
1。结点设置:T数据;
,,,,,,,,,,,,,,,,,,,,, int联系;
2 .链表要用一个铁砧来保存可分配空间的首地址;
3。初始化:引入头结点:elem [0];
,,,,,,,,,,,,,,,,,,头结点先指向空NULL,用1表示,
,,,,,,,,,,,,,,,,,,铁砧存储空分配的空间的首地址1;
,,,,,,,,,,,,,,,,,,然后让其它可分配空间的结点的链接指向坐标大一的结点;
<强>三,实现程序:强>
的ifndef StaticList_h #定义StaticList_h const int最大尺寸=100;//静态链表大小 模板& lt;类T> struct SLinkNode { T数据;//结点数据 int链接;//结点链接指针 }; 模板& lt;类T> 类StaticList { 公众: 空白InitList ();//初始化 int长度();//计算静态链表的长度 int搜索x (T);//在静态链表中查找具有给定值的结点 int定位(int i);//在静态链表中查找我第个结点 bool附加x (T);//在静态链表的表尾追加一个新结点 bool插入(int i T x);//在静态链表第i个结点后插入新结点 bool删除(int i);//在静态链表中释放我第个结点 bool isEmpty ();//判链表空否? 私人: SLinkNodeelem(最大尺寸); int绒毛蛋白样蛋白;//当前可分配空间首地址 }; 模板& lt;类T> 空白StaticList int StaticList int StaticList 搜索::x (T) {//在静态链表中查找具有给定值的结点 int p=elem [0] . link;//指针p指向链表第一个结点 而(p !=1){//逐个结点检测查找给定的值 如果(elem [p]。data=https://www.yisu.com/zixun/=x) 打破; 其他的 p=elem [p] . link; } 返回p; } 模板<类T> int StaticList ::定位(int i) {//在静态链表中查找我第个结点 如果(我<0)//参数不合理 返回1; 如果(i==0) 返回0; int j=1, p=elem [0] . link; 而(p !=1 & & j <我){//循链查找第我号结点 p=elem [p] . link; + +; } 返回p; } 模板<类T> bool StaticList ::附加x (T) {//在静态链表的表尾追加一个新结点 如果(铁砧==1)//没有分配到存储空间 返回错误; int q=绒毛蛋白样蛋白;//分配结点 铁砧=elem[铁砧]. link;//指向下一个可分配的结点 elem[问]。数据=x; elem[问]。链接=1; int p=0;//查找表尾 而(elem [p]。链接!=1) p=elem [p] . link; elem [p]。链接=问;//追加 返回true; } 模板<类T> bool StaticList ::插入(int i T x) {//在静态链表第i个结点后插入新结点 int p=定位(我); 如果(p==1)//找不到结点 返回错误; int q=绒毛蛋白样蛋白;//分配结点 铁砧=elem[铁砧]. link; elem[问]。数据=x; elem[问]。链接=elem [p] . link;//链入 elem [p]。链接=问; 返回true; } 模板<类T> bool StaticList ::删除(int i) {//在静态链表中释放我第个结点 int p=定位(张); 如果(p==1)//找不到结点 返回错误; int q=elem [p] . link;//第我号结点 elem [p]。链接=elem[问]. link; elem[问]。链接=绒毛蛋白样蛋白;//释放,让问的链接指向原可分配的结点 铁砧=问;//铁砧指向q 返回true; } 模板<类T> bool StaticList :: isEmpty () {//判链表空否? 如果(elem [0]。链接==1) 返回true; 返回错误; } # endif/* StaticList_h */ c++如何实现静态链表