⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 用C语言写的一个菜单程序
💻 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(&current_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 + -