C语言实现链表的头插,尾插,插入,修改,删除和遍历

这篇博客详细介绍了如何使用C语言实现链表的各种操作,包括条件头插创建链表、条件尾插创建链表、循环头插创建链表、循环尾插创建链表、插入节点、修改节点、删除节点以及遍历节点。通过示例代码展示了每个操作的具体实现步骤。
#include "stdio.h"
#include "stdlib.h"
#define N sizeof(struct node)


//链表结构体
typedef struct node{
struct node *next;
int data;
}*pnode;


//条件创建链表(头插)
pnode create1(){
pnode head,p,q;
    p=q=(pnode)malloc(N);
q=NULL;
scanf("%d",&p->data);
while(p->data!=0){
p->next=q;
q=p;
p=(pnode)malloc(N);
scanf("%d",&p->data);
}
head=q;
return head;
}


//条件创建链表(尾插)
pnode create2(){
pnode head,p,q;
p=q=(pnode)malloc(N);
head=NULL;
q->next=NULL;
    scanf("%d",&p->data);
    while(p->data!=0){
if(head==NULL)
head=p;
else
   q->next=p;
q=p;
p=(pnode)malloc(N);
scanf("%d",&p->data);
}
q->next=NULL;
return head;
}


//链表的循环(头插)
pnode precreate(int n){
pnode p,head,q;
q=(pnode)malloc(N);
q=NULL;
int i;
for(i=1;i<=n;i++)
{
p=(pnode)malloc(N);
scanf("%d",&p->data);
p->next=q;
q=p;
}
head=q;
return head;
}


//链表的循环(尾插)
pnode aftcreate(int n){
pnode head,p,q;
q=(pnode)malloc(N);
head=NULL;
int i;
for(i=1;i<=n;i++)
{
p=(pnode)malloc(N);
scanf("%d",&p->data);
if(head==NULL)
head=p;
else
q->next=p;
q=p;
}
q->next=NULL;
return head;
}


//链表的插入节点
pnode insert(pnode head,int k){
pnode p,q;
    p=q=(pnode)malloc(N);
p=head;
while(p->data!=k){
p=p->next;
}
if(p->data==k)
{
printf("请输入你想插入的数据:\n");
scanf("%d",&q->data);
q->next=p->next;
p->next=q;
}
else
printf("链表中不存在这个数:\n");
return head;
}


//链表的修改节点
pnode alter(pnode head,int m)
{
pnode p;
p=(pnode)malloc(N);
p=head;
while(p->data!=m)
{
p=p->next;
}
if(p->data==m)
{
printf("请输入你想修改为什么数:\n");
scanf("%d",&p->data);
}
else
printf("链表中不存在这个数据!\n");
return head;
}


//链表之删除节点
pnode del(pnode head,int a)
{
pnode p,q;
p=q=(pnode)malloc(N);
p=head;
while(p->data!=a)
{
q=p;
p=p->next;
}
if(p->data==a)
{
q->next=p->next;
free(p);
}
else
printf("在链表中没有找到这个数据!\n");
return head;
}


//链表之遍历节点
void show(pnode head)
{
pnode p;
p=(pnode)malloc(N);
p=head;
if(p==NULL)
printf("链表为空");
else
   while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}


//计算链表的节点
int sum(pnode head)
{
pnode p;
int j=0;
p=(pnode)malloc(N);
p=head;
while(p!=NULL)
{
  p=p->next;
j++;
}
return j;
}
int main()
{
    pnode head;
int n,k,m,a,i;
do{
printf("********************************************\n");
printf("1.条件头插创建链表输入0结束\n2.条件尾插创建链表输入0结束\n3,循环头插创建链表\n4.循环尾插创建链表\n");
printf("5.插入节点\n6.修改节点\n7.删除节点\n8.遍历节点\n9.节点的计算\n10.退出程序\n");
printf("********************************************\n");
printf("请输入你的选择:\n");
scanf("%d",&i);
switch(i){
case 1:
printf("请输入你想输入链表的数据:\n");
                head=head=create1();
 break;
case 2:
printf("请输入你想输入链表的数据:\n");
head=create2();
break;
case 3:
printf("循环创建链表请输入创建链表的节点数:\n");
scanf("%d",&n);
head=precreate(n);
break;
case 4:
                printf("循环创建链表请输入创建链表的节点数:\n");
scanf("%d",&n);
                head=aftcreate(n);
break;
case 5:
                printf("请输入你想在那个数据后面插入数据;\n");
scanf("%d",&k);
insert(head,k);
break;
case 6:
                printf("请输入你想修改哪一个数据!\n");
scanf("%d",&m);
alter(head,m);
break;
case 7:
                printf("请输入你想删除的数据:\n");
scanf("%d",&a);
del(head,a);
break;
case 8:
show(head);
break;
case 9:
printf("链表的节点个数为%d\n",sum(head));
break;
case 10:
break;
}

}while(i!=10);
return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值