C语言链表的增删改查,以及链表节点的排序问题

本文深入讲解链表的基本操作,包括节点的添加、删除、修改、查询及排序。通过具体代码实现,帮助读者理解链表的工作原理和实际应用,适合编程初学者及需要复习链表操作的开发者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

链表的增删改查,这儿加了链表节点的排序问题,希望对初学者有帮助。
代码如下:

#include "pch.h"
#include <iostream>
#include<stdlib.h>
  //链表的增删改查
typedef int DATA;
struct LinkList
{
	DATA data;
	LinkList* next;
};
LinkList* pHead = NULL;
  //建立链表,添加节点
void Append(DATA data)
{
	LinkList* p1 = pHead;
	LinkList* news = (LinkList*)malloc(sizeof(LinkList));
	if (news != NULL)
	{
		news->data =data;
		news->next = pHead;
		pHead = news;
	}
	else
	{
		printf("没有申请成功!");
	}
}
  //记录链表长度,如果没有特殊要求可以不必记录链表长度
int listLen()
{
	int nlength = 0;
	LinkList* p = pHead;
	while (p)
	{
		nlength++;
		p = p->next;
	}
	return nlength;
}
  //在链表中插入节点
int InsertNode(DATA data, DATA data1)//InsertNode(插入的位置,要插入的数据)
{	
	LinkList* p = pHead;
	while (p)
	{
		if (p->data == data)
		{
			LinkList* newsNode = (LinkList*)malloc(sizeof(LinkList));
			newsNode->data = data1;
			newsNode->next = p->next;
			p->next = newsNode;
			return 1;
		}
		p = p->next;
	}
	return 0;
}	

   //删除节点
int deleteNode(int data)
{
	LinkList* p = pHead;
	LinkList* p1 = NULL;
	if (pHead->data== data)
	{
		pHead = pHead->next;
		free(p);
		return 1;
	}
	while (p)
	{	
		if (p->data == data)
		{
			p1->next = p->next;
			free(p);
			return 1;
		}
		p1 = p;//保留节点
		p = p->next;//下一个节点
	}
	return 0;
}
  //修改节点里的值
int modify(DATA data, DATA ndata)//modify(源数据,要赋值的数据)
{
	LinkList* p = pHead;
	while(p)
	{
		if (p->data==data)
		{
			p->data = ndata;
			return 1;
		}
		p = p->next;
	}
	return 0;
}
  //查询节点,指定数据查找
int contentNode(DATA data)
{
	LinkList* p = pHead;
	while (p)
	{
		if (p->data==data)
		{
			printf("位置在:%p 值为:%d", p, p->data);
			return 1;
		}
		p = p->next;
	}
	return 0;
}

  //对链表节点里的值,在这儿就是数字,进行从小到大排序。可能不太好理解,可以用印象笔记圈点画图分析,只要理解p1和p2的指针指向的变化,就能理解这个排序
void orderBy()
{
	LinkList* p = pHead;	
	while (p)
	{
		LinkList* p1 = p->next;
		LinkList* p2 = p;	
		while (p1)
		{	
			if (p2->data > p1->data)
			{
				p2 = p1;
			}
			p1 = p1->next;
		}					
		if (p2!=p)
		{
			DATA temp = p->data;
			p->data = p2->data;
			p2->data = temp;
		}
		p = p->next;
	}
}

  //打印链表信息
void Print()
{
	LinkList* p = pHead;
	while (p)
	{		
		printf("\n链表的值:%d 地址:%p 下一个地址:%p\n", p->data, p,p->next);
		p=p->next;
	}	
}
int main()
{
	Append(5);
	Append(4);
	Append(3);
	Append(2);
	Append(1);
	Append(33);
	Append(49);

	//修改前
	Print();

	//修改后
	//modify(33,500);
	//Print();
	//printf("链表的长度 %d\n",listLen());	
	InsertNode(33, 1000);//插入一个节点
	//deleteNode(33);//删除一个节点
	//contentNode(33);//查询数据
	Print();	
	system("pause");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值