企业链表模型——业务实体和底层链表算法分离
2016-02-29 17:20
337 查看
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);
}
模型图解:
#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);
}
模型图解:
相关文章推荐
- [C/C++]反转链表
- C#实现基于链表的内存记事本实例
- C语言实现带头结点的链表的创建、查找、插入、删除操作
- C++实现简单的学生管理系统
- Linux内核链表实现过程
- C++链表倒序实现方法
- C#通过链表实现队列的方法
- C#实现的简单链表类实例
- 找出链表倒数第n个节点元素的二个方法
- Java数据结构之简单链表的定义与实现方法示例
- C语言单循环链表的表示与实现实例详解
- C++实现的链表类实例
- PHP小教程之实现链表
- PHP中模拟链表和链表的基本操作示例
- C语言双向链表的表示与实现实例详解
- js链表操作(实例讲解)
- C语言实现输出链表中倒数第k个节点
- C++语言实现线性表之链表实例
- STL list链表的用法详细解析
- C语言创建链表错误之通过指针参数申请动态内存实例分析