【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语言】循环添加节点(链式物理结构)
- 【C语言】删除一个节点(仅一个)(单向物理链式结构)
- 链式物理结构(动态分配节点)
- 链式物理结构3
- C语言-数据结构-双链表插入查找
- C语言中数据结构之链式基数排序
- 数据结构(严蔚敏)之六——链式队列c语言实现
- Day16、文件拷贝、数据结构(逻辑结构、物理结构)顺序物理结构、链式物理结构
- 数据结构——线性表的链式结构(C语言)
- 数据结构——队列的链式实现(C语言)
- 数据结构 单链表插入删除操作(c语言实现)
- C语言数据结构-3.栈的顺序及链式存储结构
- 数据结构--二叉树--双亲、孩子和兄弟节点的查询(链式结构--队列)
- C语言-数据结构-链串插入删除链接
- 大二队列的出队和入队分析(链式结构)C语言
- C语言 线性表 双向链式结构 实现
- oracle查询树结构,根节点查询下边所有子节点,然后重新批量插入
- 【数据结构】C语言实现链表节点的插入和删除
- C语言实现单链表(不带头结点)节点的插入
- 数据结构及算法——求链式表的长度(C语言)