头文件slnklist.h
#pragma once
#include<stdio.h>
#include<stdlib.h>
typedef int Slnkdatatype;
typedef struct SlnklistNode
{
Slnkdatatype data;
struct SlnklistNode* next;
}SlNode;
void Slnklistprint(SlNode* head);//打印出链表的数据
void SlnklistPushback(SlNode** head, Slnkdatatype x);//尾插
SlNode* Slnklistcreat(Slnkdatatype x);//开辟一个链表,用来储存x,返回值为新链表的结点
void SlnkistPushfront(SlNode** head, Slnkdatatype x);//前插
void SlnklistPopback(SlNode** head);//尾删
void SlnklistPopfront(SlNode** head);//前删
SlNode* Slnklistfind(SlNode* head, Slnkdatatype x);//查找x所在链表的地址
void SlnklistInsert(SlNode** head, SlNode* pos, Slnkdatatype x);//在pos结点后插入x
void Slnklistdel(SlNode** head, SlNode* pos);//删除pos结点的值
源文件slnklist.c
#include"slnklist.h"
void Slnklistprint(SlNode* head)
{
SlNode* cur = head;
while (cur != NULL)//即链表不为空时
{
printf("%d->", cur->data);
cur = cur->next;
}
printf("NULL\n");
}
void SlnklistPushback(SlNode** head, Slnkdatatype x)//要想修改head的值,需要定义head的地址
{
SlNode*newnode=Slnklistcreat(x);
if (*head == NULL)
{
*head = newnode;
}
else
{
SlNode* tail =* head;
while (tail->next != NULL)
{
tail = tail->next;
}
tail->next = newnode;
}
}
SlNode* Slnklistcreat(Slnkdatatype x)
{
SlNode* newnode = (SlNode*)malloc(sizeof(SlNode));
newnode->data = x;
newnode->next = NULL;
return newnode;
}
void SlnkistPushfront(SlNode** head, Slnkdatatype x)
{
SlNode* newnode = Slnklistcreat(x);
if (*head == NULL)
{
*head = newnode;
}
else
{
newnode->next = *head;
*head = newnode;
}
}
void SlnklistPopback(SlNode** head)
{
if (*head != NULL)
{
if ((*head)->next == NULL)
{
free(*head);
*head = NULL;
}
else
{
SlNode* end = *head;
while (end->next->next != NULL)
{
end = end->next;
}
free(end->next);
end->next = NULL;
}
}
}
void SlnklistPopfront(SlNode** head)
{
if (*head != NULL)
{
SlNode* point = (*head)->next;
free(*head);
*head = point;
}
}
SlNode* Slnklistfind(SlNode* head, Slnkdatatype x)
{
if (head != NULL)
{
SlNode* find = head;
while (find->data != x)
{
find = find->next;
}
if (find->data == x)
{
return find;
}
else
{
return NULL;
}
}
else
{
return NULL;
}
}
void SlnklistInsert(SlNode** head, SlNode* pos, Slnkdatatype x)
{
SlNode* newnode = Slnklistcreat(x);
SlNode* point = *head;
if (*head == NULL)
{
*head = newnode;
}
else
{
while (point != pos)
{
point = point->next;
}
newnode->next = point->next;
point->next = newnode;
}
}
void Slnklistdel(SlNode** head, SlNode* pos)
{
if (*head != NULL)
{
SlNode* end = *head;
if (end == pos)
{
free(end);
*head = NULL;
}
else
{
while (end->next != pos)
{
end = end->next;
}
end->next = pos->next;
free(pos);
}
}
}
#include"slnklist.h"
void test1()
{
SlNode* plist = NULL;
SlnklistPushback(&plist, 1);
SlnklistPushback(&plist, 2);
SlnklistPushback(&plist, 3);
Slnklistprint(plist);
SlnkistPushfront(&plist, 10);
SlnkistPushfront(&plist, 20);
Slnklistprint(plist);
}
void test2()
{
SlNode* plist = NULL;
SlnklistPushback(&plist, 1);
SlnklistPushback(&plist, 2);
SlnklistPushback(&plist, 3);
Slnklistprint(plist);
SlnkistPushfront(&plist, 10);
SlnkistPushfront(&plist, 20);
Slnklistprint(plist);
SlnklistPopfront(&plist);
SlnklistPopfront(&plist);
Slnklistprint(plist);
}
void test3()
{
SlNode* plist = NULL;
SlnklistPushback(&plist, 1);
SlnklistPushback(&plist, 2);
SlnklistPushback(&plist, 3);
Slnklistprint(plist);
SlnkistPushfront(&plist, 10);
SlnkistPushfront(&plist, 20);
Slnklistprint(plist);
SlnklistPopback(&plist);
Slnklistprint(plist);
SlNode* pos = Slnklistfind(plist, 10);
SlnklistInsert(&plist, pos, 6);
Slnklistprint(plist);
Slnklistdel(&plist, pos->next);//这里pos->next指第三个结点的地址
Slnklistprint(plist);
}
int main()
{
//test1();
//test2();
test3();
return 0;
}