C++程序设计实践指导1.10二维数组元素换位改写要求实现
改写要求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二维数组元素换位改写要求实现的更多相关文章
- C++程序设计实践指导1.2二维数组的操作运算改写要求实现
改写要求1:改写为以单链表表示二维数组 #include <cstdlib> #include <iostream> using namespace std; struct L ...
- C++程序设计实践指导1.3求任意整数降序数改写要求实现
改写要求1:动态生成单链表存储 #include <cstdlib> #include <iostream> using namespace std; struct LinkN ...
- C++程序设计实践指导1.15找出回文数改写要求实现
改写要求1:用单链表实现 #include <cstdlib> #include <iostream> using namespace std; struct LinkNode ...
- C++访问二维数组元素
if(*image_in+j*+xsize+i)>=thresh)//xsize图像宽度 image_out是首地址,加上j*行宽就是目标行的首地址,再加上i,就是在此行中的第i个像素,所以整个 ...
- C++二级指针第二种内存模型(二维数组)
C++二级指针第二种内存模型(二维数组) 二维数组 二维数组本质上是以数组作为数组元素的数组,即“数组的数组”. 定义 类型说明符 数组名[常量表达式][常量表达式] 例如: float a[3][4 ...
- 【学习笔记】【C语言】二维数组
1. 什么是二维数组 一个数组能表示一个班人的年龄,如果想表示很多班呢? 什么是二维数组?int ages[3][10]; 三个班,每个班10个人 相当于3行10列 相当于装着3个一维数组 二维数组是 ...
- Java数组之二维数组
Java中除了一维数组外,还有二维数组,三维数组等多维数组.本文以介绍二维数组来了解多维数组. 1.二维数组的基础 二维数组的定义:二维数组就是数组的数组,数组里的元素也是数组. 二维数组表示行列二维 ...
- 第3章 Java数组(上): 一维数组和二维数组
3.数组及排序算法(2天) 3.1 数组的概述 2课时 3.2 一维数组的使用 3课时 3.3 多维数组的使用 3课时 3.4 数组中涉及到的常见算法 3课时 3.5 Arrays工具类的使用 3课时 ...
- C/C++——二维数组与指针、指针数组、数组指针(行指针)、二级指针的用法
本文转载自:https://blog.csdn.net/qq_33573235/article/details/79530792 1. 二维数组和指针 要用指针处理二维数组,首先要解决从存储的角度对二 ...
随机推荐
- android中细节效果总结
android中细节效果总结 andorid取消最上方的标题同时全屏显示 Source code protected void onCreate(Bundle savedInstanceS ...
- Mysql学习(慕课学习笔记1)启动、登录及常用命令
Mysql学习 启动数据库服务 net start mysql (不能加分号!!!!) 关闭数据库服务 net stop mysql 登录数据库 mysql -uroot -p -P3306 - ...
- 影响MySQL性能的五大配置参数
我们今天主要和大家分享的是对MySQL性能影响关系紧密的五大配置参数,以下就是文章的具体内容描述,希望会给你带来一些帮助在此方面. 以下的文章主要是对MySQL性能影响关系紧密的五大配置参数的介绍,我 ...
- 图文-水平垂直居中兼容ie6+
图文-水平垂直居中兼容ie6+ 具体代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8&q ...
- 配色问题lingo实现
大家好,我是小鸭酱,博客地址为:http://www.cnblogs.com/xiaoyajiang !调配颜色 要依次调配红.兰.白.黑.黄五种颜色 红 兰 白 黑 黄 红 0 6 1 ...
- Effective Java提升Code Coverage代码涵盖率 - 就是爱Java
虽然我们已经有了测试程序,但是如何得知是否已完整测试了主程序?,透过Code Coverage代码涵盖率,我们可以快速地得知,目前系统中,有多少程序中被测试过,不考虑成本跟投资效益比,涵盖率越高,代表 ...
- Spring + Tomcat 启动报错java.lang.ClassNotFoundException: org.apache.commons.pool.impl.GenericObjectPool
错误如下: -- ::,-[TS] INFO http-- org.springframework.beans.factory.support.DefaultListableBeanFactory - ...
- 下载Google浏览器(Google Chrome)离线安装包方法
Chrome浏览器默认是在线安装的,但由于网络的原因,有时很久也不能完成安装.其实Chrome官方是提供离线安装包的.具体地址如下: 稳定版:http://www.google.com/chrome/ ...
- WINAPI大全~
http://www.alsprogrammingresource.com/win32_functions_g.html
- Qt编程之转换成8,16bit的灰度图
代码大致是下面这样的.是8bit的灰度图,不是16bit. QString img_path = "C:\\Users\\Yajun Dou\\Desktop\\test.bmp" ...