企业链表模型——业务实体和底层链表算法分离
来源:互联网 发布:游戏编程语言培训班 编辑:程序博客网 时间:2024/06/16 00:18
LinkList.h:
#ifndef _MYLINKLIST_H_#define _MYLINKLIST_H_typedef void LinkList;typedef struct _tag_LinkListNode{struct _tag_LinkListNode *next;}LinkListNode;LinkList* LinkList_create();int LinkList_Length(LinkList* list);int LinkList_Insert(LinkList* list, LinkListNode* node, int pos);LinkListNode* LinkList_GetNode(LinkList* list, int pos);LinkListNode* LinkList_DeleteNode(LinkList* list, int pos);void LinkList_Destroy(LinkList* list);void LinkList_Clear(LinkList* list);#endif
LinkList.cpp:
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>#include "linklist.h"typedef struct _tag_LinkList{LinkListNode header;int length;}TLinkList;LinkList* LinkList_create() //创建链表{TLinkList *tmp = NULL;tmp = (TLinkList*)malloc(sizeof(TLinkList));if (tmp == NULL){return NULL;}memset(tmp, 0, sizeof(TLinkList));tmp->length = 0;tmp->header.next = NULL;return tmp;}int LinkList_Length(LinkList* list) //获取长度{TLinkList *tmp = NULL;tmp = (TLinkList*)list;if (tmp == NULL){return -1;}return tmp->length;}int LinkList_Insert(LinkList* list, LinkListNode* node, int pos) //插入节点{int i = 0;LinkListNode *current = NULL; //辅助指针变量TLinkList *tList = NULL;tList = (TLinkList*)list;if (list == NULL || node == NULL || pos < 0){return -1;}current = &(tList->header); //辅助指针变量初始化for (i = 0; i < pos; i++){current = current->next; //要求插入到3,原来的3变4,4变5}node->next = current->next;current->next = node;tList->length++;return 0;}LinkListNode* LinkList_GetNode(LinkList* list, int pos)//获取节点{int i = 0;LinkListNode *current = NULL;TLinkList *tList = NULL;tList = (TLinkList*)list;if (list == NULL || pos < 0){return NULL;}current = &(tList->header);for (i = 0; i < pos; i++){current = current->next; //链表带头结点}return current->next;}LinkListNode* LinkList_DeleteNode(LinkList* list, int pos)//删除节点{int i = 0;LinkListNode *current = NULL;LinkListNode *tmp = NULL; //缓冲要删除的节点TLinkList *tList = NULL;tList = (TLinkList*)list;if (list == NULL || pos < 0){return NULL;}current = &(tList->header);for (i = 0; i < pos; i++){current = current->next;}tmp = current->next;current->next = tmp->next;tList->length--;return tmp;}void LinkList_Destroy(LinkList* list) //销毁链表{if (list == NULL){return;}free(list);return;}void LinkList_Clear(LinkList* list) //清空链表{TLinkList *tList = NULL;tList = (TLinkList*)list;tList->header.next = NULL;tList->length = 0;return;}
LinkListMain:(测试框架)
#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<string.h>#include "linklist.h"typedef struct _Teacher{//优点:可以让多个实体共用一个链表模型,实现了 业务实体 和 链表算法 的分离。————提高代码复用率LinkListNode node; //写在结构体的第一项,node的地址就是Teacher的地址char name[32];int age;}Teacher;void main(){LinkList *list = NULL;int i = 0;Teacher t1, t2, t3, t4, t5, t6;t1.age = 11;t2.age = 22;t3.age = 33;t4.age = 44;t5.age = 55;t6.age = 60;list = LinkList_create();LinkList_Insert(list, (LinkListNode*)&t1, 0); LinkList_Insert(list, (LinkListNode*)&t2, 0);LinkList_Insert(list, (LinkListNode*)&t3, 0);LinkList_Insert(list, (LinkListNode*)&t4, 0);LinkList_Insert(list, (LinkListNode*)&t5, 0);LinkList_Insert(list, (LinkListNode*)&t6, 3);//遍历链表for (i = 0; i<LinkList_Length(list); i++){Teacher *tmp = (Teacher *)LinkList_GetNode(list, i);if (tmp == NULL){return;}printf("age:%d \n", tmp->age);}printf("\n");//删除链表结点while (LinkList_Length(list) > 0){Teacher *tmp = (Teacher *)LinkList_DeleteNode(list, 0);if (tmp == NULL){return;}printf("age:%d \n", tmp->age);}LinkList_Destroy(list);}
模型图解:
1 0
- 企业链表模型——业务实体和底层链表算法分离
- MVC框架中的模型-视图分离问题(一) —— “你必将业务逻辑由显示中分离”
- UI和业务逻辑分离
- 业务实体和库存组织
- 泛型方法--获取业务实体和业务实体列表
- 线性表顺序存储方式实现,表和前台业务数据的分离
- excel模板解析—桥接模式:分离解析模板和业务校验
- 【厚积薄发】编程技术总结12—项目经验总结之Qt多线程实现汇总界面和底层计算分离
- 业务实体
- 工作中业务和功能逻辑分离
- ######02.【根据表关系 写实体】,【直接凭业务逻辑 和页面显示信息,写不出:体现实体之间的依赖关系 的属性。】
- Java数组和链表的底层实现
- 如何判断 业务实体 ,设计实体用 2表 还是 3表;
- UML笔记——业务模型
- 分析业务模型—UML类图
- 模型和视图分离原则
- Linux设备驱动模型1——简介和底层架构
- 业务建模和领域模型
- Android Studio debug使用release的签名
- Shell条件语句
- The nodes should be added to the underlying vendor clusterware before adding them to the CRS cluster
- 60.View the Exhibit and examine the structure of CUSTOMERS table.
- cmd查看电脑SHA1码
- 企业链表模型——业务实体和底层链表算法分离
- infQ——不受限于内存的队列
- AOJ--0525 Osenbei
- 抓包获得东北大学的课程表,考试成绩,啥的东西
- Java线程池《ThreadPoolExecutor中策略的选择与工作队列的选择》
- Linux之内核模块编程
- Grid Infrastructure 启动的五大问题 (文档 ID 1526147.1)
- Linux进程间通信
- android开发框架(三)数据持久化(2)-SharedPreferences