【C语言】循环添加节点(链式物理结构)
2017-08-06 18:48
330 查看
/* * 链式物理结构演示 * 添加不确定个节点,循环添加 * 步骤:新建结构体->将首尾相连->定义循环指针变量->定义新节点的变量->开始死循环,在循环中完成添加(输入一个数->分配动态空间给新建的结构体->将输入的值赋值给新建结构体内的变量,指针赋值空->用循环框架进行链接)->释放动态内存 * */ #include <stdio.h> #include <stdlib.h> typedef struct node { int num; struct node *p_next; } node; int main() { int num = 0; //用来记录用户输入的数字 node head = {0},tail = {0}; head.p_next = &tail;//刚开始时还没有有效节点,就将头尾相连 node *p_node = NULL, *p_tmp = NULL;//p_tmp是循环指针变量,p_node是新建节点 //死循环来无限输入 while(1) {//因为不知道输入多少个,所以用while printf("\n请输入一个正数:"); scanf("%d", &num); if(num < 0) {//输入的是负数的话就结束循环 break; } p_node = malloc(sizeof(node));//动态分配一个存储空间,所生成的链结构中所有有效值的空间都是动态分配的 if(!p_node) {//动态内存分配失败 continue; } p_node->num = num; //新加入的数赋值给结构体 p_node->p_next = NULL; //与该数配对的指针 for(p_tmp = &head; p_tmp != &tail; p_tmp = p_tmp->p_next) { node *p_first = p_tmp; node *p_mid = p_first->p_next; node *p_last = p_mid->p_next; if(p_mid == &tail || p_mid->num > p_node->num) { p_first->p_next = p_node; p_node->p_next = p_mid; break; } } for(p_tmp = &head; p_tmp != &tail; p_tmp = p_tmp->p_next) { node *p_first = p_tmp; node *p_mid = p_first->p_next; node *last = p_mid->p_next; if(p_mid != &tail) { printf("%d ", p_mid->num); } } printf("\n"); } //清除动态内存 while(head.p_next != &tail) {//当头下一个不是尾时进入循环 node *p_first = &head; node *p_mid = p_first->p_next; node *p_last = p_mid->p_next; p_first->p_next = p_last;//先断开p_mid,然后再进行释放,也就是将p_first指向p_last free(p_mid); p_mid = NULL; } return 0; }
相关文章推荐
- 【C语言】从小到大插入新节点(链式物理结构)
- 【C语言】删除一个节点(仅一个)(单向物理链式结构)
- C语言 双向循环链表的实现和结构 链表 线性表的链式实现
- 队列的链式储存结构,以及循环队列(C语言)。
- 链式物理结构(动态分配节点)
- 循环控制结构程序07 - 零基础入门学习C语言22
- C语言学习笔记-5.循环结构程序设计
- 数据结构 c语言实现链式循环队列(输入数字入队 输入字母出队)
- C语言中对于循环结构优化的一些入门级方法简介
- C语言之循环结构
- 黑马程序员_C语言_循环结构
- JavaScript DOM中实现循环创建文办节点并添加属性节点
- 黑马程序员--c语言:选择结构、循环结构、函数
- C语言学习循环结构
- C语言_选择结构和循环结构
- 循环控制结构程序06 - 零基础入门学习C语言21
- 10月3日 c语言简单循环结构 求1+2+3+……+100=?
- iOS开发学习之C语言---C03 循环结构
- C语言之循环结构中break、continue、goto、return和exit的区别
- 树(C语言实现,基于链式结构)