【C语言】从小到大插入新节点(链式物理结构)

xiaoxiao2021-02-28  102

/* * 单向物理链式结构演示 * 步骤:定义结构体->定义结构体变量->链接->写循环->用if去除尾部,对剩余的进行处理 * 提示: 处理单一节点的时候只需处理p_mid即可,处理某个位置的时候处理p_first和p_mid中间的位置 * */ #include <stdio.h> typedef struct node { int num; struct node *p_next; }node; int main() { node head = {0}, tail = {0}, node1 = {20}, node2 = {40}, node3 ={60}, node4 = {50}; node *p_node = NULL; head.p_next = &node1; node1.p_next = &node2; node2.p_next = &node3; node3.p_next = &tail; /************************************************************************************ * 添加新点 * 处理某个位置的时候处理p_first和p_mid中间的位置 ************************************************************************************/ //插入新节点,从小到大 for(p_node = &head; p_node !=&tail; p_node = p_node->p_next) { node *p_first = p_node; node *p_mid = p_first->p_next; node *p_last = p_mid->p_next; if(p_mid == &tail || p_mid->num > node4.num) {//从小到大排列也就是遇到第一个比新点大的就插在它前面,有个特殊情况就是它比所有的都大,这个时候p_mid是指向tail(尾节点)的,此时将新点插入到最后面就可以 p_first->p_next = & node4; //新点插入到p_first和p_mid中间就可以 node4.p_next = p_mid; break; //注意这里要结束 } } for(p_node = &head; p_node != &tail; p_node = p_node->p_next) { node *p_first = p_node; node *p_mid = p_first->p_next; node *p_last = p_mid->p_next; if(p_mid != &tail) { printf("%d ", p_mid->num); } } printf("\n"); return 0; }
转载请注明原文地址: https://www.6miu.com/read-58285.html

最新回复(0)