排序模板链表的插入存储和二分查找

排序模板链表的插入存储和二分查找
  在汇编工具中,需要将宏定义以链表的形式存储起来并进行二分查找。同时,像指令和函数内部标示因为具有先后顺序仅进行尾插和顺序遍历。之前对算法的设计进行过总结,本文主要就实现上进行梳理。
  由于宏定义和指令所需储存的属性不同,但都用链表管理,所以实现时使用模板链表。另一方面,宏定义需要排序插入和二分查找,而指令仅需尾插和顺序遍历,顾需要两种不同的链表操作,实现时通过继承来建立simple和sort链表。
  模板链表结点templatelistnodeclass是一个模板类,具有一个范型node,如下

  链表templatelist有表头和当前结点的node范型指针和记录链表长度的listlength,由于需要插入排序和尾插,实现了两种增加节点的方法。如下

    排序模板链表sorttemplatelist,继承templatelist,为了实现二分查找,添加了一个范型node指针数组,方法上实现插入排序,链表转数组方法,二分查找方法等。由于二分查找的比较过程和范型传入的类型有关,因此建立虚函数,供子类按照处理的类型重载。如下

  宏定义/全局变量类,marcoandglobalinfoclass,首先定义数据结构,这里使用结构体实现,用类同样可以。结构体命名为marcoandglobalinfostr。实现中,将此结构体填入所有的范型中,为了方便管理,利用define定义了宏定义typename 为 marcoandglobalinfostr,还需要重载sorttemplatelist中的二分查找的对比函数,根据实际使用的结构体属性来比较。如下图

simpletemplatelist和sorttemplatelist相思,只是插入方法和查找方法不同,实现上大同小异。
  总结一下,首先使用模板链表建立了链表基类templatelist,子类sorttemplatelist和simpletemplatelist在继承的基础上实现插入和查找方法,由于查找中的比对方法与实际结构体有关,因此建立虚函数以便子类按照自身的结构实现。总的来说,设计上比较直观,实现上也清晰,明了。就是链表的处理每次while完还要处理最后一个节点,使代码有点冗余,看能不能改进。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值