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

【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"); }

    推荐阅读