SList.h
#include <stdio.h>
typedef int SListDataType;
typedef struct SListNode
{
SListDataType data;
struct SListNode* next;
}SListNode;
void SlistPushBack(SListNode** pphead, SListDataType x);
void SlistPopBack(SListNode** pphead);
void SlistPushFront(SListNode** phead, SListDataType x);
void SlistPopFront(SListNode** pphead);
SListNode* SListFind(SListNode* phead, SListDataType x);
void SListInsertAfter(SListNode* pos, SListDataType x);
void SListPrint(SListNode* phead); //完成
Slist.c
#pragma once
#include"SList.h"
#include<stdlib.h>
#include<assert.h>
SListNode* BuySListNode(SListDataType x)
{
SListNode* newNode = (SListNode*)malloc(sizeof(SListDataType));
if (newNode == NULL)
{
printf("申请节点失败!\n");
exit(-1);
}
newNode->data = x;
newNode->next = NULL;
return newNode;
}
void SListPrint(SListNode* phead)
{
SListNode* cur = phead;
while (cur != NULL)
{
printf("%d", cur->data);
cur = cur->next;
}
}
void SlistPushBack(SListNode** pphead, SListDataType x)
{
SListNode* newNode = BuySListNode(x);
if (*pphead == NULL)
{
*pphead = newNode;
}
else
{
SListNode* tail = *pphead;
while (tail->next != NULL)
{
tail = tail->next;
}
tail->next = newNode;
}
}
void SListPopBack(SListNode** pphead)
{
if (*pphead == NULL)
{
return;
}
else if ((*pphead)->next == NULL)
{
free(* pphead);
*pphead = NULL;
}
else
{
SListNode* prev = NULL;
SListNode* tail = *pphead;
while (tail->next != NULL)
{
prev = tail;
tail = tail->next;
}
free(tail);
//tail=NULL;
prev->next = NULL;
}
}
void SlistPushFront(SListNode** pphead, SListDataType x)
{
SListNode* newnode = BuySListNode(x);
newnode->next = *pphead;
*pphead = newnode;
}
void SlistPopFront(SListNode** pphead)
{
if(*pphead==NULL)
{
return;
}
else
{
SListNode* next = (*pphead)->next;
free(*pphead);
*pphead = next;
}
}
SListNode* SListFind(SListNode* phead, SListDataType x)
{
SListNode* cur = phead;
while (cur)
{
if (cur->data == x)
{
return cur;
}
cur = cur->next;
}
return NULL;
}
void SListInsertAfter(SListNode* pos, SListDataType x)
{
assert(pos);
SListNode* newnode = BuySListNode(x);
newnode->next=pos->next;
pos->next = newnode;
}