线性表的链式存储集成

main.c

#include<stdlib.h>
#include<stdio.h>
#include"linklist.h"

typedef struct Teacher
{
	LinkListNode node;
	int age;
	char name[65];//c语言中没有string类型
}Teacher;

int main()
{ 
	int i = 0;
	Teacher t1, t2, t3, t4;
	int rcapacity = 0;
	int rlegth = 0;
	int ret = 0;
	LinkList * list = NULL;

	t1.age = 21;
	t2.age = 22;
	t3.age = 23;
	t4.age = 24;

	list = LinkList_Create();


	ret = LinkList_Insert(list, (LinkListNode*)(&t1), 0);
	ret = LinkList_Insert(list, (LinkListNode*)(&t2), 0);
	ret = LinkList_Insert(list, (LinkListNode*)(&t3), 0);
	ret = LinkList_Insert(list, (LinkListNode*)(&t4), 0);
	if (list == NULL)
	{
		printf("2   list == NULL 
");
		return -1;
	}

	//printf("%d
", LinkList_Length(list));
	
	for (i = 0; i < LinkList_Length(list); i++)
	{
	//	printf("%d  ", LinkList_Length(list) );
		Teacher * temp = (Teacher *)LinkList_Get(list, i);
		printf(" %d  ", temp->age);
	} 

	LinkList_Delete( list, 0);
	printf("hello
");
}

  

linklist.h

#pragma once

typedef void LinkList;

typedef struct _tag_LinkListNode
{
	struct _tag_LinkListNode* next;
}LinkListNode;

LinkList * LinkList_Create();

void LinkList_Destory(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"
#include<stdlib.h>
#include<stdio.h>

typedef struct _tag_LinkList
{
	int length;
	LinkListNode header;

}TLinkList;

LinkList * LinkList_Create()
{
	TLinkList *Tlist = NULL;
	Tlist = (TLinkList*)malloc(sizeof(TLinkList));
	memset(Tlist, 0, sizeof(TLinkList));
}

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




int LinkList_Insert(LinkList* list, LinkListNode* node, int pos)
{
	TLinkList *Tlist = NULL;
	int i = 0;
	LinkListNode *current = NULL;
	if (list == NULL || node == NULL || pos < 0) //检查这一步总是遗忘
	{
		return 0;
	}
	Tlist = (TLinkList *)list;
	current = &(Tlist->header); // 这里忘记写了
	for (i = 0; i < pos; i++) // 这里写错了
	{
		current = current->next;
	}

	node->next = current->next;
	current->next = node;
	Tlist->length++;
	//printf("LinkList_Insert 中的length = %d  
 ", Tlist->length);
	return 0;
}

int LinkList_Length(LinkList* list)
{
	int j = 0;
	TLinkList *Tlist = NULL;
	if (list == NULL)
	{
		return -1;
	}
	Tlist = (TLinkList *)list;
	//printf("LinkList_Length 中的length = %d  
 ", Tlist->length);

	return Tlist->length;
}

LinkListNode* LinkList_Get(LinkList* list, int pos)
{
	TLinkList *Tlist = NULL;
	int i = 0;
	LinkListNode *current = NULL;
	if (list == NULL  || pos < 0) //检查这一步总是遗忘
	{
		return;
	}
	Tlist = (TLinkList *)list;
	current = &(Tlist->header); 
	for (i = 0; i < pos; i++) 
	{
		current = current->next;
	}
	
	return (current->next);
}

LinkListNode* LinkList_Delete(LinkList* list, int pos)
{
	TLinkList *Tlist = NULL;
	int i = 0;
	LinkListNode *current = NULL;
	LinkListNode *ret = NULL;
	if (list == NULL || pos < 0) //检查这一步总是遗忘
	{
		return;
	}
	Tlist = (TLinkList *)list;
	current = &(Tlist->header);
	for (i = 0; i < pos; i++)
	{
		current = current->next;
	}
	ret = current->next;
	current->next = ret->next;
	Tlist->length--;

	return NULL;
}

  

原文地址:https://www.cnblogs.com/xiaochige/p/7067234.html