链表
结构体的".h"文件
#ifndef __LINKLIST_H__
#define __LINKLIST_H__
typedef char datatype;
typedef struct Node
{
union
{
datatype data;
int len;
};
struct Node *next;
}Linklist;
#endif
尾删函数
int list_delete_tail(Linklist *L)
{
if(NULL==L || list_empty(L))
{
printf("表空,删除失败\n");
return -1;
}
Linklist *q=L,*t;
while (q->next!=NULL)
{
t=q;
q=q->next;
}
free(q);
q=NULL;
t->next=NULL;
L->len--;
return 0;
}
按位置修改函数
int list_update_pos(Linklist *L, int pos, datatype e)
{
if(NULL==L || list_empty(L) ||pos<1||pos>L->len )
{
printf("修改失败\n");
return -1;
}
Linklist *p=find_node(L, pos);
p->data=e;
printf("修改成功\n");
return 0;
}
按值修改函数
int list__update_value(Linklist *L, datatype old_e, datatype new_e)
{
if(NULL==L||list_empty(L))
{
printf("修改失败\n");
return -1;
}
int res=list_search_value(L,old_e);
if(res==0)
{
printf("链表内无该元素\n");
return -2;
}
Linklist *p=find_node(L,res);
p->data=new_e;
printf("修改成功\n");
return 0;
}
链表反转函数
void list_reverse(Linklist *L)
{
if( NULL==L ||list_empty(L) )
{
printf("链表为空,反转失败\n");
return;
}
for(int i=1;i<=L->len/2;i++)
{
Linklist *a=find_node(L,i);
Linklist *b=find_node(L,L->len-i+1);
datatype e=a->data;
a->data=b->data;
b->data=e;
}
}
辅助函数
判空
int list_empty(Linklist *L)
{
return NULL==L->next?1:0;
}
按位置查找,返回查找到的节点
Linklist *find_node(Linklist *L,int pos)
{
if(NULL==L || pos<0 || pos >L->len)
{
printf("查找失败\n");
return NULL;
}
Linklist *q=L;
for (int i=1;i<=pos;i++)
{
q=q->next;
}
return q;
}
按值查找第1个查找成功的位置
int list_search_value(Linklist *L,datatype e)
{
if(NULL==L || list_empty(L))
{
printf("查找失败\n");
return -1;
}
Linklist *q=L->next;
for(int i=1;i<=L->len;i++)
{
if(q->data==e )
{
return i;
}
q=q->next;
}
return 0;
}