使用一个指针实现双向链表
来源:互联网 发布:海城市教育局网通知 编辑:程序博客网 时间:2024/06/11 01:17
算法导论10.2-8 假设所有指针的值都可视为K位的整型数,且定义 x.np = x.next ^ x.prev 。注意要说明获取表头所需信息,并说明如何在该表上实现SEARCH,INSERT,DELETE操作。
对^操作,有 x^y^y=x。
表头 head.np = head.prev ^ head.next = NULL ^ head.next. 所以head.np 指向第二个元素。
SEARCH操作: //先比较前2个元素,再从第三个开始循环
if(head.value == x) return head;
if(head.np.value == x) return head.np;
node = head.np;//指向第二个
node_p = head;//指向第一个
while(node_next = node.np ^ node_p) // node.np = node_next ^ node_p 求第三个元素
{
if(node_next.value == x)
return node_next;
else{
node_p = node;
node = node_next;
}
}
return NULL;
INSERT操作:
双指针链表的操作是:
node.next = head.next;
head.next.prev = node;
node.prev = head;
head.next = node;
根据双指针来写单指针操作://插入就是修改自身指针,再修改前后节点指针 第一个是自身指针 第二个是后节点指针 第三个是前节点指针
node.np = head ^ head.np // node.np = node.next ^ node.prev = head.next ^ head = head .np ^ head
head.np.np = node ^( head ^ head.np.np)// head.next.np = head.next.next ^head.next.prev = head.np.next ^ head
// head.np.next = head.np.np ^head.np.prev = head.np.np ^ node
head.np = node;
DELETE操作: 要知道node的前或者后节点 node_n = node.next node_p = node.prev 下面已知前节点 删除就是修改前后节点的指针
node_n = node.np ^ node_p; //求出向后的指针
node_p.np = node_n ^ node_p.np ^ node ; // node_p.np = node_p.next ^ node_p.prev = (node_n ) ^ (node_p.np ^ node_p.next) //注意这里只改变node_p.next 的值 node_p.prev内的不改 还维持node
node_n.np = node_p ^ node_n.np ^ node; // node_n.np = node_n.prev ^ node_n.next = node_p ^ (node_n.np ^ node_n.prev)free(node); // 同上
- 使用一个指针实现双向链表
- 如何使用一个指针来实现双向链表操作
- 双向链表 只使用一个指针
- [每日练习]如何使用一个指针来实现双向链表操作
- 一个双向链表的单指针实现
- C++使用单指针Struct实现双向链表
- 实现一个双向链表
- 单指针 实现 双向链表
- 双向链表(二级指针实现)
- 算法导论10.2-8-用一个整数地址替代前后指针实现双向链表
- 一个双向链表的实现
- 双向链表的一个C++实现
- 一个双向链表的实现
- 用双向链表实现一个栈
- 双向链表的一个C++实现
- 双向链表实现一个队列
- 使用JAVA实现双向链表
- 使用java实现双向链表数据结构
- 【剑指offer】旋转数组的最小数字
- 栈(链式)
- 1015. 德才论 (25)
- 数据结构--希尔排序
- HDU 3394 Railway 无向图的桥与点-双连通
- 使用一个指针实现双向链表
- Static LED control - CDigiStatic 1.3
- mysql 开启远程访问
- 学习总结二十三:深入学习hbase数据库
- 新热风:美式家具
- 2014工大校赛题目以及解
- C++ 显式转换 。
- 使用Maven进行lib管理带来的问题
- 关于在android 图像开发中使用Skia引擎的注意事项