单链表的插入,删除,查找,清除,毁坏,逆置函数,具体代码如下:
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
typedef struct Node
{
int data;
struct Node* next;
}Node,*List;
void initlist(List plist)//初始化
{
assert(plist!=NULL);
if(plist==NULL)
{
return ;
}
plist->next=NULL;
}
void HeadInsert(List plist,int val)//头插
{
assert(plist!=NULL);
Node*p=(Node*)malloc(sizeof(Node));
p->data=val;
p->next=plist->next;
plist->next=p;
}
void TailInsert(List plist)//尾插
{
assert(plist!=NULL);
Node* p=(Node*)malloc(sizeof(Node));
p->data=val;
Node* q;
for(q=plist;q->next!=NULL;q=q->next);
p->next=q->next;
q->next=p;
}
Node *search(List plist,int key)//查找
{
Node *p;
for(p=plist->next;p!=NULL;p=p->next)
{
if(p->data==key)
{
return p;
}
}
return NULL;
}
Node * Searchpri(List plist,int key)//查找前驱
{
Node* p;
for(p=plist->next;p!=NULL;p=p->next)
{
if(p->next->data==key)
{
return p;
}
}
return NULL;
}
bool Delete(List plist,int key)//删除
{
Node *p=Searchpri(plist);
Node *q;
if(p!=NULL)
{
q=p->next;
p->next=q->next;
free(p);
return true;
}
return false;
}
bool Isempty(List plist)//判空
{
return plist->next==NULL;
}
int Getlength(List plist)//得到数据长度
{
int count=0;
for(Node *p=plist->next;p!=NULL;p=p->next)
{
count++;
}
return count;
}
void Destroy(List plist)//毁坏
{
assert(plist!=NULL);
while(plist->next!=NULL)
{
Node* p=plist->next;
plist->next=p->next;
free(p);
}
}
void Clear(List plist)//清除
{
Destroy(plist);
}
void Reverse(List plist)//逆置头插思想
{
assert(plist!=NULL);
if(plist==NULL || plist->next==NULL || plist->next->next==NULL)
{
return ;
}
Node *p=plist->next;
Node *q;
plist->next=NULL;
while(p->next!=NULL)
{
q=p->next;
p->next=plist->next;
plist->next=p;
p=q;
}
}