动态创建链表

#include <stdio.h>
#include <stdlib.h>
//使用结构体类型,动态创建链表,查找,插入,删除
typedef struct list
{
int data;
struct list *next;
}LIST;//typedef重命名 将结构体类型命名为LIST

//创建链表
LIST *creat_list()
{
int c;
LIST *head,*s,*r;
head =(LIST *)malloc(sizeof(LIST));//生成头结点
r=head;
scanf(“%d”,&c);//用户输入数据
while(c!=-1)//看到-1循环结束
{
s=(LIST *)malloc(sizeof(LIST));//生成新的结点
s->data=c;
r->next=s;//新节点连接到链表的末尾,关键
r=s;//r始终指向旧结点,s始终指向新节点,关键
scanf(“%d”,&c); //用户输入数据
}
r->next=‘\0’;//链表的结束标志
return head;//返回链表的头节点
}

//输出链表
void print_list(LIST *head)
{
LIST *p;
p=head->next;//p指向头节点的第一个结点,头节点不带数据
if(p==‘\0’) printf(“链表是空的!”);
else
{
printf(“head”);
while(p!=‘\0’)
{
printf(“–>%d”,p->data);
p=p->next;//p指向下一个节点,关键
}
printf(“–>end\n”);
}
}

//插入结点
void insert_node(LIST *head,int x,int y)
{
LIST *s,*p,*q;
s=(LIST *)malloc(sizeof(LIST));
s->data=y;//新节点存入y
q=head;
p=q->next;//p指向第一个结点
while((p!=‘\0’)&&(p->data!=x))//循环结束条件 p为空或者找到x
{
q=p;//关键
p=p->next;//关键

 } 

    s->next=p;//关键 
    q->next=s;//关键 //如果x存在,就插入x之前,如果x不存在,就插到链表末尾 	 

}

//删除结点
void delete_node(LIST *head,int z)
{
LIST *p,*q;
q=head;
p=q->next;//p指向第一个结点
while((p!=‘\0’)&&(p->data!=z))
{

	q=p;//关键
	p=p->next;//关键
	
 } 
if (p=='\0') printf("不存在值为%d的结点\n",z);
else 
{
	q->next=p->next;//关键 
	free(p);//关键 
}

}

int main() {
LIST *head;
int x ,y,z;
head= creat_list();//创建链表
print_list(head);//输出链表
printf(“请输入要查找的值\n”);
scanf(“%d”,&x);
printf(“请输入要插入的值\n”);
scanf(“%d”,&y);
insert_node(head,x,y);
print_list(head);//输出链表
printf(“请输入要删除的值\n”);
scanf(“%d”,&z);
delete_node(head,z);
print_list(head);//输出链表
return 0;

}
在这里插入图片描述

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值