您的位置:首页 > 其它

线性表的链式存储API

2016-08-16 20:47 204 查看
函数接口实现如下:
</pre><pre name="code" class="cpp">
#include <iostream>
#include <cstdlib>
#include <cstring>
#include "linklist.h"

typedef struct _LinkList
{
int length;
LinkListNode header;
}TLinkList;
//ps:让业务节点包含自己写的链表

LinkList* LinkList_Create()
{
TLinkList *ret = (TLinkList*)malloc(sizeof(TLinkList));
if (ret == NULL)
{
return NULL;
}
memset(ret, 0, sizeof(TLinkList));
ret->header.next = NULL;
ret->length = 0;
}

void LinkList_Destroy(LinkList* list)
{
if (list == NULL)
{
return;
}
free(list);
list = NULL;
return;
}

void LinkList_Clear(LinkList* list)
{
if (list == NULL)
{
return;
}
TLinkList *	q_tmp = NULL;
q_tmp = (TLinkList *)list;
q_tmp->length = 0;
q_tmp->header.next = NULL;
return;
}

int LinkList_Length(LinkList* list)
{
int tmp;
TLinkList *	q_tmp = NULL;

if (list == NULL)
{
return -1;
}
q_tmp = (TLinkList *)list;
tmp = q_tmp->length;
return tmp;
}
//向一个链表LinkList的pos位置处插入新元素node
int LinkList_Insert(LinkList* list, LinkListNode* node, int pos)
{
<span style="white-space:pre">	</span>int i = 0;
<span style="white-space:pre">	</span>TLinkList *<span style="white-space:pre">	</span>q_tmp = NULL;
<span style="white-space:pre">	</span>q_tmp = (TLinkList *)list;
<span style="white-space:pre">	</span>LinkListNode *current = NULL; 
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>if (list == NULL||node == NULL)
<span style="white-space:pre">	</span>{
<span style="white-space:pre">		</span>return -1;
<span style="white-space:pre">	</span>}

<span style="white-space:pre">	</span>current = &q_tmp->header;
<span style="white-space:pre">	</span>//current = (LinkListNode *)q_tmp;

<span style="white-space:pre">	</span>for (i = 0; (i < pos) && (current->next != NULL); i++)
<span style="white-space:pre">	</span>{
<span style="white-space:pre">		</span>current = current->next;
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>node->next = current->next;
<span style="white-space:pre">	</span>current->next = node;
<span style="white-space:pre">	</span>q_tmp->length++;
<span style="white-space:pre">	</span>return 0;
}

LinkListNode* LinkList_Get(LinkList* list, int pos)
{
int i = 0;
TLinkList *	q_tmp = NULL;
if (list == NULL)
{
return NULL;
}
q_tmp = (TLinkList *)list;

LinkListNode *current = NULL;
LinkListNode *ret = NULL;

if (pos < 0 || pos >= q_tmp->length)
{
return NULL;
}
current = &q_tmp->header;
for (i = 0; (i < pos) && (current->next != NULL); i++)
{
current = current->next;
}
ret = current->next;
return ret;
}

LinkListNode* LinkList_Delete(LinkList* list, int pos)
{
int i = 0;
TLinkList *	q_tmp = NULL;
if (list == NULL)
{
return NULL;
}
q_tmp = (TLinkList *)list;

LinkListNode *current = NULL;
LinkListNode *ret = NULL;

if (pos < 0 || pos >= q_tmp->length)
{
return NULL;
}
current = &q_tmp->header;
for (i = 0; i < pos && (current->next != NULL); i++)
{
current = current->next;
}
ret = current->next;

current->next = ret->next;
q_tmp->length--;

return ret;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: