1.头文件
SList.h
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#define N 10
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 SListInsertAfter(SListNode* pos, SLTDateType x);
void SListEraseAfter(SListNode* pos);
void SListDestory(SListNode* plist);
2.源文件
SList.c
#include"SList.h"
SListNode* BuySListNode(SLTDateType x){
SListNode*newNode = (SListNode*)malloc(sizeof(SListNode));
newNode->data = x;
newNode->next = NULL;
return newNode;
}
void SListPrint(SListNode* plist)
{
SListNode*cur = plist;
while (cur != NULL){
printf("%d->", cur->data);
cur = cur->next;
}
printf("NULL");
}
void SListPushBack(SListNode** pplist, SLTDateType x){
SListNode*newNode = BuySListNode(x);
if (*pplist ==NULL){
*pplist = newNode;
}
else{
SListNode*cur = *pplist;
while (cur->next != NULL){
cur = cur->next;
}
cur->next = newNode;
}
}
void SListPopBack(SListNode** pplist){
SListNode*first = *pplist;
if (pplist == NULL){
return;
}
else if ((*pplist)->next == NULL){
free(*pplist);
*pplist = NULL;
}
else{
SListNode*second = NULL;
while (first->next != NULL){
second = first;
first = first->next;
}
free(first);
second->next = NULL;
}
}
void SListPushFront(SListNode** pplist, SLTDateType x){
SListNode*newNode = BuySListNode(x);
newNode->next = *pplist;
*pplist = newNode;
}
void SListPopFront(SListNode** pplist){
if (*pplist == NULL){
return;
}
else{
SListNode*first = (*pplist)->next;
free(*pplist);
*pplist = first;
}
}
SListNode* SListFind(SListNode* plist, SLTDateType x){
SListNode*cur = plist;
while (cur){
if (cur ->data!= x){
cur = cur->next;
}
else{
return cur;
}
}
return NULL;
}
void SListInsertAfter(SListNode* pos, SLTDateType x){
assert(pos);
SListNode*newNode = BuySListNode(x);
newNode = pos->next;
pos->next = newNode;
}
void SListEraseAfter(SListNode* pos){
if (pos->next == NULL){
return;
}
else{
SListNode*cur = pos->next;
pos->next = cur->next;
}
}
void SListDestory(SListNode** pplist){
SListNode*first = NULL;
while (*pplist)
{
first = (*pplist)->next;
free(*pplist);
*pplist = first;
}
}
test.c
#include"SList.h"
int Test(){
SListNode* plist = NULL;
SListPushBack(&plist, 1);
SListPushBack(&plist, 2);
SListPushBack(&plist, 3);
SListPushFront(&plist, 0);
SListPrint(plist);
SListDestory(&plist);
}
int main(){
Test();
system("pause");
return 0;
}