Slist.c
#include"SLish.h"
void SlistPrint(SListNode* phead)
{
SListNode* cur = phead;
while (cur!=NULL)
{
printf("%d->", cur->data);
cur=cur->next;
}
printf("NULL");
}
SListNode *BuySListNode(SListDataType x)
{
SListNode* newnode = (SListNode*)malloc(sizeof(SListNode));
if (newnode == NULL)
{
printf("no");
exit(-1);
}
newnode->data = x;
newnode->next = NULL;
return newnode;
}
void SlistPushBack(SListNode** phead, SListDataType x) {
SListNode* newnode = BuySListNode(x);
if (*phead==NULL)
{
*phead=newnode;
}
else
{
SListNode* tail =* phead;
while (tail->next != NULL)
{
tail = tail->next;
}
SListNode* newnode = (SListNode*)malloc(sizeof(SListNode));
if (newnode == NULL)
{
printf("no");
exit(-1);
}
newnode->data = x;
newnode->next = NULL;
tail->next = newnode;
}
/*SListNode* tail = phead;
while (tail->next != NULL)
{
tail = tail->next;
}
SListNode* newnode = (SListNode*)malloc(sizeof(SListNode));
if (newnode==NULL)
{
printf("no");
exit(-1);
}
newnode->data = x;
newnode->next = NULL;
tail->next = newnode;*/
}
void SlistPopBack(SListNode** phead)
{
if (*phead)
{
return;
}
else if ((*phead)->next==NULL)
{
free(*phead);
*phead = NULL;
}
else
{
SListNode* prev = NULL;
SListNode* tail = *phead;
while (tail->next != NULL)
{
prev = tail;
tail = tail->next;
}
free(tail);
prev->next = NULL;
}
}
void SlistPushFront(SListNode** phead, SListDataType x)
{
SListNode* newnode = BuySListNode(x);
newnode->next = *phead;
*phead = newnode;
}
void SlistPopFront(SListNode** phead)
{
if (*phead==NULL)
{
return 0;
}
else
{
SListNode* next = (*phead)->next;
free(*phead);
*phead = next;
}
}
void SlistFind(SListNode* phead, SListDataType x)
{
SListNode* cur = phead;
while (cur)
{
if (cur->data==x)
{
return x;
}
cur = cur->next;
}
return NULL;
}
void SlistInsertAfter(SListNode* pos, SListDataType x)
{
assert(pos);
SListNode* newnode = BuySListNode(x);
newnode->next=pos->next;
pos->next = newnode;
}
void SlistEraseAfter(SListNode* pos, SListDataType x)
{
assert(pos);
if (pos->next)
{
SListNode* next = pos->next;
SListNode* next2 = next->next;
pos->next = next2;
free(next);
}
}
Slist.h
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#pragma once
typedef int SListDataType;
typedef struct SListNode
{
SListDataType data;
struct SListNode* next;
}SListNode;
void SlistPushBack(SListNode** phead, SListDataType x);
void SlistPopBack(SListNode** phead);
void SlistPushFront(SListNode** phead, SListDataType x);
void SlistPopFront(SListNode** phead);
void SlistPrint(SListNode* phead);
void SlistFind(SListNode* phead, SListDataType x);
void SlistInsertAfter(SListNode* pos, SListDataType x);
void SlistEraseAfter(SListNode* pos, SListDataType x);
test.c
#include"SLish.h"
//#include"SList.c"
int main()
{
SListNode* pList = NULL;
SlistPushBack(&pList, 1);
SlistPushBack(&pList, 1);
SlistPushBack(&pList, 1);
SlistPrint(pList);
SlistPopBack(&pList);
SlistPopBack(&pList);
SlistPopBack(&pList);
SlistPushFront(&pList, 2);
SlistPushFront(&pList, 23);
SlistPopFront(&pList);
SlistPopFront(&pList);
SlistPopFront(&pList);
SlistPopFront(&pList);
SlistPopFront(&pList);
SlistPrint(pList);
//SListNode
return 0;
}
//void SlistPushBack(SListNode** phead,SListDataType x);
//void SlistPopBack(SListNode* phead);
//void SlistPushFront(SListNode* phead,SListDataType x);
//void SlistPopFront(SListNode* phead);
//void SlistPrint(SListNode* phead);