单链表的增删查改

目录

一、主函数(test.c)

二、头文件(slist.h)

三、函数调用(slist.c)

一、主函数(test.c)

cs 复制代码
#define _CRT_SECURE_NO_WARNINGS 1

#include "slist.h"

int main()
{
	SListNode* plist = NULL;

	//尾插
	SListPushBack(&plist, 1);
	SListPushBack(&plist, 2);
	SListPushBack(&plist, 3);
	SListPushBack(&plist, 4);
	SListPushBack(&plist, 5);
	//打印链表
	SListPrint(plist);
	//头插
	SListPushFront(&plist, 0);
	SListPushFront(&plist, 1);
	SListPushFront(&plist, 2);
	SListPushFront(&plist, 3);
	SListPushFront(&plist, 4);
	SListPushFront(&plist, 5);
	SListPrint(plist);
	//尾删
	SListPopBack(&plist);
	SListPrint(plist);
	//头删
	SListPopFront(&plist);
	SListPrint(plist);
	//查找
	SListNode* search = SListFind(plist, 2);
	SListPrint(search);
	//先查找位置在删除或者插入
	//在pos后插入x
	//SListInsertAfter(&plist, search, 10);
	//SListPrint(plist);
	//删除pos位置之后的值
	//SListEraseAfter(plist, 10);

	return 0;
}

二、头文件(slist.h)

cs 复制代码
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include <string.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);
// 单链表在pos位置之后插入x
void SListInsertAfter(SListNode** pplist,SListNode* pos, SLTDateType x);
// 单链表删除pos位置之后的值
void SListEraseAfter(SListNode* pos);

三、函数调用(slist.c)

cs 复制代码
#define _CRT_SECURE_NO_WARNINGS 1

#include "slist.h"

//在动态内存申请一个节点
SListNode* BuySListNode(SLTDateType x)
{
	SListNode* newnode = (SListNode*)malloc(sizeof(SListNode));
	if (newnode == NULL)
	{
		perror("malloc fail");
		return;
	}
	newnode->data = x;
	newnode->next = NULL;
	return newnode;
}

//单链表打印
void SListPrint(SListNode* plist)
{
	if (plist == NULL)
	{
		return 1;
	}
	SListNode* tail = plist;
	while (tail != NULL)
	{
		printf("->%d", tail->data);
		tail = tail->next;
	}
	printf("\n");
}

//单链表尾插
void SListPushBack(SListNode** pplist, SLTDateType x)
{
	SListNode* addnode = BuySListNode(x);
	if (*pplist == NULL)
	{
		*pplist = addnode;
	}
	//找尾
	else
	{
		SListNode* tail = *pplist;
		while (tail->next != NULL)
		{
			tail = tail->next;
		}
		tail->next = addnode;
	}
}

 //单链表的头插
void SListPushFront(SListNode** pplist, SLTDateType x)
{
	SListNode* addnode = BuySListNode(x);
	if (*pplist == NULL)
	{
		*pplist = addnode;
	}
	else
	{
		SListNode* tail = *pplist;
		*pplist = addnode;
		(*pplist)->next = tail;
	}
}


//单链表尾删
void SListPopBack(SListNode** pplist)
{
	assert(*pplist != NULL);

	if ((*pplist)->next == NULL)
	{
		free(*pplist);
		*pplist = NULL;
	}
	else
	{
		SListNode* tail = *pplist;
		SListNode* listnode = NULL;
		while (tail->next != NULL)
		{
			listnode = tail;
			tail = tail->next;
		}
		free(tail);
		tail = NULL;
		listnode->next = NULL;
	}
}


//头删
void SListPopFront(SListNode** pplist)
{
	assert((*pplist) != NULL);

	if ((*pplist)->next == NULL)
	{
		free(*pplist);
		*pplist = NULL;
	}
	else
	{
		SListNode* listnode = *pplist;
		*pplist = (*pplist)->next;
		free(listnode);
		listnode = NULL;
	}
}

//单链表的查找
SListNode* SListFind(SListNode* plist, SLTDateType x)
{
	assert(plist);

	SListNode* seardata = plist;
	//记录位置
	int count = 0;
	while (seardata != NULL)
	{
		count++;
		if (seardata->data == x)
		{
			printf("->%d在第%d个节点位置\n", x, count);
			return seardata;
		}
		else
		{
			seardata = seardata->next;
		}
	}
	printf("链表中没有这个数\n");
}

 单链表在pos位置之后插入x
//void SListInsertAfter(SListNode** pplist,SListNode* pos, SLTDateType x)
//{
//	SListNode* tail = *pplist;
//	SListNode* listnode = NULL;
//	SListNode* addnode = BuySListNode(x);
//	while (tail != pos)
//	{
//		tail = tail->next;
//		listnode = tail;
//	}
//	listnode->next = addnode;
//	addnode->next =tail;
//}

// 单链表删除pos位置之后的值
void SListEraseAfter(SListNode* pos)
{

}
相关推荐
橙几11 分钟前
击败了90%的解法?Two Sum 从 O(n²) 到 O(n) 的优化之路
算法
叶子爱分享25 分钟前
经典排序算法之归并排序(Merge Sort)
算法·排序算法
珹洺31 分钟前
C++算法竞赛篇:DevC++ 如何进行debug调试
java·c++·算法
神仙别闹1 小时前
基于C#+SQL Server实现(Web)学生选课管理系统
前端·数据库·c#
呆呆的小鳄鱼1 小时前
leetcode:冗余连接 II[并查集检查环][节点入度]
算法·leetcode·职场和发展
墨染点香1 小时前
LeetCode Hot100【6. Z 字形变换】
java·算法·leetcode
沧澜sincerely1 小时前
排序【各种题型+对应LeetCode习题练习】
算法·leetcode·排序算法
CQ_07121 小时前
自学力扣:最长连续序列
数据结构·算法·leetcode
弥彦_1 小时前
cf1925B&C
数据结构·算法
Y4090012 小时前
C语言转Java语言,相同与相异之处
java·c语言·开发语言·笔记