98行代码实现C语言链表增删查改(注释详细)

#include <bits/stdc++.h> 
using namespace std;
typedef struct NODE     //每个节点是一个结构体变量,给结构体类型起个别名node
{
	int data;
	struct NODE *next;
}node;
node* init_list()       //初始化链表的函数
{
	node* head=(node*)malloc(sizeof(node*));  //建立一个空节点,由head指向它
	node* temp=head;           				  //temp指向最后一个节点
	for(int i=1;i<=5;i++)  
	{	
		node* a=(node*)malloc(sizeof(node*));  //新建一个节点
		a->data=i;                             //写数据域  
		temp->next=a;                          //让前一个节点指向新建的节点
		temp=a;                                //更新最后一个节点为新建的节点  
	}
	temp->next=NULL;			               //最后一个节点的指针域置NULL
	return head;
}
void display(node* head)
{
	node* temp=head;
	cout<<"链表元素依次为:"; 
	while(temp->next)
	{
		temp=temp->next;
		cout<<temp->data<<" ";
	}
	cout<<endl;
}
node* add_data(node* head,int index,int des)//比如要在第四个节点处插入一个节点,数据为5,那么index=4,des=5 
{
	cout<<"在第"<<index<<"个元素处插入"<<des<<endl; 
	node* temp=head;                        //temp指向空节点 
	for(int i=1;i<index;i++)
	temp=temp->next;                        //循环3次,此时temp为第三个节点的地址  
	node* newnode=(node*)malloc(sizeof(node*));//创造新节点 
	newnode->data=des;                         //写新节点的数据域 
	newnode->next=temp->next;                  //新节点指向第四个节点 
	temp->next=newnode;                        //第三个节点指向新节点 
	return head;                               //此时新节点实际上成为了第四个节点,完成功能 
}
node* del_data(node* head,int index)          //假设要删除第三个节点,index=3 
{
	cout<<"删除第"<<index<<"个元素"<<endl; 
	node* temp=head;
	for(int i=1;i<index;i++)
	temp=temp->next;                         //循环两次,此时temp为第二个节点的地址 
	node* deltemp=temp->next;                //记录要删除的第三个节点的地址 
	temp->next=temp->next->next;             //让第二个指向第四个元素 
	free(deltemp);                           //删除第三个元素 
	return head;
}
int select_data(node* head,int des)          //函数完成找到目标元素,返回下标 
{ 
	node* temp=head;                         
	int i=0;
	while(temp->next!=NULL)                  //看节点是否为空节点 
	{
	    temp=temp->next;                     
		i++;
		if(temp->data==des)
		return i; 
	} 
	return -1;
}
int change_data(node* head,int src,int des)  //和查找类似,找到以后改动数值即可 
{
	cout<<"将"<<src<<"改为"<<des<<endl; 
	node* temp=head;
	int i=0;
	while(temp->next!=NULL) 
	{
	    temp=temp->next;
		i++;
		if(temp->data==src)
		{
		temp->data=des;
		return 0;
		}
	} 
	cout<<"查找不到元素"<<src<<endl; 
}
int main()
{
	node* head=init_list();//初始化链表 
	display(head); 
    add_data(head,4,7);
	display(head);	
	del_data(head,3);
	display(head);
	cout<<"7的坐标为"<<select_data(head,7)<<endl;
	change_data(head,4,6);
	display(head); 
	return 0;
}

执行结果:
在这里插入图片描述

发布了61 篇原创文章 · 获赞 1 · 访问量 1371

猜你喜欢

转载自blog.csdn.net/qq_42622433/article/details/104119718