设计多级菜单的数据结构(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;
}