数组vs链表
数组的优点是可以根据索引值快速查询某一个元素,而链表要从头结点一一查询才能查询到想要的结点
链表的优点是插入和删除结点很方便,适合于频繁插入和删除的情况,而数组长度固定空间不够时需要重新定义数组
根据OLED多级菜单的特点:需要频繁的增加子菜单,删除子菜单,且查询的时候是从父菜单开始一层一层的向下查询因此不需要数组那样根据索引值快速查询,因此选用链表这个数据结构,进而考虑到父菜单可以翻到子菜单,同时子菜单又能回退到父菜单因此采用双向链表的形式
如何显示隐藏菜单
首先定义变量记录第一个位置的菜单项的索引值FirstPositionIndex,然后从这个索引值开始依次显示4个菜单项,这样即便是有隐藏菜单也能显示出来
1 for(uint8_t i=0;i<(nowMenu->MenuProperty->MenuLen-nowMenu->MenuProperty->HiddenMenuLen);i++) 2 { 3 OLED_ShowString(8,i*16,nowMenu[i+FirstPositionIndex].DisplayString,16); 4 }