双向链表多级菜单设计c语言
时间: 2024-06-15 22:05:53 浏览: 282
双向链表多级菜单设计是一种常见的数据结构和算法应用,可以用于实现多级菜单的设计。在C语言中,可以通过定义结构体和使用指针来实现双向链表的设计。
首先,我们需要定义一个双向链表节点的结构体,包含菜单项的名称、指向上一级菜单的指针、指向下一级菜单的指针以及指向子菜单的指针。例如:
```c
typedef struct MenuItem {
char name[50];
struct MenuItem* prev;
struct MenuItem* next;
struct MenuItem* child;
} MenuItem;
```
接下来,我们可以编写一些函数来实现双向链表多级菜单的操作,包括创建菜单项、添加子菜单、添加兄弟菜单等。以下是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
MenuItem* createMenuItem(const char* name) {
MenuItem* item = (MenuItem*)malloc(sizeof(MenuItem));
strcpy(item->name, name);
item->prev = NULL;
item->next = NULL;
item->child = NULL;
return item;
}
void addChild(MenuItem* parent, MenuItem* child) {
if (parent->child == NULL) {
parent->child = child;
child->prev = NULL;
child->next = NULL;
} else {
MenuItem* lastChild = parent->child;
while (lastChild->next != NULL) {
lastChild = lastChild->next;
}
lastChild->next = child;
child->prev = lastChild;
child->next = NULL;
}
}
void addSibling(MenuItem* sibling, MenuItem* newSibling) {
sibling->next = newSibling;
newSibling->prev = sibling;
newSibling->next = NULL;
}
void printMenu(MenuItem* menu) {
MenuItem* currentItem = menu;
while (currentItem != NULL) {
printf("%s\n", currentItem->name);
if (currentItem->child != NULL) {
printMenu(currentItem->child);
}
currentItem = currentItem->next;
}
}
int main() {
MenuItem* menu = createMenuItem("Menu");
MenuItem* item1 = createMenuItem("Item 1");
MenuItem* item2 = createMenuItem("Item 2");
MenuItem* item3 = createMenuItem("Item 3");
addChild(menu, item1);
addChild(menu, item2);
addChild(menu, item3);
MenuItem* subItem1 = createMenuItem("Sub Item 1");
MenuItem* subItem2 = createMenuItem("Sub Item 2");
addChild(item1, subItem1);
addChild(item1, subItem2);
MenuItem* siblingItem = createMenuItem("Sibling Item");
addSibling(item3, siblingItem);
printMenu(menu);
return 0;
}
```
上述代码中,我们首先创建了一个名为"Menu"的菜单项,然后创建了三个子菜单项"Item 1"、"Item 2"和"Item 3",并将它们添加到"Menu"菜单项中。接着,我们创建了两个子菜单项"Sub Item 1"和"Sub Item 2",并将它们添加到"Item 1"菜单项中。最后,我们创建了一个兄弟菜单项"Sibling Item",并将它添加到"Item 3"菜单项后面。
通过调用printMenu函数,我们可以打印出整个菜单的结构。
希望以上内容能够帮助到你!如果有任何问题,请随时提问。
阅读全文
相关推荐







