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

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

链表的头文件声明

 SList.h

#ifndef __SLIST_H_
#define __SLIST_H_

#include 
#include 
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;
}

 

你可能感兴趣的:(链表的建立,增删改查初始化)