链表(实现)

学习完链表整理思路后的一个代码实现,只是对基本的增删改查进行实验。(代码小白)
如有错误在评论区指出,会及时进行修改

在这里插入代码片
#include<stdio.h>
#include<stdlib.h>
#define true 1
#define false 0
typedef struct Node{
	int data;
	struct Node *next;
}Node;
void createlist(Node *head,int size); //创建 
void addpoint(Node *head,int value);//增 
int findpoint(Node *head,int value);//查(有返回值)
void modifyprint(Node *head,int position,int value);//修改 
void printlist(Node *head);//打印 
void deletepoint(Node *head,int position);//删 
void insertpoint(Node *head);//插入 
void deletelist(Node *head);//全删 
int main()
{
	Node *head=(Node*)malloc(sizeof(Node));
	head->data=0;
	head->next=NULL;
	int size;
	printf("创建大小:");
	scanf("%d",&size);
	int value,position;
	createlist(head,size);
	printlist(head);
	printf("末尾增加的:"); 
	scanf("%d",&value);
	addpoint(head,value);
	printlist(head);
	printf("要删除的位置:"); 
	scanf("%d",&position);
	deletepoint(head,position);
	printlist(head);
	printf("要修改的位置及元素");
	scanf("%d %d",&position,&value);
	modifyprint(head,position,value);
	printlist(head); 
	insertpoint(head);
	printlist(head); 
	printf("查找:",value); 
	scanf("%d",&value);	 
	
	
	printf("%d在第%d位",value,findpoint(head,value));
	deletelist(head); 
}
void createlist(Node *head,int size)
{
	Node *m=head;
	for(int i=1;i<=size;i++) 
	{
		printf("输入第%d值:\n",i);
		Node *point=(Node*)malloc(sizeof(Node));//创建输入位置 
		scanf("%d",&point->data);//point->next指向m的下一个节点 
		point->next=NULL;//一直循环使输入值下一个一直是空 
		m->next=point;
		m=point; //把point的值给m 
	}
}
void printlist(Node *head)
{
	Node *m=head->next;
	while(m!=NULL)
	{
		printf("%d",m->data);
		m=m->next;
	}
	printf("\n");	
}
void addpoint(Node *head,int value)
{
	Node *m=head->next;
	Node *point=(Node*)malloc(sizeof(Node));
	point->data=value;//创造你要加啥 
	point->next=NULL;//保持空 
	while(m->next!=NULL){
		m=m->next;
	}//找尾部 
	m->next=point;//尾部的下一个就是输入 
}

 int findpoint(Node *head,int value)
	{
	Node *middle=head->next;
	int i=1;
	int o=0;
	while(middle!=NULL)
	{
		if(middle->data==value)
		{
			o=i;
			break;
		}
		middle=middle->next;
		i++;
	}
	return o;
} 
void modifyprint(Node *head,int position,int value)
{
	int i=1;
	Node *m=head->next;
	while(m!=NULL&&i!=position)
	{
		m=m->next;
		i++;
	}
	if(m!=NULL)//超出长度 
	{
		m->data=value;
	}
}
void deletepoint(Node *head,int position)
{
	int i=1;
	Node *left=head;
	Node *right=left->next;
	while(right!=NULL&&i!=position)
	{
		right=right->next;
		left=left->next;
		i++;
	}
	if(right!=NULL)
	{
		left->next=right->next;
		free(right);
		right=NULL;
		
	}
}
void insertpoint(Node *head)
{
	printlist(head);
	int value,position;
	printf("插入位置:");
	scanf("%d",&position);
	printf("插入的值:");
	scanf("%d",&value);
	Node *left=head;
	Node *right=left->next; 
	Node *point=(Node*)malloc(sizeof(Node));
	point->data=value;
	point->next=NULL;
	int i=1;
	while(i!=position&&right!=NULL)
	{
	right=right->next;
		left=left->next;
		i++;
		
	}
	left->next=point;
	point->next=right;
}
void deletelist(Node *head)
{
	Node *m=head->next;
	Node *point=head->next;
	while(m!=NULL){
		point=m;//先把m给point,m继续遍历下去,把point释放掉 
		m=m->next;
		free(point);
		point=NULL;
	}
	head=NULL;
}

代码实现结果(随便输的,不具有参考性)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值