头文件 linkList.h
#ifndef _LINKLIST_H
#define _LINKLIST_H
#include<stdio.h>
#include<stdlib.h>
typedef int Data;
typedef struct LinkList
{
Data data;
struct LinkList *next;
}LinkList,*PLinkList;
PLinkList linkList_Create();//创建
int linkList_Insert(PLinkList head,int pos,Data val);//插入(从0开始)
int linkList_JudgeEmpty(PLinkList head);//判断是否为空
int linkList_Delete(PLinkList head,int pos);//删除
PLinkList linkList_Reverse(PLinkList head);//逆序
PLinkList linkList_Sort(PLinkList head);//排序(从小到大)
int linkList_Clean(PLinkList head);//清空
int linkList_Destroy(PLinkList *q);//摧毁
#endif
实现文件 linkList.c
#include "linkList.h"
PLinkList linkList_Create()//创建
{
PLinkList head = (PLinkList)malloc(sizeof(LinkList));
if(head==NULL)
{
perror("Create fail");
return NULL;
}
head->next=NULL;
return head;
}
int linkList_Insert(PLinkList head,int pos,Data val)//插入(pos从0开始)
{
if(head==NULL)
{
perror("LinkList is NULL");
return -1;
}
if(pos<0)
{
perror("pos is false");
return -1;
}
PLinkList p = head;
while(pos>0)//找到插入位置前一个结点
{
if(p->next==NULL)
{
perror("pos is false");
return -1;
}
p=p->next;
pos--;
}
PLinkList newNode = linkList_Create();
newNode->data=val;
newNode->next=p->next;
p->next=newNode;
return 1;
}
int linkList_JudgeEmpty(PLinkList head)//判断是否为空
{
if(head==NULL)
{
perror("LinkList is NULL");
return -1;
}
if(head->next==NULL)
{
return 1;
}else
{
return 0;
}
}
int linkList_Delete(PLinkList head,int pos)//删除
{
if(head==NULL)
{
perror("LinkList is NULL");
return -1;
}
if(pos<0)
{
perror("pos is false");
return -1;
}
if(linkList_JudgeEmpty(head)==1)
{
perror("LinkList is Empty");
return -1;
}
PLinkList p = head;
while(pos>0)//找到删除位置前一个结点
{
if(p->next==NULL)
{
perror("pos is false");
return -1;
}
p=p->next;
pos--;
}
PLinkList q = p->next;
p->next=p->next->next;
free(q);
q=NULL;
return 1;
}
PLinkList linkList_Reverse(PLinkList head)//逆序
{
if(head==NULL)
{
perror("LinkList is NULL");
return -1;
}
PLinkList p = head->next;//将p指向剩下的节点
head->next=NULL;//将head节点断开
while(p!=NULL)
{
PLinkList n = p;
p=p->next;
n->next=head->next;//头插法重新插入head后
head->next=n;
}
return head;
}
PLinkList linkList_Sort(PLinkList head)//排序(从小到大)
{
if(head==NULL)
{
perror("LinkList is NULL");
return -1;
}
PLinkList p = head->next;//将p指向剩下的节点
head->next=NULL;//将head节点断开
PLinkList r = head;
while(p!=NULL)//插入排序
{
PLinkList n = p;
p=p->next;
while(r->next!=NULL && r->next->data < n->data ) //r从前往后寻找插入位置
r=r->next;
n->next=r->next;
r->next=n;
}
return head;
}
int linkList_Clean(PLinkList head)//清空
{
if(head==NULL)
{
perror("LinkList is NULL");
return -1;
}
while(head->next!=NULL)
{
linkList_Delete(head,0);
}
return 1;
}
int linkList_Destroy(PLinkList *q)//摧毁
{
if(linkList_JudgeEmty(*q)==0)
{
linkList_Clean(*q);
}
free(*q);
*q=NULL;
return 1;
}
若有错误欢迎指正(*^▽^*)