线性表的链式存储API

函数接口实现如下:
</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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值