【C语言链表的增删改查,以及链表节点的排序问题】链表的增删改查,这儿加了链表节点的排序问题,希望对初学者有帮助。
代码如下:
#include "pch.h"
#include
#include
//链表的增删改查
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 =https://www.it610.com/article/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 =https://www.it610.com/article/= data)
{
LinkList* newsNode = (LinkList*)malloc(sizeof(LinkList));
newsNode->data = https://www.it610.com/article/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=https://www.it610.com/article/= data)
{
pHead = pHead->next;
free(p);
return 1;
}
while (p)
{
if (p->data =https://www.it610.com/article/= 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=https://www.it610.com/article/=data)
{
p->data = https://www.it610.com/article/ndata;
return 1;
}
p = p->next;
}
return 0;
}
//查询节点,指定数据查找
int contentNode(DATA data)
{
LinkList* p = pHead;
while (p)
{
if (p->data=https://www.it610.com/article/=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 = https://www.it610.com/article/p2->data;
p2->data = https://www.it610.com/article/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");
}
推荐阅读
- C语言学习|第十一届蓝桥杯省赛 大学B组 C/C++ 第一场
- 【C】题目|【C语言】题集 of ⑥
- 单片机|自学单片机好找工作吗(会单片机能找什么工作?)
- 单片机|keil把源代码生成lib的方法
- c语言|一文搞懂栈(stack)、堆(heap)、单片机裸机内存管理malloc
- c语言|C语言初期学习遇到的特殊点 【三子棋详解】【初学者福音,详细总结,复习能手】
- 笔记|C语言数据结构——二叉树的顺序存储和二叉树的遍历
- 个人理解|【C语言基础之类型转换】
- c语言|【C语言】自定义类型 结构体 枚举 联合
- 学习分享|【C语言函数基础】