头文件
#ifndef _LLJ_H_
#define _LLJ_H_
typedef char datatype; //类型重命名
typedef struct Node
{
union
{
datatype data;
int len;
};
struct Node *next;
}Node,*Linklistptr;
//创建链表
Linklistptr list_create();
//判空操作
int list_empty(Linklistptr L);
//申请结点封装数据函数
Linklistptr node_buy(datatype e);
//头插
int list_insert_head(Linklistptr L,datatype e);
//遍历
void list_show(Linklistptr L);
//尾插
int list_insert_tail(Linklistptr L,datatype e);
//任意位置插入
int list_insert_post(Linklistptr L,int pos,datatype e);
//头删
int list_delete_head(Linklistptr L);
//尾删
int list_delete_tail(Linklistptr L);
//任意位置删除
int list_delete_pos(Linklistptr L,int pos);
//按位置查找返回结点
Linklistptr list_search_pos(Linklistptr L,int pos);
//按值查找返回节点位置
int list_search_value(Linklistptr L,datatype e);
//按位置进行修改
int list_update_pos(Linklistptr L,int pos,datatype e);
//按值进行修改
int list_update_value(Linklistptr L,datatype old_e,datatype new_e);
//链表排序
void list_paixu(Linklistptr L);
//链表的反转
void list_reverse(Linklistptr L);
//递归实现链表的反转
//返回链表长度
int list_length(Linklistptr L);
//链表的销毁
void list_free(Linklistptr L);
#endif
源文件
//按位置进行修改
int list_update_pos(Linklistptr L,int pos,datatype e)
{
if(NULL==L||list_empty(L)||pos<0||pos>L->len)
{
printf("修改失败\n");
return 0;
}
Linklistptr q=list_search_pos(L,pos);
q->data=e; //修改
printf("修改成功\n");
return 1;
}
//按值进行修改
int list_update_value(Linklistptr L,datatype old_e,datatype new_e)
{
if(NULL==L||list_empty(L)||old_e==new_e)
{
printf("修改失败\n");
return 0;
}
Linklistptr q=L->next; //找到第一个结点
for(int i=1;i<L->len;i++) //遍历所有结点
{
if(q->data==old_e)
{
q->data=new_e;
}
q=q->next;
}
printf("按值修改成功\n");
return 1;
}
//链表的排序
void list_paixu(Linklistptr L)
{
if(NULL==L||list_empty(L))
{
printf("排序失败\n");
}
char temp;
Linklistptr q=L->next;
for(int i=1;i<L->len;i++)
{
q=L->next;
for(int j=1;j<L->len;j++)
{
if(q->data-'A' > q->next->data-'A')
{
temp=q->data;
q->data=q->next->data;
q->next->data=temp;
}
q=q->next;
}
}
}
测试文件
int main(int argc, const char *argv[])
{
Linklistptr L=list_create();
if(NULL == L)
{
return -1;
}
//调用头插函数
list_insert_head(L,'Q');
list_insert_head(L,'W');
list_insert_head(L,'E');
list_insert_head(L,'R');
/* //调用遍历函数
list_show(L);
//调用任意位置插入函数
list_insert_post(L,3,'D');
//调用尾插函数
list_insert_tail(L,'G');
//调用头删函数
list_delete_head(L);
//调用任意位置删除函数
list_delete_pos(L,3);
//调用尾删函数
list_delete_tail(L); */
//调用按位置进行修改函数
list_update_pos(L,3,'A');
//按值进行修改
list_update_value(L,'R','B');
//链表的排序
list_paixu(L);
//遍历
list_show(L);
//释放空间
list_free(L);
L=NULL;
list_show(L);
return 0;
}