思维导图
作业:单向链表功能实现
#include "head.h"
Link_listPtr link_Create()
{
Link_listPtr H=(Link_listPtr)malloc(sizeof(Link_list));
if(H==NULL)
{
printf("create failed!\n");
return NULL;
}
H->len=0;
H->next=NULL;
printf("create successfully!\n");
return H;
}
int Link_list_Empty(Link_listPtr P)
{
if(P==NULL)
{
printf("judge failed!\n");
return -1;
}
if(P->len==0)
{
return 1;
}
return 0;
}
Link_listPtr node_Create(Datatype node_date)
{
Link_listPtr P=(Link_listPtr)malloc(sizeof(Link_list));
if(P==NULL)
{
printf("create failed!\n");
return NULL;
}
P->date=node_date;
return P;
}
Link_listPtr *get_Ptr(Link_listPtr H,int location)
{
if(H==NULL || Link_list_Empty(H))
{
printf("get ptr failed!\n");
}
Link_listPtr P=H;
for(int i=0;i<location;i++)
{
P=P->next;
}
Link_listPtr *S=&P;
return S;
}
int head_Add(Link_listPtr H,Datatype node_date)
{
if(H==NULL)
{
printf("head add failed!\n");
return 0;
}
Link_listPtr P=node_Create(node_date);
P->next=H->next;
H->next=P;
H->len++;
printf("head add successfully!\n");
return 1;
}
void Link_list_Show(Link_listPtr H)
{
if(H==NULL || Link_list_Empty(H))
{
printf("travel failed!\n");
return;
}
printf("travel successfully!\n");
Link_listPtr P=H;
for(int i=0;i<H->len;i++)
{
P=P->next;
printf("%d\n",P->date);
}
}
void last_Add(Link_listPtr H,Datatype node_date)
{
if(H==NULL)
{
printf("last add failed!\n");
return;
}
printf("last add successfully!\n");
Link_listPtr S=node_Create(node_date);
if(S==NULL)
return;
Link_listPtr P=H;
while(P->next!=NULL)
{
P=P->next;
}
S->next=P->next;
P->next=S;
H->len++;
}
void Link_list_Insert(Link_listPtr H,int location,Datatype node_date)
{
if(H==NULL || location>H->len || location<1 )
{
printf("insert failed!\n");
return;
}
printf("insert successfully!\n");
Link_listPtr S=node_Create(node_date);
Link_listPtr P=H;
int step=0;
while(step<(location-1))
{
step++;
P=P->next;
}
S->next=P->next;
P->next=S;
H->len++;
}
void head_Delete(Link_listPtr H)
{
// Link_listPtr *A=get_Ptr(H,1);
if(H==NULL || Link_list_Empty(H))
{
printf("head delete failed!\n");
return;
}
printf("head delete successfully!\n");
Link_listPtr P=H;
P=P->next;
H->next=P->next;
free(P);
H->len--;
// Link_list_Free(H,A);
}
void last_Delete(Link_listPtr H)
{
// Link_listPtr *A=get_Ptr(H,H->len);
if(H==NULL || Link_list_Empty(H))
{
printf("last delete failed!\n");
return;
}
printf("last delete successfully!\n");
Link_listPtr P=H;
for(int i=0;i<(H->len-1);i++)
{
P=P->next;
}
Link_listPtr S=P->next;
P->next=P->next->next;
free(S);
// Link_list_Free(H,A);
H->len--;
}
void any_Delete(Link_listPtr H,int location)
{
if(H==NULL || Link_list_Empty(H) || location<0 || location>H->len)
{
printf("anywhere delete failed!\n");
return;
}
printf("anywhere delete successfully!\n");
Link_listPtr S=H;
Link_listPtr P=H;
// Link_listPtr *A=get_Ptr(P,location);
for(int i=0;i<(location-1);i++)
{
S=S->next;
}
for(int j=0;j<location;j++)
{
P=P->next;
}
S->next=P->next;
free(P);
H->len--;
// Link_list_Free(H,A);
}
void modfiy_Bylocation(Link_listPtr H,int location,Datatype mod_date)
{
if(H==NULL || Link_list_Empty(H) || location<0 || location>H->len)
{
printf("modfiy by location failed!\n");
return;
}
printf("modfiy by location successfully!\n");
Link_listPtr P=H;
for(int i=0;i<location;i++)
{
P=P->next;
}
P->date=mod_date;
}
void modfiy_Byvalue(Link_listPtr H,Datatype org_data,Datatype mod_date)
{
if(H==NULL || Link_list_Empty(H))
{
printf("modfiy by value failed!\n");
return;
}
printf("modfiy by value failed!\n");
Link_listPtr P=H->next;
while(P->date!=org_data)
{
P=P->next;
}
P->date=mod_date;
}
Link_listPtr *find_Byvalue(Link_listPtr H,Datatype org_data)
{
if(H==NULL || Link_list_Empty(H))
{
printf("find by value failed!\n");
return NULL;
}
printf("find by value successfully!\n");
Link_listPtr P=H->next;
while(P->date!=org_data)
{
P=P->next;
}
Link_listPtr *S=&P;
return S;
}
void Link_list_Reverse(Link_listPtr H)
{
if(H==NULL || H->len<1)
{
printf("reverse failed!\n");
return;
}
printf("reverse successfully!\n");
Link_listPtr P=H->next->next;
H->next->next=NULL;
while(P!=NULL)
{
Link_listPtr S=P->next;
P->next=H->next;
H->next=P;
P=S;
}
}
Link_listPtr Link_list_Destroy(Link_listPtr H)
{
if(H==NULL)
{
printf("destroy Link list failed!\n");
return NULL;
}
printf("destroy Link list successfully!\n");
for(int i=H->len;i<0;i--)
{
Link_listPtr *S=get_Ptr(H,i);
free(*S);
H->len--;
}
free(H);
H=NULL;
return H;
}
/*void Link_list_Free(Link_listPtr H,Link_listPtr *S)
{
if(H==NULL)
{
printf("free failed!\n");
return;
}
printf("free successfully!\n");
Link_listPtr P=*S;
free(P);
P=NULL;
}*/