企业链表模型——业务实体和底层链表算法分离

来源:互联网 发布:游戏编程语言培训班 编辑:程序博客网 时间: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
原创粉丝点击