线性表的链式存储的设计与实现

linklist.h文件:

#pragma once
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
/*
指针指向谁,就把谁的地址赋值给指针
*/
typedef void LinkList;

typedef struct _tag_LinkListNode
{
	struct _tag_LinkListNode* next;
}LinkListNode;//节点

LinkList* LinkList_Create();

void LinkList_Destroy(LinkList* list);

void LinkList_Clear(LinkList *list);

int LinkList_Length(LinkList* list);

int LinkList_Insert(LinkList* list, LinkListNode* node,int pos);

LinkListNode* LinkList_Get(LinkList* list,int pos);

LinkListNode* LinkList_Delete(LinkList* list,int pos);

linklist.c文件:

#include "linklist.h"

typedef struct _tag_LinkList
{
	LinkListNode header;
	int length;
}TLinkList;

LinkList* LinkList_Create()
{
	TLinkList* ret = NULL;

	ret = (TLinkList*)malloc(sizeof(TLinkList));
	memset(ret, 0, sizeof(TLinkList));

	return ret;
}

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

	return ;
}

void LinkList_Clear(LinkList *list)
{
	TLinkList* rList = NULL;
	if (list == NULL)
	{
		return;
	}
	rList = (TLinkList*)list;

	rList->length = 0;
	rList->header.next = NULL;

	return ;
}

int LinkList_Length(LinkList* list)
{
	TLinkList* rList = NULL;
	if (list == NULL)
	{
		return -1;
	}
	rList = (TLinkList*)list;
	return rList->length;
}

int LinkList_Insert(LinkList* list, LinkListNode* node, int pos)
{
	TLinkList* rList = NULL;
	LinkListNode *current = NULL;
	int i;
	if (list == NULL || node == NULL || pos < 0)
	{
		return -1;
	}
	rList = (TLinkList*)list;
	current = &(rList->header);
	for (i = 0; i < pos && (current->next != NULL); i++)
	{
		current = current->next;
	}
	node->next = current->next;
	current->next = node;
	rList->length++;

	return 0;
}

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

	rList = (TLinkList*)list;
	current = &(rList->header);

	for (i = 0; i < pos; i++)
	{
		current = current->next;
	}

	return current->next;
}

LinkListNode* LinkList_Delete(LinkList* list, int pos)
{
	TLinkList* rList = NULL;
	LinkListNode* current = NULL;
	LinkListNode* rec = NULL;
	int i;
	if (list == NULL || pos < 0)
	{
		return NULL;
	}

	rList = (TLinkList*)list;
	current = &(rList->header);

	for (i = 0; i < pos; i++)
	{
		current = current->next;
	}

	//缓存要被删除的节点位置
	rec = current->next;

	current->next = rec->next;
	rList->length--;

	return rec;
}

main.c文件

#include "linklist.h"

typedef struct Teacher
{
	LinkListNode node;//Teacher结构体包含节点,只需将所有节点连接,Teacher就会自动连接
	int age;
	char name[64];
}Teacher;

int main()
{
	int len,rec,i;
	Teacher t1, t2, t3, t4;
	LinkList* list = NULL;

	t1.age = 31;
	t2.age = 32;
	t3.age = 33;
	t4.age = 34;

	list = LinkList_Create();
	if (list == NULL)
	{
		return 0;
	}

	len = LinkList_Length(list);

	rec = LinkList_Insert(list, &t1, 0);
	rec = LinkList_Insert(list, &t2, 0);
	rec = LinkList_Insert(list, &t3, 0);
	rec = LinkList_Insert(list, &t4, 0);

	len = LinkList_Length(list);
	printf("len:%d\n", len);
	for ( i = 0; i < LinkList_Length(list); i++)
	{
		Teacher* tem = (Teacher*)LinkList_Get(list, i);
		printf("age:%d\n", tem->age);
	}

	while (LinkList_Length(list)>0)
	{
		LinkList_Delete(list, 0);
	}
	len = LinkList_Length(list);
	printf("len:%d\n", len);

	LinkList_Destroy(list);

	system("pause");
	return 0;
}

 

你可能感兴趣的:(数据结构)