链表的代码

链表的代码


链表比顺序表头插节约时间,并且比顺序表更节约空间

game.h

#pragma once
#include<stdlib.h>
#include<assert.h>
#include<stdio.h>
typedef int SLTDateType;
typedef struct SListNode
{
	SLTDateType data;
	struct SListNode* next;
}SListNode;

// 动态申请一个节点
SListNode* BuySListNode(SLTDateType x);
// 单链表打印
 void SListPrint(SListNode* plist);
// 单链表尾插
void SListPushBack(SListNode** pplist, SLTDateType x);
// 单链表的头插
void SListPushFront(SListNode** pplist, SLTDateType x);
// 单链表的尾删
void SListPopBack(SListNode** pplist);
// 单链表头删
void SListPopFront(SListNode** pplist);
// 单链表查找
SListNode* SListFind(SListNode* plist, SLTDateType x);
void SListInsertbefore(SListNode** plist,SListNode* pos, SLTDateType x);
void SListErase(SListNode** phead,SListNode* pos);
void SListInsertAfter(SListNode* pos, SLTDateType x);
void SListEraseAfter(SListNode* pos);
// 单链表的销毁
void SListDestroy(SListNode** plist);

game.c

#include"game.h"
#define _CRT_SECURE_NO_WARNINGS 1
#define k sizeof(int *)
#include<string.h>
SListNode* BuySListNode(SLTDateType x)
{
	SListNode* fm = malloc(sizeof(SListNode));
	fm->data = x;
	fm->next = NULL;
	return fm;
}
void SListPrint(SListNode* plist)
{
	SListNode* tail = plist;
	while (tail != NULL)
	{
		printf("%d->", tail->data);
		tail = tail->next;
	}
	printf("NULL\n");
}
void SListPushBack(SListNode** pplist, SLTDateType x)
{
	assert(pplist);
	SListNode* it = BuySListNode(x);
	SListNode** tail = pplist;
	if (*tail == NULL)
	{
		*tail = it;
		return;
	}
	SListNode* g = *pplist;
	while (g->next != NULL)
		g = g->next;
	g->next = it;
}
void SListPushFront(SListNode** pplist, SLTDateType x)
{
	assert(pplist);
	SListNode* i = BuySListNode(x);
	SListNode* z = *pplist;
	*pplist = i;
	i->next = z;
}
void SListPopBack(SListNode** pplist)
{
	SListNode** tail = pplist;
	assert(pplist);
	assert(*pplist);
	if ((*tail)->next == NULL)
	{
		free(*tail);
		*tail = NULL;
		return;
	}
	SListNode* organse = *tail;
	while (organse->next->next != NULL)
		organse = organse->next;
	free(organse->next);
	organse->next = NULL;
}
void SListPopFront(SListNode** pplist)
{
	SListNode** num = pplist;
	assert(pplist);
	assert(*num);
	*num = (*num)->next;
}
SListNode* SListFind(SListNode* plist, SLTDateType x)
{
	while (plist != NULL)
	{
		if (plist->data == x)
			return plist;
		plist = plist->next;
	}
	return NULL;
}
void SListInsertbefore(SListNode** plist, SListNode* pos, SLTDateType x)
{
	SListNode* o = BuySListNode(x);
	assert(plist);
	if (*plist == pos)
	{
		o->next = *plist;
		*plist = o;
	}
	else
	{
		SListNode* tail = *plist;
		while (tail->next!= pos)
			tail = tail->next;
		o->next = pos;
		tail->next = o;
	}
}
void SListInsertAfter(SListNode* pos, SLTDateType x)
{
	assert(pos);
	SListNode* channel = BuySListNode(x);
	SListNode* change = pos->next;
	pos->next = channel;
	channel->next = change;
}
void SListErase(SListNode** phead, SListNode* pos)
{
	assert(phead);
	assert(pos);
	assert(*phead);
	if (*phead == pos)
		*phead = pos->next;
	else
	{
		SListNode* tail = *phead;
		while (tail->next != pos)
			tail = tail->next;
		tail->next = pos->next;
		free(pos);
	}
}
void SListEraseAfter(SListNode* pos)
{
	assert(pos);
	assert(pos->next);
	SListNode* ah = pos;
	pos->next = pos->next->next;
	free(ah);
}
void SListDestroy(SListNode** plist)
{
	free(*plist);
	*plist = NULL;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值