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

题目

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

代码

#include 
#include 
#include 

// 菜单项结构体
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;
}

你可能感兴趣的:(数据结构,c语言,算法)