关于链表的函数

下午看了看链表,顺便敲了敲相关的函数

代码如下:

#include
#include
typedef int ElemType;
typedef struct LNode{
	ElemType data;
	struct LNode * next;
}LinkList;

LinkList * creat(int n)
{
	LinkList * head, * node, * end;//定义头节点,普通节点,尾部节点
	head = (LinkList *)malloc(sizeof(LinkList));//分配地址
	end = head;
	for(int i = 0; i < n; i++)
	{
		node = (LinkList *)malloc(sizeof(LinkList));//分配地址
		scanf("%d", &node->data);
		end->next = node;
		end = node;
	}
	end->next = NULL;//结束创建
	return head;
}//创建长度为n的链表
void DestroyList(LinkList * head)
{
	LinkList * end = head;
	do
	{
		end = end->next;
		free(head);
		head = end;
	}while(end != NULL);
	return;
}//销毁链表
int ListLength(LinkList * L)
{
	int length = -1;
	while(L != NULL)
	{
		length++;
		L = L->next;
	}
	return length;
}//返回链表的普通节点长度
ElemType GetElem(LinkList * L, int i)
{
	for(int j = 0; j < i; j++)
	{
		if(L == NULL) return (ElemType)0;
		L = L->next;
	}
	return L->data;
}//返回链表第i个普通节点的值
bool ListInsert(LinkList * L, int i, ElemType e)
{
	for(int j = 0; j < i; j++)
	{
		if(L == NULL)  return false;//失败
		L = L->next;
	}
	LinkList * node = (LinkList *)malloc(sizeof(LinkList));
	node->data = e, node->next = L->next;
	L->next = node;
	return true;
}//在链表第i个普通节点后插入一个节点,存储的值为e
bool ListDelete(LinkList * L, int i)
{
	for(int j = 1; j < i; j++)
	{
		if(L == NULL)  return false;//失败
		L = L->next;
	}
	LinkList * node = L->next;
	L->next = node->next;
	free(node);
	return true;
}//删除链表的第i个普通节点

int main(void)
{

}

以后用链表或许会方便点

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