打印
[应用相关]

如何通过链表实现菜单功能?

[复制链接]
194|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wahahaheihei|  楼主 | 2023-4-26 20:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这个话题有人懂吗

使用特权

评论回复
沙发
wahahaheihei|  楼主 | 2023-4-26 20:14 | 只看该作者
在STM32开发中,可以通过链表来实现菜单功能。链表是一种数据结构,它由若干个节点组成,每个节点都包含数据和指向下一个节点的指针。通过这种方式,可以构建一个动态的数据结构,实现灵活的菜单系统。

下面是一个使用链表实现菜单功能的示例代码:
#include "main.h"
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <iostream>

// 菜单节点
struct MenuItem
{
  const char* name;  // 节点名称
  MenuItem* next;    // 下一个节点的指针
  void (*function)();  // 节点功能函数的指针
};

// 菜单类
class Menu
{
public:
  Menu();
  void AddItem(const char* name, void (*function)());
  void Run();

private:
  MenuItem* mHead;
};

// 菜单构造函数
Menu::Menu()
  : mHead(nullptr)
{
}

// 添加菜单节点
void Menu::AddItem(const char* name, void (*function)())
{
  MenuItem* item = new MenuItem;
  item->name = name;
  item->function = function;
  item->next = mHead;
  mHead = item;
}

// 运行菜单系统
void Menu::Run()
{
  MenuItem* current = mHead;
  char input[32];

  // 遍历链表,打印菜单选项
  while (current != nullptr)
  {
    std::cout << current->name << std::endl;
    current = current->next;
  }

  // 等待用户输入选择
  std::cout << "Enter your choice: ";
  std::cin >> input;

  // 查找用户输入对应的菜单节点,并执行功能函数
  current = mHead;
  while (current != nullptr)
  {
    if (strcmp(current->name, input) == 0)
    {
      current->function();
      return;
    }
    current = current->next;
  }

  std::cout << "Invalid choice." << std::endl;
}

// 菜单功能函数1
void Function1()
{
  std::cout << "Function 1 executed." << std::endl;
}

// 菜单功能函数2
void Function2()
{
  std::cout << "Function 2 executed." << std::endl;
}

int main()
{
  // 初始化菜单
  Menu menu;
  menu.AddItem("function1", &Function1);
  menu.AddItem("function2", &Function2);

  // 运行菜单系统
  while (1)
  {
    menu.Run();
  }
}


使用特权

评论回复
板凳
wahahaheihei|  楼主 | 2023-4-26 20:15 | 只看该作者
在这个示例中,我们定义了一个MenuItem结构体,它包含了菜单节点的名称、下一个节点的指针和功能函数的指针。然后我们定义了一个Menu类,它包含了菜单链表的头指针,并提供了AddItem和Run函数来添加节点和运行菜单系统。在AddItem函数中,我们新建了一个MenuItem节点,并将其加入到链表头部。在Run函数中,我们遍历链表,打印菜单选项,等待用户输入选择,并查找用户输入选择对应的菜单节点,执行其功能函数。

使用特权

评论回复
地板
wahahaheihei|  楼主 | 2023-4-26 20:15 | 只看该作者
在主函数中,我们创建了一个Menu对象,并添加了两个菜单节点,每个节点分别对应一个功能函数。然后我们通过while循环不断运行菜单系统,等待用户输入选择并执行对应的功能函数。

当然,这只是一个简单的示例,实际的菜单系统可能要复杂得多。但使用链表来实现菜单系统可以使得菜单选项的增加和删除更加灵活,也更容易维护和扩展。同时,在使用C++的面向对象编程思想时,可以更好地封装和管理菜单系统的状态和行为。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

217

主题

3043

帖子

12

粉丝