使用c语言不使用二叉树实现树状菜单
时间: 2024-04-08 16:29:02 浏览: 65
在C语言中,您可以使用结构体和指针来实现树状菜单,而不使用二叉树。下面是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 树状菜单节点结构体
struct MenuItem {
char name[20];
struct MenuItem* child;
struct MenuItem* sibling;
};
// 创建新的菜单项
struct MenuItem* createMenuItem(const char* name) {
struct MenuItem* item = (struct MenuItem*)malloc(sizeof(struct MenuItem));
strcpy(item->name, name);
item->child = NULL;
item->sibling = NULL;
return item;
}
// 添加子菜单项
void addChild(struct MenuItem* parent, struct MenuItem* child) {
if (parent->child == NULL) {
parent->child = child;
} else {
struct MenuItem* sibling = parent->child;
while (sibling->sibling != NULL) {
sibling = sibling->sibling;
}
sibling->sibling = child;
}
}
// 打印树状菜单
void printMenu(struct MenuItem* root, int level) {
for (int i = 0; i < level; i++) {
printf(" ");
}
printf("- %s\n", root->name);
struct MenuItem* child = root->child;
while (child != NULL) {
printMenu(child, level + 1);
child = child->sibling;
}
}
int main() {
// 创建菜单项
struct MenuItem* root = createMenuItem("Root");
struct MenuItem* item1 = createMenuItem("Item 1");
struct MenuItem* item2 = createMenuItem("Item 2");
struct MenuItem* item3 = createMenuItem("Item 3");
struct MenuItem* item4 = createMenuItem("Item 4");
struct MenuItem* subitem1 = createMenuItem("Subitem 1");
struct MenuItem* subitem2 = createMenuItem("Subitem 2");
// 构建树状菜单结构
addChild(root, item1);
addChild(root, item2);
addChild(root, item3);
addChild(root, item4);
addChild(item2, subitem1);
addChild(item2, subitem2);
// 打印树状菜单
printMenu(root, 0);
// 释放内存
free(root);
free(item1);
free(item2);
free(item3);
free(item4);
free(subitem1);
free(subitem2);
return 0;
}
```
在这个示例中,我们使用了结构体`MenuItem`来表示每个菜单项。每个菜单项包含一个名称、一个指向其子菜单项的指针`child`,以及一个指向其兄弟菜单项的指针`sibling`。通过逐级添加子菜单项,我们可以构建一个树状菜单结构。最后,使用`printMenu`函数打印整个树状菜单。
请注意,在实际应用中,您可能需要进行错误处理和内存管理,以确保程序的健壮性和可靠性。这里的示例仅用于演示树状菜单的基本实现概念。
阅读全文