数据结构 单链表的插入详解 例子
来源:互联网 发布:环球期货交易软件 编辑:程序博客网 时间:2024/06/02 07:07
最近看了郝斌老师讲的数据结构的单链表插入的视频,觉得视频中链表插入的算法写的很经典,所以就把代码敲了一下分享给大家
#include <stdio.h> #include <malloc.h> #include <time.h> typedef struct list { int vaule; //数据域 struct list *PNext; //指针域 }TNODE, *TPNODE; TPNODE Creat_list(); void Trave_list(TPNODE _PHead); int Insert_List(TPNODE _pHead, int _pos, int _iVal);int main() { int iRet = 0; int iVal = 0; int pos = 0; TPNODE PHead; srand((int)time(NULL)); PHead = Creat_list(); //创建链表 printf("please input insert pos\n"); scanf("%d", &pos); printf("please input Val\n"); scanf("%d", &iVal); iRet = Insert_List(PHead, pos, iVal); if(1 == iRet) { printf("Insert fail\n"); } Trave_list(PHead); //遍历链表 return 0; } //创建链表 TPNODE Creat_list() { int i = 0; int len = 0; int iVaule = 0; TPNODE pHead; pHead = (TPNODE)malloc(sizeof(TNODE)); //创建一个头结点 if(NULL == pHead) //创建失败 { printf("create list fail\n"); } TPNODE PTail = pHead; pHead->PNext = NULL; printf("please input len of list\n"); scanf("%d", &len); //输入想要的个数 for(i = 0; i < len; i++) { iVaule = rand()%100+1; TPNODE pNew = (TPNODE)malloc(sizeof(TNODE)); //分配内存 pNew->vaule = iVaule; //将数据域赋予数据 PTail->PNext = pNew; pNew->PNext = NULL; PTail = pNew; } return pHead; } //链表输出 void Trave_list(TPNODE _PHead) { int i = 0; TPNODE P = _PHead->PNext; while(NULL != P) { i = 1; printf("%d ", P->vaule); P = P->PNext; } if(1 == i) { printf("\n"); }} //链表插入int Insert_List(TPNODE _pHead, int _pos, int _iVal){ int i = 0; TPNODE p = _pHead; while(NULL != p && i < _pos-1) { p = p->PNext; i++; } if(i > _pos -1 || NULL == p) { return 1; } TPNODE pNew = (TPNODE)malloc(sizeof(TNODE)); if(NULL == pNew) { return 1; } pNew->vaule = _iVal; //(第一行)将待插入的数据赋值到新的节点数据域中 TPNODE q = p->PNext; //(第二行)结构体指针q指向p的下一个节点 p->PNext = pNew; // (第三行)p的下一个节点指向新节点 pNew->PNext = q; //此时的q为第二行的p->pNext,不是第三行的pNew(指针思想) return 0;}
1,首先输入待创建链表的长度,输入完毕后,程序会产生随机数对每个节点赋值,生成链表
2,然后输入待插入的位置
3,输入待插入的数值
4,遍历链表输出
比如创建长度为5的结点,在第三个位置插入数值为10的数据,运行结果
插入解析,执行完插入函数中的while循环后,此时的p指针指向的是第二个结点。
然后创建一个新结点,并分配内存,然后将待插入的数值赋值到新结点的数据域中pNew->vaule = _iVal;
然后新指针q指向p->PNext,此时的p->PNext为第三个结点。所以q的值为第三个结点。
p->PNext = pNew; 把p->PNext指向新结点PNew,说明第三个结点为pNew,此时PNew为第三个结点。
pNew->PNext = q,新结点的下一个结点指向q,此时的q为插入之前的第三个结点,执行完成后为第四个结点。所以就完成了插入的工作。
创建链表的详解:点击打开链接
阅读全文
0 0
- 数据结构 单链表的插入详解 例子
- 数据结构--单链表的插入
- 数据结构-单链表的插入
- 数据结构--平衡二叉树的插入详解
- 数据结构—单链表的插入
- 数据结构之单链表的插入
- 数据结构 -- 单链表插入之包含头节点的插入
- 数据结构 单链表的创建 插入 删除
- 【数据结构】单链表的插入与删除
- 数据结构-单链表的读取,插入与删除
- 数据结构的插入操作
- [数据结构]顺序单链表插入
- 【数据结构】单链表插入算法
- 数据结构排序系列详解之一 插入排序
- 数据结构 插入排序的实现
- 【数据结构】红黑树的插入(Insert)
- 数据结构-----红黑树的插入操作
- C++ 数据结构的单链表的建立,插入,删除操作
- NOIP2016玩具谜题(洛谷1563)
- React组件的生命周期
- Leetcode#67: Add Binary
- Java8/30
- JVM学习之GC日志
- 数据结构 单链表的插入详解 例子
- Eclipse+pydev环境搭建
- shell
- Hadoop大数据平台架构与实践学习笔记
- Apache2.4安装
- 关于centos6.5的防火墙规则使用--iptables命令
- 如何使用docker搭建oracle测试环境
- 机器人与变位机协调轨迹仿真
- 【C语言】【unix c】如何创建无名管道