链表的建立,增删改查初始化

本文详细探讨了链表的数据结构,特别关注如何进行初始化、插入、删除、修改和查询操作。链表中每个节点仅包含一个整型数据成员。通过头文件SList.h和实现文件SList.c,作者展示了具体的实现细节。
摘要由CSDN通过智能技术生成

链表中的数据只添加了一个int型成员

链表的头文件声明

 SList.h

#ifndef __SLIST_H_
#define __SLIST_H_

#include <stdio.h>
#include <stdlib.h>
typedef int SLTDataType;

typedef struct SListNode 
{
	SLTDataType data;
	struct SListNode* next;
}SListNode;

void SListInit(SListNode** phead);
void SListDestory(SListNode** phead);
SListNode* BuySListNode(SLTDataType x);
void SListPushFront(SListNode** phead, SLTDataType x);
void SListPopFront(SListNode** phead);
SListNode* SListFind(SListNode** phead, SLTDataType x);
// 在pos的后面进行插入
void SListInsertAfter(SListNode* pos, SLTDataType x);
// 在pos的前面进行插入
void SListEraseAfter(SListNode* pos);
void SListRemove(SListNode** phead, SLTDataType x);
void SListRemoveAll(SListNode** phead, SLTDataType x);
void SListPrint(SListNode* plist);

void SListReverse(SListNode** phead);
void SListReverse2(SListNode** phead);
void TestSList();


#endif

头文件实现

SList.c

#include "SList.h"

void SListInit(SListNode** phead){
	*phead = (SListNode*)malloc(sizeof(SListNode));
	*phead = NULL;
}

SListNode* BuySListNode(SLTDataType x){
	SListNode* temp = (SListNode*)malloc(sizeof(SListNode));
	temp->data = x;
	temp->next = NULL;
	return temp;
}

void SListPushFront(SListNode** phead, SLTDataType x){
	SListNode* temp = BuySListNode(x);
	temp->next = *phead;
	*phead = temp;

}

void SListPrint(SListNode* plist){
	SListNode* temp = plist;
	for (; temp; temp = temp->next){
		printf("%d->", temp->data);
	}
	printf("NULL\n");
}

void SListPopFront(SListNode** phead){
	SListNode* temp = (*phead)->next;
	free(*phead);
	*phead = temp;
}

SListNode* SListFind(SListNode** phead, SLTDataType x){
	SListNode* temp = *phead;
	for (; temp; temp = temp->next){
		if (temp->data == x){
			return temp;
		}
	}
	return NULL;
	
}

void SListInsertAfter(SListNode* pos, SLTDataType x){
	SListNode* temp = BuySListNode(x);
	//temp->data = x;
	temp->next = pos->next;
	pos->next = temp;

}
void SListEraseAfter(SListNode* pos){
	SListNode* temp = pos ->next;
	if (temp->next == NULL){
		return;
	}
	pos->next = temp->next;
	free(temp); 
	
}
void SListRemove(SListNode** phead, SLTDataType x){
	if ((*phead)->data == x){
		SListPopFront(phead);
	}
	SListNode* temp = *phead;
	for (; temp->next; temp = temp->next){
		if (temp->next->data == x){
			SListEraseAfter(temp);
			return;
		}
	}
}

void SListRemoveAll(SListNode** phead, SLTDataType x){
	SListNode* temp = *phead;
	if (*phead == NULL){
		return;
	}
	if ((*phead)->data == x){
		SListPopFront(phead);
	}
	for (; temp->next; ){
		if (temp->next->data == x){
			SListEraseAfter(temp);
		}
		else{
			temp = temp->next;
		}
	}
	return;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值