📄 main.c
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>#include "menu.h"typedef struct pair { Node * parent; Node * child;}Pair;static Node * MakeNode(const Item * pm);static void AddNode(Node * new_node ,Node * current_node, Node * root);static bool CompareItem(Item * i1, Item * i2);//初始化菜单void InitializeMenu(Menu * pmenu){ pmenu -> root; pmenu -> size = 0;}//确定菜单是否为空bool MenuIsEmpty(Menu * pmenu){ if(pmenu -> root == NULL) return true; else return false;}// 确定菜单是满void MenuIsFull(const Menu * pmenu){ if(pmenu -> size == MAXMENU) return true; else return false;}//返回菜单数void MenuItemCount(const Menu * pmenu){ return pmenu -> size;}//添加菜单bool AddItem(const Item * pm,const Item * current_item,char * ch,Menu * pmenu){ Node * new_node; if(MenuIsFull(pmenu)){ fprintf(stderr,"Menu is full\n"); return false; } //查找是否有重复菜单 if(SeekItem(pm,pmenu).child != NULL){ fprintf(stderr,"Attemped to add duplicate item\n"); return false; } //创建新的节点 new_node = MakeNode(pm); if(new_node == NULL){ fprintf(stderr,"Couldn't create node\n"); return false; } //菜单数加一 pmenu -> size++; // 添加新节点到菜单 if(pmenu -> root == NULL) pmenu -> root = new_node; else AddNode(new_node,current_item,ch,pmenu -> root,); return true;}//在菜单中查找用户指定的节点 , 如果找到返回找到的节点, 否则返回NULL//递归的方法实现,不建议使用static void FindNode(Item * current_item , Node * root,Pair * pair){ if(CompareItem(current_item ,&root -> item)){ //pair -> parent = & root; pair -> child = root; }else { if(root -> y != NULL) FindNode(current_item , root -> y,pair); if(root -> x != NULL) FindNode(current_item , root -> x,pair); }}//创建新节点static Node * MakeNode(const Item * pm){ Node * new_node; new_node = (Node *)malloc(sizeof(Node)); if(new_node != NULL){ //实现的代码涉及到数据类型,不好的代码 strcpy(new_node -> item.name , pm -> name); new_node -> x = NULL; new_node -> y = NULL; } return new_node;}//在菜单中添加节点static void AddNode(Node * new_node ,Node * current_node, char * ch ,Node * root){ Pair look; look.parent = NULL; look.child = NULL; FindNode(¤t_node -> item , root , & look) if(look.child != NULL) if(ch == 'Y'){ while(look.child -> y != NULL) look.child = look.child -> y; look.child -> y = new_node ; } if(ch == 'X'){ while(look.child -> x != NULL) look.child = look.child -> x; look.child -> y = new_node ; }}//节点的项目是否相等static bool CompareItem(Item * i1, Item * i2){ if(strcmp( i1 -> name ,i2 -> name ) == 0) return true; else return false;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -