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

文章描述了一个使用C语言实现的多级菜单系统,通过定义菜单项结构体、创建和添加子菜单、以及递归打印菜单的方法,展示了如何构建并展示复杂的数据结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

参考手机设置菜单,设计多级菜单的数据结构,并将菜单内容打印出来。例如:
|[菜单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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_WAWA鱼_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值