单链表基本操作(尾插,头插,删除,查找,修改,打印)
作者:互联网
1创建单链表代码
#include<stdio.h>
#include <stdlib.h>
//define a struct
//定义一个结构体,也就是节点
typedef struct Node {
int data; // 存储链表数据
struct Node *next; // 存储结点的地址
}LNode,*LinkList;
2头插法以及尾插法创建代码
//头插法创建单链表(注释的为头插法)
LNode* List_HeadCreate(LNode* L)
{/*L–>next=NULL;如果使用头插法不能省略*/
int x;
L = (LNode*)malloc(sizeof(LNode));
LNode *s,*r=L;
int z;
do{ printf("写入数据");
scanf("%d",&x);
s=(LNode*)malloc(sizeof(LNode));
/*核心代码*/
/*s->next = L->next;
L->next = s; 头插法操作*/
s->data=x;
r->next=s;
r=s;/尾插法操作
printf("是否继续录入0/1");
scanf("%d",&z);
if(z==0)
break;
}while(1);
r->next=NULL;/*进行尾插时不能省略
return L;
}
头插法图解(这里的s指针相当于p);
尾插法图解(这里的p指针相当于s)
3删除操作(关键在于前驱节点与后驱节点)
LNode*List_deletele(LNode*L)//删除操作
{ LNode*node=L;
LNode*p;
printf("写入删除的数据");
int x;
scanf("%d",&x);
do {
if( node->next->data==x)
{p=node->next;
node->next=node->next->next;
free(p);
p=NULL;
node=node->next;
}
else
{
node=node->next; }
}while(node->next!=NULL);
return L;}
4查找操作(无非就是遍历)
LNode*List_find(LNode*L)//查找操作
{printf("输入要查找的数据");
int a;
int b;
LNode*H;
H=L;
scanf("%d",&a);
do
{
if(H->data==a)
printf("%d",H->data);
H=H->next;
} while(H->next!=NULL);
return L;
}
5修改数据(就是遍历加改数据)
LNode*List_changllege(LNode*L)
{
LNode*p=L;
int x;
int h;
printf("输入修改的数据");
scanf("%d",&x);
printf("修改为的数据");
scanf("%d",&h);
do{
if(p->data==x)
{ p->data=h;
p=p->next;
}
else
{ p=p->next;
}
} while(p->next!=NULL);
return L;
}
6插入数据(利用头插法操作)
LNode*List_insert(LNode*L)
{ LNode *s;
int b;
int arr;
do{
s = (LNode*)malloc(sizeof(LNode));
printf("写入数据");
scanf("%d",&arr);
s->data = arr;//将新增节点存放上数据
s->next = L->next;//连接s的后继
L->next = s;//连接s的前驱h
printf("是否继续插入");
scanf("%d",&b);
if(b==0)
break;}while(1);
return L;
}
7主函数
//主函数,给链表赋值并打印出链表
main(){
LNode *L = NULL;
int arr;
int h=0;
int select;
printf("----主菜单----\n");
printf( "--1写入数据--\n");
printf("--2打印数据--\n");
printf("--3插入数据--\n");
printf("--4删除数据--\n");
printf("--5查找数据--\n");
printf("--6修改数据--\n");
printf("--7退出--");
do
{printf("\n写入选项");
scanf("%d",&select);
{
if(select==1) L = List_HeadCreate(L,arr,h);
if(select==2) L=List_printf(L);
if(select==3) L=List_insert(L);
if(select==4) L=List_deletele(L);
if(select==5) L=List_find(L);}
if(select==6) L=List_changllege(L);
if(select==7) printf("欢迎下次使用");break;}while(1);
}
7完整代码
#include<stdio.h>
#include <stdlib.h>
//define a struct
//定义一个结构体,也就是节点
typedef struct Node {
int data; // 存储链表数据
struct Node *next; // 存储结点的地址
}LNode,*LinkList;
LNode*List_changllege(LNode*L)
{
LNode*p=L;
int x;
int h;
printf("输入修改的数据");
scanf("%d",&x);
printf("修改为的数据");
scanf("%d",&h);
do{
if(p->data==x)
{ p->data=h;
p=p->next;
}
else
{ p=p->next;
}
} while(p->next!=NULL);
return L;
}
//头插法创建单链表
LNode* List_HeadCreate(LNode* L,int arr,int h)
{
int x;
L = (LNode*)malloc(sizeof(LNode));
LNode *s,*r=L;
int z;
do{ printf("写入数据");
scanf("%d",&x);
s=(LNode*)malloc(sizeof(LNode));
/*核心代码*/
/*s->next = L->next;
L->next = s; 头插法操作*/
s->data=x;
r->next=s;
r=s;
printf("是否录入");
scanf("%d",&z);
if(z==0)
break;
}while(1);
r->next=NULL;
return L;
}
LNode*List_printf(LNode*L)//打印操作
{
LinkList p;
p=L->next;
printf("链表元素\n");
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
LNode*List_find(LNode*L)//查找操作
{printf("输入要查找的数据");
int a;
int b;
LNode*H;
H=L;
scanf("%d",&a);
do
{
if(H->data==a)
printf("%d",H->data);
H=H->next;
} while(H->next!=NULL);
return L;
}
LNode*List_deletele(LNode*L)//删除操作
{ LNode*node=L;
LNode*p;
printf("写入删除的数据");
int x;
scanf("%d",&x);
do {
if( node->next->data==x)
{p=node->next;
node->next=node->next->next;
free(p);
p=NULL;
node=node->next;
}
else
{
node=node->next; }
}while(node->next!=NULL);
return L;}
LNode*List_insert(LNode*L)
{ LNode *s;
int b;
int arr;
do{
s = (LNode*)malloc(sizeof(LNode));
printf("写入数据");
scanf("%d",&arr);
s->data = arr;//将新增节点存放上数据
s->next = L->next;//连接s的后继
L->next = s;//连接s的前驱h
printf("是否继续插入");
scanf("%d",&b);
if (b==0)
break;}while(1);
return L;
}
//主函数,给链表赋值并打印出链表
main(){
LNode *L = NULL;
int arr;
int h=0;
int select;
printf("----主菜单----\n");
printf( "--1写入数据--\n");
printf("--2打印数据--\n");
printf("--3插入数据--\n");
printf("--4删除数据--\n");
printf("--5查找数据--\n");
printf("--6修改数据--\n");
printf("--7退出--");
do
{printf("\n写入选项");
scanf("%d",&select);
{
if(select==1) L = List_HeadCreate(L,arr,h);
if(select==2) L=List_printf(L);
if(select==3) L=List_insert(L);
if(select==4) L=List_deletele(L);
if(select==5) L=List_find(L);}
if(select==6) L=List_changllege(L);
if(select==7) printf("欢迎下次使用");break;}while(1);
}
运行如下
第一次写博客哈,不足多多指教
标签:单链,LNode,--,List,next,int,查找,printf,基本操作 来源: https://blog.csdn.net/qq_60304505/article/details/122815824