算法导论 10-2-8 个指针实现双链表
来源:互联网 发布:矩阵切换系统 编辑:程序博客网 时间:2024/06/16 10:04
题目:利用一个指针实现双链表。每一个节点里面存一个np,x.np = x.pre XOR x.next
思路: a XOR a = 0; 0 XOR a = a; 因此,np与父节点进行xor运算之后,就能得到next的地址。
#include <iostream>using namespace std;struct LinkList{ int key; int prenext;};struct LinkList* insertLinkList(struct LinkList*head,int d,struct LinkList**tail);struct LinkList* searchLinkList(struct LinkList*head,int d);struct LinkList* deleteLinkList(struct LinkList*head,int d);void print(struct LinkList* head);int main (){ struct LinkList*head = 0; struct LinkList*tail = 0; for (int i = 0;i < 12;i ++) { head = insertLinkList(head,i,&tail); //cout << tail->key; } print(head); print(tail); struct LinkList* tr = searchLinkList(head,12); if (tr) { cout << tr-> key << endl; }}struct LinkList* insertLinkList(struct LinkList*head,int d,struct LinkList**tail){ struct LinkList * tmp = new struct LinkList(); tmp->key = d; tmp->prenext = 0; if (NULL == head) { head = tmp; head->prenext = 0; *tail = tmp; return head; } if ( 0 == head->prenext) { head->prenext = (int)tmp; tmp->prenext = tmp->prenext^((int)head); *tail = tmp; return head; } struct LinkList * p = head; struct LinkList * q = (struct LinkList *)head->prenext; struct LinkList * r = NULL; struct LinkList * s = NULL; while (q != 0) { r = q; s = p; q = (struct LinkList*)(q->prenext^((int)p)); p = r; r = s; } p->prenext = ((int)tmp)^((int)r); tmp->prenext = ((int)p); *tail = tmp; return head;}void print(struct LinkList* head){ if (NULL == head) { return ; } struct LinkList * p = head; cout << p->key << ' '; struct LinkList * q = (struct LinkList *)head->prenext; if (NULL == q) { return; } struct LinkList * r = NULL; struct LinkList * s = NULL; while (q != NULL) { r = (struct LinkList *)(q->prenext^((int)p)); cout << q->key << ' '; p = q; q = r; } cout << endl;}struct LinkList* searchLinkList(struct LinkList*head,int d){ if (NULL == head) { return 0; } struct LinkList * p = head; if (p->key == d) { return p; } // cout << p->key << ' '; struct LinkList * q = (struct LinkList *)head->prenext; if (NULL == q) { return 0; } struct LinkList * r = NULL; struct LinkList * s = NULL; while (q != NULL) { r = (struct LinkList *)(q->prenext^((int)p)); if (q->key == d) { s = q; break; } //cout << q->key << ' '; p = q; q = r; } return s; // cout << endl;}struct LinkList* deleteLinkList(struct LinkList*head,int d){}
0 0
- 算法导论 10-2-8 个指针实现双链表
- 算法导论 10.2-8 用一个指针实现双链表
- 算法导论 第10章 10.3 指针和对象实现
- 算法导论 第十章 10.2-8 用单指针域实现双链表
- 算法导论10.2-8-用一个整数地址替代前后指针实现双向链表
- 《算法导论》笔记 第10章 10.3 指针和对象的实现
- 【算法导论学习-19】1个stack实现queue
- 算法导论(C++实现) chapter 2
- 算法导论堆实现
- quick_sort <算法导论>实现
- 算法导论红黑树实现
- 算法导论 思考题 8-2
- 算法导论 思考题 10-2
- 《算法导论》算法实现收集
- 算法导论中算法实现
- 《算法导论》Dijkstra算法实现
- 双向链表的单指针实现(算法导论习题)
- 算法导论程序22--指针和对象的实现(Python)
- 高性能服务器开发
- Bloom Filter
- leetcode 8STRING TO INTEGER (ATOI)
- Android 蓝牙设备的查找和连接
- 获得一个整数的二进制位数
- 算法导论 10-2-8 个指针实现双链表
- Linux入门必须养成的七大习惯
- JS小技巧
- Uboot中start.S源码的指令级的详尽解析
- LeetCode: TWO SUM
- java中枚举的简单介绍
- C++ 在字符串中插入子串+判断字符串是否由空格组成
- CPU卡密钥管理系统
- java中关于try、catch、finally中一些问题