当前位置: 首页 > article >正文

设计多级菜单的数据结构(C语言实现)

题目

参考手机设置菜单,设计多级菜单的数据结构,并将菜单内容打印出来。例如:
|[菜单1]
|–[菜单11]
|–|–(选项a)
|–I–(选项b)
|–[菜单12]
|–|–[菜单121]
|–I–|–(选项c)
|–|–|–(选项d)
|[菜单2]

代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 菜单项结构体
typedef struct MenuItem {
    char label[50];  
    struct MenuItem *next; 
    struct MenuItem *subMenu; 
} MenuItem;

// 创建新的菜单项
MenuItem* createMenuItem(const char *label) {
    MenuItem *newItem = (MenuItem*)malloc(sizeof(MenuItem));
    strcpy(newItem->label, label);
    newItem->next = NULL;
    newItem->subMenu = NULL;
    return newItem;
}

// 向菜单添加子菜单项
void addSubMenu(MenuItem *menu, MenuItem *subItem) {
    if (menu->subMenu == NULL) {
        menu->subMenu = subItem;
    } else {
        MenuItem *temp = menu->subMenu;
        while (temp->next != NULL) {
            temp = temp->next;
        }
        temp->next = subItem;
    }
}

// 打印菜单的递归函数
void printMenu(MenuItem *menu, int level) {
    // 打印菜单项的标签
    for (int i = 0; i < level; ++i) {
        printf("|--");
    }
    printf("[%s]\n", menu->label);

    // 打印子菜单
    if (menu->subMenu != NULL) {
        printMenu(menu->subMenu, level + 1);
    }

    // 打印同级菜单项
    if (menu->next != NULL) {
        printMenu(menu->next, level);
    }
}

int main() {
    // 创建菜单
    MenuItem *menu1 = createMenuItem("菜单1");
    MenuItem *menu11 = createMenuItem("菜单11");
    MenuItem *optionA = createMenuItem("选项a");
    MenuItem *optionB = createMenuItem("选项b");
    MenuItem *menu12 = createMenuItem("菜单12");
    MenuItem *menu121 = createMenuItem("菜单121");
    MenuItem *optionC = createMenuItem("选项c");
    MenuItem *optionD = createMenuItem("选项d");
    MenuItem *menu2 = createMenuItem("菜单2");

    // 构建菜单结构
    addSubMenu(menu1, menu11);
    addSubMenu(menu11, optionA);
    optionA->next = optionB;
    addSubMenu(menu1, menu12);
    addSubMenu(menu12, menu121);
    addSubMenu(menu121, optionC);
    optionC->next = optionD;

    // 打印菜单
    printMenu(menu1, 0);
    printMenu(menu2, 0);

    // 释放内存
    free(menu1);
    free(menu11);
    free(optionA);
    free(optionB);
    free(menu12);
    free(menu121);
    free(optionC);
    free(optionD);
    free(menu2);

    return 0;
}


http://www.kler.cn/a/152237.html

相关文章:

  • 论文阅读——DINOv
  • 数据探索:五款免费数据可视化工具概览
  • C++ 学习笔记——C++纯虚函数和抽象类
  • 【开源】基于Vue.js的医院门诊预约挂号系统的设计和实现
  • elasticsearch操作
  • Redis Lua沙盒绕过 命令执行(CVE-2022-0543)漏洞复现
  • List集合,遍历,数据结构
  • hive 偏门函数
  • 力扣labuladong——一刷day60
  • SCAUoj综合性实验
  • 【经验分享】openGauss 客户端(Data Studio / DBeaver)连接方式
  • RESTful API,以及如何使用它构建 web 应用程序
  • 性能测试:系统架构性能优化
  • echarts 地图
  • 串口更新app程序(参考他人资料)
  • RabbitMQ登录控制台显示--你与此网站的连接不是私密连接
  • EasyExcel生成多sheet页的excel
  • PyQt基础_011_对话框类控件QMessage
  • kubernetes(k8s)容器内无法连接同所绑定的Service ClusterIP问题记录
  • 指针(2)