算法导论--10.3-4 多数组表示双向链表(紧凑)
来源:互联网 发布:java中的finally 编辑:程序博客网 时间:2024/05/17 03:12
问题:双向链表的所有m个元素在存储器中保持紧凑,即在多数组表示中占用前m个下标
思路:分配内存: 总是分配相邻的存储位置;
释放内存:若删除链表中的一个元素,导致存储位置中间空了一个,让数组的最后一个元素补上,并修改其prev和next值
代码:
#include<iostream>#include <iomanip> using namespace std;int n=15, f=-1, head=-1;//n为数组大小,f为目前已存值的下标,head为链表表头void Insert(int *key, int *next, int *prev, int x){if(f==n-1)//检测上溢cout<<"overflow"<<endl;else{++f;key[f]=x;next[f]=head; //对应x.next=headif(head>=0) //对应if(head!=NULL)prev[head]=f; //对应head.prev=xhead=f; //对应head=xprev[f]=-1; //对应x.prev=NULL}} void Delete(int *key, int *next, int *prev, int x){if(f==-1)//检测上溢{cout<<"underflow"<<endl;return;}int i=0;//找到元素i的位置while(i<=f && key[i]!=x)++i;if(prev[i]!=-1)//删除i位置元素next[prev[i]]=next[i];if(next[i]!=-1)prev[next[i]]=prev[i];//将数组f位置元素补到i位置上key[i]=key[f];//先将f位置上元素复制到i位置prev[i]=prev[f]; prev[i]=next[f];if(prev[f]!=-1)//再修改prev元素的next值和next元素的prev值next[prev[f]]=i;if(next[f]!=-1)prev[next[f]]=i;--f;}void Print(int *key, int *next, int *prev, int m){cout<<setw(8)<<"next:";for(int t=0;t<m;t++)cout<<setw(3)<<setiosflags(ios::right)<<next[t]<<" ";cout<<endl;cout<<setw(8)<<"key:";for(int j=0;j<m;j++)cout<<setw(3)<<setiosflags(ios::right)<<key[j]<<" ";cout<<endl;cout<<setw(8)<<"prev:";for(int k=0;k<m;k++)cout<<setw(3)<<setiosflags(ios::right)<<prev[k]<<" ";cout<<endl;}int main(){int* key=new int[n];int* prev=new int[n];int* next=new int[n];for(int i=0;i<10;i++)Insert(key, next, prev, 2*i+11);Print(key, next, prev, f+1);Delete(key, next, prev, 17);Print(key, next, prev, f+1);delete[] key;delete[] prev;delete[] next;return 0;}
0 0
- 算法导论--10.3-4 多数组表示双向链表(紧凑)
- 算法导论10.3-4:紧凑的双向链表
- 10.3-4 实现ALLOCATE和FREE,使双向链表在多数组表示法中在存储器保持紧凑,占前n个位置。
- 算法导论 10.3-4 紧凑的多重数组
- 算法导论笔记之----双向链表
- 紧凑的多重数组的静态双向链表实现
- 算法导论第十章数据结构--双向链表
- 静态双向链表的多数组实现
- 双向链表的单指针实现(算法导论习题)
- 链表的多重数组表示(算法导论10-3)
- 算法导论 XOR双向循环链表——内存高效链表
- 双向链表的表示与实现(C++版)
- 基于visual Studio2013解决算法导论之024双向链表实现
- 基于visual Studio2013解决算法导论之025双向循环链表
- 算法导论10.2-8-用一个整数地址替代前后指针实现双向链表
- 【算法导论】10.2不带哨兵节点和带哨兵节点的双向链表
- 算法导论 10.2-6 带哨兵的双向链表合并两个不相交的集合
- 算法导论程序23--有根树的表示(Python)
- 合并排序
- iOS编程——隐藏和封装
- Android 继承DialogFragment弹出dialog对话框
- Python之学习笔记(函数)
- Maven: Maven Antrun Plugin configuration to copy package from target to basedir and rename it
- 算法导论--10.3-4 多数组表示双向链表(紧凑)
- C语言笔记(一)
- signal raise alarm用法
- 字符串的长度
- 织梦PHP站一直被黑客挂木马的解决办法
- CPU是怎么工作的?
- 23种设计模式
- CSS样式属性
- android中使用static、application、本地存取数据的问题