您的位置:首页 > 编程语言 > C语言/C++

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

2017-08-06 18:47 302 查看
/*
* 单向物理链式结构演示
* 步骤:定义结构体->定义结构体变量->链接->写循环->用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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言