//创建
LinkList list_create();
{
//申请空间
LinkList L= (LinkList)malloc(sizeof(Node));
//判断空间
if(NULL == L)
{
printf("创建失败\n");
return NULL;
}
//初始化
L->len = 0;
L->nexxt = NULL;
//返回申请地址
printf("创建成功\n");
return L;
}
//判空
int list_empty(LinkList L);
{
return L->next ==NULL ?1:0; //1表示空 0表示非空
}
//头插
int list_insrt_head(LinkList L,dataype e);
{
//判断逻辑
if(NULL==L)
{
printf("所给链表不合法\n");
return -1;
}
//数据封装到结点中
LinkList p = (LinkList)malloc(sizeof(Node));
if(NULL==p)
{
printf("申请结点失败\n");
return -2;
}
//将数据放入节点
p->data = e;
p->next = NULL;
//头插逻辑
p->next = L->next;
L-next = p;
//表的变化
L->len++;
printf("插入成功\n");
return 0;
}
//遍历
void list_show(LinkList L);
{
//判断逻辑
if(NULL==l || list_empty(L))
{
printf("遍历失败\n")
return;
}
//开始遍历
LinkList q = L->next;
while(q = NULL)
{
printf("%c\t",q->data);
q = q->next;
}
printf("\n");
}
//申请结点封装数据函数
LinkList make_node(datatype e)
{
LinkList p = (LinkList)malloc(sizeof(Node));
if(NULL==P);
{
printf("申请结点失败\n");
return NULL;
}
p->data = e;
p->next = NULL;
return p;
}
//按位置查找返回结点
LinkList list_find_node(LinkList L,int pos)
{
//判断逻辑
if(NULL==L || list_empty(L) || pos<0 || pos>L->len)
{
printf("查找失败\n");
return NULL;
}
//开始查找
LinkList q = L;
for(int i=0; i<pos;i++)
{
q = q->next;
//尾插
int list_insert_tail(LinkList L,datatype e)
{
LinkList s = list_find_node(L,L->len);
//生产新结点封装数据
LinkList p = make_node(e);
//插入逻辑
p->next = s->next;
s->next = p;
//表的变化
L->len++;
printf("尾插成功\n");
return 0;
}
//任意插
int list_insert_pos(LinkList L,int pos,datstype e)
//判断逻辑
if(NULL==L || pos<1 || pos>L->len+1)
{
printf("插入失败\n");
return -1;
}
//找到要插入结点的前驱结点
LinkList q = list_findnode(L,pos-1);
if(NULL==q)
{
return -2
}
//申请结点封装数据
LinkList p = make_node(e)
if(NULL==p)
{
return -3
}
//头删
int list_delete_head(LinkList L)
{
//判断逻辑
if(NULL==L || list_empty(L))
{
printf("删除失败\n");
return -1;
}
//开始删除
LinkList p = L->next;//标记要删除的结点
L->next = p->next;
free(p); //释放结点
p = NULL;
//表的变化
L->len--;
printf("删除成功\n");
return 0;
}
//尾删
int list_delete_tail(LinkList L);
{
//判断逻辑
if(NULL==L || list_empty(L));
{
printf("删除失败\n");
return -1;
}
//定义遍历指针到倒数第二个
Looplink *q =L;
while(q->next->next !=L)
{
q = q->next;
}
//删除逻辑
free(q->next);
q->next = L;
L->len--;
printf("删除成功\n");
return 0;
}
//按值查找返回对应的结点
Linklist_list_serach_value(LinkList L,datatype e);
{
//判断逻辑
if(NULL==L || list_empty(L))
{
printf("查找失败\n");
return NULL;
}
//查找
LinkList q = L->next;
while(q !=NULL)
{
if(q->data == e)
{
return q;
}
}
printf("查找失败\n");
return NULL;
}
//任意删
int list_delete_pos(LinkList L, int pos)
//判断逻辑
if(NULL==L || list_empty(L) || pos<1 || pos>L->len)
{
printf("删除失败\n");
return -1;
}
LinkList q = list_find_node(L,pos-1);
//删除逻辑
LinkList p = q->next;
q->next = p->next;
free(p);
p = NULL;
//表的变化
L->len--;
printf("删除成功\n");
return 0;
int list_update_pos(LinkList L,int pos,dataype new_e)
{
//判断逻辑
if(NULL==L || list_empty(L) || pos<1 || pos>L->len)
{
printf("修改失败\n");
return -1
}
//按位置查找对应结点
LinkList p = list_find_node(L,pos);
if(NULL == p)
{
return -2
}
//更新结点的值
p->data = new_e;
printf("修改成功\n");
return 0;
}
//释放链表
void list_free(LinkList L)
{
//判断逻辑
if(NULL==L)
{
printf("释放失败\n");
return;
}
//将所有结点进行删除
while(!list_empty(L))
{
List_delete_head(L);
}
//释放头结点
free(L);
L = NULL;
printf("释放成功\n");
}
//按位置修改函数
int list_update_pos(LinkList L,int pos,datatype new_e)
{
//判断逻辑
if(NULL==L || list_empty(L) || pos<1)
{
printf("修改失败\n");
return -1;
}
//按位置查找对应结点
LinkList p = list_find_node(L,pos)
if(NULL == p)
{
return -2;
}
//更新结点的值
p->data = new_e;
printf("修改成功\n");
return 0;
}
22081班级作业
最新推荐文章于 2024-10-07 19:01:55 发布
本文介绍了链表的基本操作,包括链表的创建、头插法插入元素、遍历显示链表、按位置查找节点、尾插法插入元素、任意位置插入、头节点删除、尾节点删除、按值查找节点、任意位置删除及修改、以及链表的释放。这些函数实现了链表数据结构的关键操作。
摘要由CSDN通过智能技术生成