C语言实现单链表创建、删除、查找、插入
本文将详细的介绍C语言单链表的创建、删除、查找、插入以及输出功能
一、创建
#include
#includetypedef int ElemType;
/*结构体部分*/
typedef struct Node
{
ElemType data;
//数值域
struct Node *next;
//指针域
}Linklist;
Linklist *InitList(Linklist *L)//初始化单链表
{
L = (Linklist *) malloc(sizeof(Linklist));
L->next = NULL;
return L;
}Linklist *CreateList(int n)
{
/*通过输入n个数据,创建一个单链表*/
int x,i;
Linklist *L,*r,*p;
L = InitList(L);
//构造头结点
r = L;
printf("input %d value: ",n);
for(i=0;
i data = https://www.it610.com/article/x;
p -> next = NULL;
r->next = p;
r = r->next;
//指针r始终指向链表中末数据元素所在位置}
return L;
}
二、插入
int InsItem1(Linklist *L,ElemType item,int x) /*给定的序号来插入*/
{
int i = 1;
Linklist *p,*t;
p = L;
t = (Linklist *)malloc(sizeof(Linklist));
t ->data = https://www.it610.com/article/item;
if(L->next==NULL)
{/*若L为空表且要求将新结点插入到第0个位置*/
if(x==1)
{
L->next=t;
t->next=NULL;
return 1;
}
/*若L为空表且要求将新结点插入到第非0个位置,则操作失败*/
else
{
printf("wrong!\n");
return 0;
}
}
while(p->next!=NULL&&inext;
i++;
}
if(p->next==NULL&&inext = p->next;
p->next = t;
return 1;
}
}int InsItem2(Linklist *L,ElemType item,ElemType k) /*插入给定值在链表中的位置*/
{
Linklist *q,*p,*t;
t = (Linklist *)malloc(sizeof(Linklist));
t->data = https://www.it610.com/article/item;
if(L->next==NULL)
{
printf("The linklist is empty\n");
return 0;
}
else
{
q = L;
p = L->next;
while(p->next!=NULL)/*查找值为k的结点*/
{
if(p->data!=k)
{
q = p;
p = p->next;
}
else
break;
}
if(p==NULL)/*如p= =NULL,则没有值为k的结点,插入操作失败*/
{
printf("The node %d is not exist\n",k);
return 0;
}
else
{
q->next = t;
t->next = p;
return 1;
}
}
}
三、删除
int DelItem(Linklist *L,int x)
//在单链表中删除数据元素
{
int i = 1;
Linklist *p,*q;
p = L;
if(L->next==NULL) /*L为空表,无结点可删除*/
{
printf("The linklist is empty!\n");
return 0;
}
while(p->next!=NULL&&inext;
i++;
}
if(p->next==NULL)
/*若没有第i个结点,则删除操作失败*/
{
printf("The node %d is not exist\n",x);
return 0;
}
else
{
q = p->next;
p->next = p->next->next;
free(q);
return 1;
}}
四、查找
int LocItem(Linklist *L,ElemType x)
//查找给定值的结点位置
{
Linklist *p,*q,*r;
int i = 1;
if(L->next==NULL)
{
printf("The linklist is empty\n");
return 0;
}
else
{
p = L->next;
while(p!=NULL)
{
if(p->data!=x)
{
i++;
p = p->next;
}
else
break;
}
if(p==NULL)
/*如p= =NULL,则没有值为item的结点,删除操作失败*/
{
printf("The node %d is not exist\n",x);
return 0;
}
/*若找到该节点返回该节点的位置*/
else
return i;
}
}
五、输出
void output(Linklist *L) //输出
{
Linklist *p;
p = L->next;
printf("output element: \n");
for(;
p!=NULL;
p=p->next)
{
printf(" %d ",p->data);
}
printf("\n");
}
【C语言实现单链表创建、删除、查找、插入】六、主函数部分
int main()
{
ElemType x = 5;
Linklist *L;
L = CreateList(x);
output(L);
InsItem1(L,3,2);
output(L);
InsItem1(L,3,4);
output(L);
DelItem(L,3);
output(L);
printf("3的位置是: %d",LocItem(L,3));
}
推荐阅读
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- MybatisPlus使用queryWrapper如何实现复杂查询
- python学习之|python学习之 实现QQ自动发送消息
- 【生信技能树】R语言练习题|【生信技能树】R语言练习题 - 中级
- 孩子不是实现父母欲望的工具——林哈夫
- 一起来学习C语言的字符串转换函数
- C语言字符函数中的isalnum()和iscntrl()你都知道吗
- opencv|opencv C++模板匹配的简单实现
- C语言浮点函数中的modf和fmod详解
- Node.js中readline模块实现终端输入