改写要求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;
}

C++程序设计实践指导1.10二维数组元素换位改写要求实现的更多相关文章

  1. C++程序设计实践指导1.2二维数组的操作运算改写要求实现

    改写要求1:改写为以单链表表示二维数组 #include <cstdlib> #include <iostream> using namespace std; struct L ...

  2. C++程序设计实践指导1.3求任意整数降序数改写要求实现

    改写要求1:动态生成单链表存储 #include <cstdlib> #include <iostream> using namespace std; struct LinkN ...

  3. C++程序设计实践指导1.15找出回文数改写要求实现

    改写要求1:用单链表实现 #include <cstdlib> #include <iostream> using namespace std; struct LinkNode ...

  4. C++访问二维数组元素

    if(*image_in+j*+xsize+i)>=thresh)//xsize图像宽度 image_out是首地址,加上j*行宽就是目标行的首地址,再加上i,就是在此行中的第i个像素,所以整个 ...

  5. C++二级指针第二种内存模型(二维数组)

    C++二级指针第二种内存模型(二维数组) 二维数组 二维数组本质上是以数组作为数组元素的数组,即“数组的数组”. 定义 类型说明符 数组名[常量表达式][常量表达式] 例如: float a[3][4 ...

  6. 【学习笔记】【C语言】二维数组

    1. 什么是二维数组 一个数组能表示一个班人的年龄,如果想表示很多班呢? 什么是二维数组?int ages[3][10]; 三个班,每个班10个人 相当于3行10列 相当于装着3个一维数组 二维数组是 ...

  7. Java数组之二维数组

    Java中除了一维数组外,还有二维数组,三维数组等多维数组.本文以介绍二维数组来了解多维数组. 1.二维数组的基础 二维数组的定义:二维数组就是数组的数组,数组里的元素也是数组. 二维数组表示行列二维 ...

  8. 第3章 Java数组(上): 一维数组和二维数组

    3.数组及排序算法(2天) 3.1 数组的概述 2课时 3.2 一维数组的使用 3课时 3.3 多维数组的使用 3课时 3.4 数组中涉及到的常见算法 3课时 3.5 Arrays工具类的使用 3课时 ...

  9. C/C++——二维数组与指针、指针数组、数组指针(行指针)、二级指针的用法

    本文转载自:https://blog.csdn.net/qq_33573235/article/details/79530792 1. 二维数组和指针 要用指针处理二维数组,首先要解决从存储的角度对二 ...

随机推荐

  1. android中细节效果总结

    android中细节效果总结   andorid取消最上方的标题同时全屏显示 Source code     protected void onCreate(Bundle savedInstanceS ...

  2. Mysql学习(慕课学习笔记1)启动、登录及常用命令

    Mysql学习 启动数据库服务 net start mysql    (不能加分号!!!!) 关闭数据库服务 net stop mysql 登录数据库 mysql -uroot -p -P3306 - ...

  3. 影响MySQL性能的五大配置参数

    我们今天主要和大家分享的是对MySQL性能影响关系紧密的五大配置参数,以下就是文章的具体内容描述,希望会给你带来一些帮助在此方面. 以下的文章主要是对MySQL性能影响关系紧密的五大配置参数的介绍,我 ...

  4. 图文-水平垂直居中兼容ie6+

    图文-水平垂直居中兼容ie6+ 具体代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8&q ...

  5. 配色问题lingo实现

    大家好,我是小鸭酱,博客地址为:http://www.cnblogs.com/xiaoyajiang !调配颜色 要依次调配红.兰.白.黑.黄五种颜色 红  兰  白  黑  黄 红  0  6  1 ...

  6. Effective Java提升Code Coverage代码涵盖率 - 就是爱Java

    虽然我们已经有了测试程序,但是如何得知是否已完整测试了主程序?,透过Code Coverage代码涵盖率,我们可以快速地得知,目前系统中,有多少程序中被测试过,不考虑成本跟投资效益比,涵盖率越高,代表 ...

  7. Spring + Tomcat 启动报错java.lang.ClassNotFoundException: org.apache.commons.pool.impl.GenericObjectPool

    错误如下: -- ::,-[TS] INFO http-- org.springframework.beans.factory.support.DefaultListableBeanFactory - ...

  8. 下载Google浏览器(Google Chrome)离线安装包方法

    Chrome浏览器默认是在线安装的,但由于网络的原因,有时很久也不能完成安装.其实Chrome官方是提供离线安装包的.具体地址如下: 稳定版:http://www.google.com/chrome/ ...

  9. WINAPI大全~

    http://www.alsprogrammingresource.com/win32_functions_g.html

  10. Qt编程之转换成8,16bit的灰度图

    代码大致是下面这样的.是8bit的灰度图,不是16bit. QString img_path = "C:\\Users\\Yajun Dou\\Desktop\\test.bmp" ...