改写要求1:改写为以单链表和双向链表存储二维数组

改写要求2:添加函数SingleLinkProcess()实现互换单链表中最大结点和头结点位置,最小结点和尾结点位置

改写要求3:添加函数DoubleLinkProcess()实现互换双向链表中最大结点和头结点位置,最小结点和尾结点位置

#include <cstdlib>
#include <iostream> using namespace std;
#define M 3
#define N 4 struct SingleLink
{
int Row;
int Column;
int Data;
SingleLink *next;
}; struct DoubleLink
{
int Row;
int Column;
int Data;
DoubleLink *prior;
DoubleLink *next;
};
class Matrix
{
int a[M][N];
public:
SingleLink* creatSingle(int a[][N]);
DoubleLink* creatDouble(int a[][N]);
void SingleLinkProcess(SingleLink* Shead);
void DoubleLinkProcess(DoubleLink* Dhead);
void showSingle(SingleLink* Shead)
{
SingleLink* p=Shead->next;
int i=;
while(p)
{
cout<<p->Data<<'\t';
i++;
if(i%==)
cout<<endl;
p=p->next;
}
cout<<endl;
}
void showDouble(DoubleLink* Dhead)
{
DoubleLink* p=Dhead->next;
int i=;
while(p)
{
cout<<p->Data<<'\t';
i++;
if(i%==)
cout<<endl;
p=p->next;
}
cout<<endl;
}
void showDoublePrior(DoubleLink* Dhead)
{
DoubleLink* p=Dhead->next;
DoubleLink* t;
while(p)
{
t=p;
p=p->next;
}
int i=;
while(t)
{
cout<<t->Data<<'\t';
i++;
if(i%==)
cout<<endl;
t=t->prior;
}
cout<<endl;
}
}; SingleLink* Matrix::creatSingle(int a[][N])
{
SingleLink* Shead=new SingleLink;
Shead->next=NULL;
SingleLink *p;
p=Shead;
int i,j;
for(i=;i<M;i++)
for(j=;j<N;j++)
{
SingleLink* newSingleLink=new SingleLink;
newSingleLink->next=NULL;
newSingleLink->Data=a[i][j];
newSingleLink->Row=i;
newSingleLink->Column=j;
p->next=newSingleLink;
p=newSingleLink;
}
return Shead;
} void Matrix::SingleLinkProcess(SingleLink* Shead)
{
SingleLink* max,*maxpre,*maxtail,*hpre,*htail,*head,*ppre;
SingleLink* min,*minpre,*mintail,*tpre,*tail;
SingleLink* p,*q;
p=Shead->next;
max=p;
head=p;
hpre=Shead;
htail=head->next;
ppre=p;
while(p)
{ if(max->Data<p->Data)
{
max=p;
maxpre=ppre;
maxtail=p->next;
}
ppre=p;
p=p->next;
}
hpre->next=max;
maxpre->next=head;
head->next=maxtail;
max->next=htail; p=Shead->next;
int i=M*N-; while(i)
{
tpre=p;
p=p->next;
tail=p;
i--;
}
p=Shead->next;
min=p;
ppre=p;
while(p)
{ if(min->Data>p->Data)
{
min=p;
minpre=ppre;
mintail=p->next;
}
ppre=p;
p=p->next;
}
minpre->next=tail;
tpre->next=min;
tail->next=min->next;
min->next=NULL;
} DoubleLink* Matrix::creatDouble(int a[][N])
{
DoubleLink* Dhead=new DoubleLink;
Dhead->next=NULL;
Dhead->prior=NULL;
DoubleLink* p=Dhead;
int i,j;
for(i=;i<M;i++)
for(j=;j<N;j++)
{
DoubleLink* newDoubleLink=new DoubleLink;
newDoubleLink->prior=NULL;
newDoubleLink->next=NULL;
newDoubleLink->Data=a[i][j];
newDoubleLink->Row=i;
newDoubleLink->Column=j;
p->next=newDoubleLink;
newDoubleLink->prior=p;
p=newDoubleLink;
}
return Dhead;
} void Matrix::DoubleLinkProcess(DoubleLink* Dhead)
{
DoubleLink* max,*maxpre,*maxtail,*hpre,*htail,*head;
DoubleLink* min,*minpre,*mintail,*tail,*tpre;
DoubleLink* p;
p=Dhead->next;
head=p;
hpre=Dhead;
htail=head->next;
max=p;
while(p)
{
if(max->Data<p->Data)
{
max=p;
maxpre=p->prior;
maxtail=p->next;
}
p=p->next;
}
hpre->next=max;
max->prior=hpre;
max->next=htail;
htail->prior=max;
maxpre->next=head;
head->prior=maxpre;
head->next=maxtail;
maxtail->prior=head; p=Dhead->next;
while(p)
{
tail=p;
p=p->next;
}
p=Dhead->next;
min=p;
tpre=tail->prior;
while(p)
{
if(min->Data>p->Data)
{
min=p;
minpre=p->prior;
mintail=p->next;
}
p=p->next;
}
if(tpre==min)//结点是否相邻要分开处理
{
minpre->next=tail;
tail->prior=minpre;
tail->next=min;
min->prior=tail;
min->next=NULL;
}
else{
minpre->next=tail;
tail->prior=minpre;
tail->next=mintail;
mintail->prior=tail;
tpre->next=min;
min->prior=tpre;
min->next=NULL;
}
} int main(int argc, char *argv[])
{
int b[M][N]={{,,,},{,,,},{,,,}};
SingleLink* Shead;
DoubleLink* Dhead;
Matrix ma;
Shead=ma.creatSingle(b);
ma.showSingle(Shead);
ma.SingleLinkProcess(Shead);
ma.showSingle(Shead); Dhead=ma.creatDouble(b);
ma.showDouble(Dhead);
ma.DoubleLinkProcess(Dhead);
ma.showDouble(Dhead);
system("PAUSE");
return EXIT_SUCCESS;
}

最新文章

  1. 浏览器怎么添加 Axure扩展程序
  2. 关于s:iterator 和s:if 的结合使用
  3. Android TextView内容过长加省略号,点击显示全部内容
  4. 删除除了Src属性以后的全部属性
  5. Windows 安装程序无法将 Windows 配置为在此计算机的硬件上运行
  6. python中的静态方法和类方法
  7. Apache benchmark 压力测试工具
  8. 最小圆覆盖 hdu 3007
  9. 转载:js和jquery获取父级元素、子级元素、兄弟元素的方法
  10. Spring Boot 2.x以后static下面的静态资源被拦截
  11. Python距离放弃又近了Day02
  12. centos6.5删除/boot后恢复
  13. 洛谷P1209修理牛棚题解
  14. jquery 禁止滚动条滚动,并且滚动条不消失,页面大小不闪动
  15. nvm安装与使用
  16. 2018-2019-2 网络对抗技术 20165333 Exp2 后门原理与实践
  17. 网络编程 -- RPC实现原理 -- Netty -- 迭代版本V2 -- 对象传输
  18. next_permutation函数和per_permiutation函数
  19. 一个rcu回调导致的简单死锁
  20. JAVA动态代理基础

热门文章

  1. C#数组的指定位置复制函数
  2. volatile举列说明const
  3. 转载:s:if的用法
  4. js给div动态添加控件,然后给这个控件动态添加事件
  5. [POJ] 2352 Stars [线段树区间求和]
  6. [HDU] 2795 Billboard [线段树区间求最值]
  7. 24C01的IIC 讀寫的c51程式
  8. 字符串转换为float&lt;1&gt;
  9. SEO的URL如何优化才是最佳
  10. 使用linux系统做路由转发