实验四:用可重用的链表模块来实现命令行菜单小程序V2.5

实验目录

实验要求
实验过程
实验总结

实验要求

  • 用可重用的链表模块来实现命令行菜单小程序,执行某个命令时调用一个特定的函数作为执行动作;

  • 链表模块的接口设计要足够通用,命令行菜单小程序的功能保持不变;

  • 可以将通用的Linktable模块集成到我们的menu程序中;

  • 接口规范;


实验过程

1.创建lab4文件夹

2.编写代码,建立linkTable.h、linkTable.c、menu.c文件
linkTable.h

linkTable.c 这里代码太多截图不好看,直接粘贴代码
 
  #include<stdlib.h>#include<stdio.h>
  #include"linkTable.h"
  tLinkTable *CreateLinkTable()
  {
  tLinkTable *pLinkTable = (tLinkTable*)malloc(sizeof(tLinkTable));
  if(pLinkTable == NULL)
  {
  return NULL;
  }
  pLinkTable->pHead = NULL;
  pLinkTable->pTail = NULL;
  pLinkTable->SumOfNode = 0;
  return pLinkTable;
  }
  int DeleteLinkTable(tLinkTable * pLinkTable)
  {
  if(pLinkTable==NULL)
  {
  return FAILURE;
  }
  while(pLinkTable->pHead != NULL)
  {
  tLinkTableNode *tmp = pLinkTable->pHead;
  pLinkTable->pHead = pLinkTable->pHead->pNext;
  free(tmp);
  }
  pLinkTable->pHead = NULL; pLinkTable->pTail = NULL; pLinkTable->SumOfNode = -1;
  free(pLinkTable); return SUCCESS;
  }
  int AddLinkTableNode(tLinkTable * pLinkTable,tLinkTableNode * pNode)
  {
  tLinkTableNode *p=NULL;
  tLinkTableNode *temp=NULL;
  p=pLinkTable->pHead;
  if(p == NULL)
  { pLinkTable->pHead=pNode;
  pLinkTable->pTail=pNode;
  pLinkTable->SumOfNode++;
  pNode->pNext=NULL;
  return 0;
  }
  pLinkTable->pTail->pNext=pNode;
  pLinkTable->pTail=pNode;pNode->pNext=NULL;
  pLinkTable->SumOfNode++;
  return 0;
  }
  int DeleteLinkTableNode(tLinkTable * pLinkTable,tLinkTableNode *pNode)
  {
  tLinkTableNode * p;
  p=pLinkTable->pHead;
  if(pLinkTable->pHead == NULL)
  {
  return 0;
  }
  if(pLinkTable->pHead == pLinkTable->pTail && pLinkTable->pHead != NULL)
  {
  free(pNode);
  pLinkTable->pHead=NULL;
  pLinkTable->pTail=NULL;
  pLinkTable->SumOfNode--;
  return 0;
  }
  if(pLinkTable->pHead != pLinkTable->pTail && pLinkTable->pTail == pNode)
  {
  free(pNode);
  while(p->pNext != NULL)
  {
  p=p->pNext;
  }
  pLinkTable->pTail=p;
  p->pNext=NULL;
  pLinkTable->SumOfNode--;
  return 0;
  }
  if(pLinkTable->pHead != pLinkTable->pTail && pLinkTable->pHead == pNode)
  { pLinkTable->pHead=pLinkTable->pHead->pNext;
  free(pNode); pLinkTable->SumOfNode--;
  return 0;
  } else {
  while(p->pNext != pNode);
  { p=p->pNext;
  }
  p->pNext=p->pNext->pNext; pLinkTable->SumOfNode--; return 0;
  }
  }
  tLinkTableNode * GetLinkTableHead(tLinkTable * pLinkTable)
  {
  return pLinkTable->pHead;
  }
  tLinkTableNode * GetNextLinkTableNode(tLinkTable * pLinkTable,tLinkTableNode * pNode)
  {
  return pNode->pNext;
  }
  tDataNode* FindCmd(tLinkTable * head,char * cmd)
  {
  tDataNode *p=(tDataNode *)GetLinkTableHead(head);
  if(head == NULL || cmd == NULL)
  {
  return NULL;
  }
  while(p != NULL)
  {
  if(strcmp(p->cmd,cmd) == 0)
  {
  return p;
  }
  p=(tDataNode *)GetNextLinkTableNode(head,(tLinkTableNode *)p);
  }
  return p;
  }
  int ShowAllCmd(tLinkTable * head)
  {
  tDataNode *p=NULL;
  printf("Menu list:\n");
  p=(tDataNode *)head->pHead;;
  while(p != NULL)
  {
  printf("%s:\t %s\n",p->cmd,p->desc);
  p=(tDataNode *)p->pNext;
  }
  return 0;
  }
menu.c





3.运行结果

4.提交到github 地址为:https://github.com/daipenguin/learngit/tree/master/lab4

实验总结

在menu.c中直接调用链表模块,通过复用链表来实现程序所需的各种功能。完成的过程很复杂,学习到了很多,特别是要重新定义链表节点的数据结构,而且在调用时要注意进行类型的转换。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值