目录
作业1:完成尾删函数:int list_delete_tail(Linklist *L);
作业2:完成按位置修改函数 : int list_update_pos(Linklist *L, int pos, datatype e);
作业3:完成按值修改函数: int list__update_value(Linklist *L, datatype old_e, datatype new_e);
作业4:完成链表反转函数:void list_reverse(Linklist *L);
作业1:完成尾删函数:int list_delete_tail(Linklist *L);
//尾删
int list_delete_tail(Linklist *L)
{
if(NULL ==L || list_empty(L))
{
printf("删除失败\n");
return -1;
}
int temp=L->len-1;
Linklist *q=find_node(L,temp);
Linklist *p=q->next;
q->next = p->next;
free(p);
p=NULL;
L->len--;
printf("尾删成功\n");
return 0;
}
作业2:完成按位置修改函数 : int list_update_pos(Linklist *L, int pos, datatype e);
//按位置修改
int list_update_pos(Linklist *L,int pos,datatype e)
{
if(NULL ==L || pos<0 || pos>L->len)
{
printf("修改失败\n");
return -1;
}
Linklist *q=L;
for(int i=1;i<=pos;i++)
{
q=q->next;
}
q->data=e;
printf("按位置查找成功\n");
return 0;
}
作业3:完成按值修改函数: int list__update_value(Linklist *L, datatype old_e, datatype new_e);
//按值修改
int list_update_value(Linklist *L,datatype old_e,datatype new_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 == old_e)
{
q->data = new_e;
}
q=q->next;
}
printf("按值修改成功\n");
return 0;
}
作业4:完成链表反转函数:void list_reverse(Linklist *L);
//反转
void list_reverse(Linklist *L)
{
if(NULL == L || list_empty(L))
{
printf("反转失败\n");
return;
}
Linklist *q=L->next;
L->next=NULL;
while(q != NULL)
{
list_insert_head(L,q->data);
q=q->next;
}
printf("翻转成功\n");
}
运行结果:
全部增删改查的代码 linklist.c
#include<stdio.h>
#include"linklist.h"
#include<stdlib.h>
//创建
Linklist *list_create()
{
Linklist* L=(Linklist*)malloc(sizeof(Linklist));
if(NULL == L)
{
printf("创建失败\n");
return NULL;
}
//初始化
L->len = 0;
L->next = NULL;
printf("创建成功\n");
return L;
}
//判空
int list_empty(Linklist *L)
{
//1表示空 0表示非空
return NULL==L->next ? 1: 0;
}
//头插
int list_insert_head(Linklist *L,datatype e)
{
//判断条件
if(NULL == L)
{
printf("所给链表不合法!\n");
return -1;
}
//申请节点
Linklist *P=(Linklist*)malloc(sizeof(Linklist));
if(NULL==P)
{
printf("节点申请失败\n");
return -1;
}
//将要插入的数据放入节点
P->data = e;
P->next = NULL;
//完成头插
P->next = L->next;
L->next = P;
//表的变化
L->len++;
printf("头插成功\n");
}
//遍历
void list_show(Linklist *L)
{
if(NULL==L || list_empty(L))
{
printf("表空,遍历失败\n");
return;
}
printf("元素:");
Linklist *q=L->next;
while(q!=NULL)
{
printf("%c\t",q->data);
q=q->next;
}
printf("\n");
}
//定义申请节点函数
Linklist * node_buy(datatype e )
{
Linklist *p=(Linklist *)malloc(sizeof(Linklist));
if(NULL == p)
{
printf("节点申请失败\n");
return NULL;
}
p->data =e;
p->next = NULL;
return p;
}
//尾插
int list_insert_tail(Linklist *L,datatype e)
{
if(NULL== L)
{
printf("所给链表不合法\n");
return -1;
}
Linklist *p=node_buy(e);
Linklist *q=L;
while(q->next != NULL)
{
q=q->next;
}
q->next=p;
L->len++;
printf("尾插成功\n");
return 0;
}
//任意插
int list_insert_pos(Linklist *L,int pos,datatype e)
{
//判断逻辑
if(NULL ==L || pos<1 || pos>L->len+1)
{
printf("插入失败\n");
return -1;
}
//申请节点存放数组
Linklist *p=node_buy(e);
//查找要插入的位置的前驱节点
Linklist *q=find_node(L,pos-1);
p->next=q->next;
q->next =p;
L->len++;
printf("插入成功\n");
return 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;
}
//头删
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);
L->len--;
printf("头删成功\n");
return 0;
}
//尾删
int list_delete_tail(Linklist *L)
{
if(NULL ==L || list_empty(L))
{
printf("删除失败\n");
return -1;
}
int temp=L->len-1;
Linklist *q=find_node(L,temp);
Linklist *p=q->next;
q->next = p->next;
free(p);
p=NULL;
L->len--;
printf("尾删成功\n");
return 0;
}
//任意删
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 = 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_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;
}
//销毁链表
void list_free(Linklist *L)
{
if(NULL == L)
{
return;
}
while(L->next != NULL)
{
list_delete_head(L);
}
free(L);
L=NULL;
printf("释放成功\n");
return;
}
//按位置修改
int list_update_pos(Linklist *L,int pos,datatype e)
{
if(NULL ==L || pos<0 || pos>L->len)
{
printf("修改失败\n");
return -1;
}
Linklist *q=L;
for(int i=1;i<=pos;i++)
{
q=q->next;
}
q->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;
}
Linklist *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 0;
}
//反转
void list_reverse(Linklist *L)
{
if(NULL == L || list_empty(L))
{
printf("反转失败\n");
return;
}
Linklist *q=L->next;
L->next=NULL;
while(q != NULL)
{
list_insert_head(L,q->data);
q=q->next;
}
printf("翻转成功\n");
}
版权声明:本文为weixin_51103493原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。