实验四:用可重用的链表模块来实现命令行菜单小程序V2.5
2017-10-13 19:57
405 查看
【网易云课堂昵称 :风清扬pty + 《软件工程(C编码实践篇)》MOOC课程作业http://mooc.study.163.com/course/USTC-1000002006 】
主要代码
首先,link.h定义了链表和节点,以及函数的接口。
然后是实现这些函数,在link.c中,以下为添加节点代码,其余类似
主函数所在的menu.c
二.实验总结
![](https://img-blog.csdn.net/20171013200131301?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcmZtZDIwMTc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20171013200331503?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcmZtZDIwMTc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
一.实验思路
这次实验主要是加入了链表的操作。把每一个命令设为一个节点,链接成一个链表。主要代码
首先,link.h定义了链表和节点,以及函数的接口。
#ifndef _LINK_TABLE_H #define _LINK_TABLE_H #define FAILURE -1 #define SUCCESS 0 typedef struct link_table_node { struct link_table_node* ptr_next; } link_table_node; typedef struct link_table { link_table_node* ptr_head; int sum_of_nodes; } link_table; link_table* creat_link_table(); int delete_link_table(link_table* ptr_link_table); int add_link_table_node(link_table* ptr_link_table, link_table_node* ptr_node); int del_link_table_node(link_table* ptr_link_table, link_table_node* ptr_node); link_table_node* get_link_table_head(link_table* ptr_link_table); link_table_node* get_next_link_table_node(link_table* ptr_link_table, link_table_node* ptr_node); #endif
然后是实现这些函数,在link.c中,以下为添加节点代码,其余类似
int add_link_table_node(link_table* ptr_link_table, link_table_node* ptr_node) { if (ptr_link_table == NULL || ptr_node == NULL) //如果为空,返回出错 { return FAILURE; } ptr_node->ptr_next = NULL; if (ptr_link_table->ptr_head == NULL) //如果头为空,添加为头节点 { ptr_link_table->ptr_head = ptr_node; } else { link_table_node* ptr = ptr_link_table->ptr_head; while(ptr->ptr_next != NULL) //遍历到链表尾部 { ptr = ptr->ptr_next; } ptr->ptr_next = ptr_node; } ptr_link_table->sum_of_nodes += 1; return SUCCESS; }
主函数所在的menu.c
#include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <string.h> #include "link_table.h" #define CMD_NUM 10 #define CMD_MAX_LEN 128 #define CMD_ANNO_LEN 1024 typedef struct data_node { link_table_node* next; char* cmd_name; char* cmd_annotation; int (*handler)(); } data_node; int init_menu(link_table** pp_table); data_node* search_cmd(link_table* head, char* cmd); int show_all_cmd(link_table* head); int cmd_help(); int cmd_version(); int cmd_quit(); int cmd_others(); link_table* head = NULL; int main(void) { char cmd[CMD_MAX_LEN]; init_menu(&head); while (true) { printf("please input your command > "); scanf("%s", cmd); data_node* ptr = search_cmd(head, cmd); if (ptr == NULL) { printf("ERROR command: '%s'\n", cmd); continue; } printf("%s\n", ptr->cmd_annotation); if (ptr->handler != NULL) { ptr->handler(); } } return 0; }
二.实验总结
链表的操作原理比较简单,但很容易出错。希望在老师的带领下继续努力深入学习不断进步。
![](https://img-blog.csdn.net/20171013195947619?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcmZtZDIwMTc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
相关文章推荐
- 软件工程(C编码实践篇) 实验四:用可重用的链表模块来实现命令行菜单小程序V2.5
- 实验四:用可重用的链表模块来实现命令行菜单小程序V2.5
- 实验四:用可重用的链表模块来实现命令行菜单小程序V2.5
- 文章标题 实验四:用可重用的链表模块来实现命令行菜单小程序V2.5
- [高级软件工程实验]用可重用的链表模块来实现命令行菜单小程序V2.5
- 实验四:用可重用的链表模块来实现命令行菜单小程序V2.5
- 软件工程(C编码实践篇)”实验报告 实验四:用可重用的链表模块来实现命令行菜单小程序V2.5
- 实验四:用可重用的链表模块来实现命令行菜单小程序V2.5
- 实验四:用可重用的链表模块来实现命令行菜单小程序V2.5
- 实验四:用可重用的链表模块来实现命令行菜单小程序V2.5
- 实验报告四:用可重用的链表模块来实现命令行菜单小程序V2.5
- “软件工程(C编码实践篇)”实验报告【实验四:用可重用的链表模块来实现命令行菜单小程序V2.5】
- 实验四:用可重用的链表模块来实现命令行菜单小程序V2.5
- 用可重用的链表模块来实现命令行菜单小程序V2.5
- 实验四:用可重用的链表模块来实现命令行菜单小程序
- 用可重用的链表模块来实现命令行菜单小程序V2.5
- 学习之路——用可重用的链表模块来实现命令行菜单小程序V2.5
- 实验五:用callback增强链表模块来实现命令行菜单小程序V2.8
- 实验五:用callback增强链表模块来实现命令行菜单小程序V2.8
- 实验五:用callback增强链表模块来实现命令行菜单小程序V2.8