UVA还是上不去T T哭瞎了。

只好老老实实的研究上回买的书了。

写得有点长。好吧,我只是来复习C++类的。

特意用class 而不用struct写链表。

数据结构还没学。。。双向链表就当先预习了。

大神们轻喷。。T T

有一些小球,从左到右依次编号为1,2,3……n

你可以执行两种指令,其中A X Y表示把小球X移动到小球Y的右边,B X Y表示把小球X移动到小球Y的右边, X不等于Y

输入小球个数 n和指令条数m和m条指令,从左到右输出最后的序列。

样例输入:

6 2

A 1 4

B 3 5

样例输出:

2 1 4 5 3 6

我特意正反输出,验证了双向链表的完整性。

#include<iostream>
using namespace std;
class node
{
public:
int data;
int num;
node *left,*right;
}; class link
{
node *head,*rear;
public:
void newnode(int n);
void display();
void reverse_display();
void move(char action,int a,int b);
void del(node *p);
void insertleft(node *p1,node *p2);//p1是插入的位置,p2是代插的位置,下同
void insertright(node *p1,node *p2);
~link();
}; link::~link()
{
node *p=head->right,*temp;
if(p!=NULL)
while(p->right!=NULL)
{
temp=p->right;
delete p;
p=temp;
}
delete head;
delete rear;
}
void link::insertleft(node *p1,node *p2)//p1是插入的位置,p2是代插的位置
{
if(p1==head)
{
p2->right=p1;
p1->left=p2;
head=p2;
p2->left=NULL;
}
else
{
node *temp=p1->left;
temp->right=p2;
p2->right=p1;
p1->left=p2;
p2->left=temp;
}
} void link::insertright(node *p1,node *p2)
{
if(p1==rear)
{
p2->left=p1;
p1->right=p2;
rear=p2;
p2->right=NULL;
}
else
{
node *temp=p1->right;
temp->left=p2;
p2->left=p1;
p1->right=p2;
p2->right=temp;
}
} void link::del(node *p)
{
if(p==head)
{
head=head->right;
head->left=NULL;
}
else if(p==rear)
{
rear=rear->left;
rear->right=NULL;
}
else
{
node *last=p->left,*next=p->right;
last->right=next;
next->left=last;
}
p->left=p->right=NULL;
} void link:: newnode(int n)
{
node *p1,*p2;
p1=p2=new node;
head=p1;
p1->left=p1->right=NULL;
for(int i=0;i<n;i++)
{
p1->num=p1->data=i+1;
if(i==n-1)
{
rear=p1;
break;
}
p1=new node;
p1->right=NULL;
p1->left=p2;
p2->right= p1;
p2=p2->right;
}
} void link::move(char action,int a,int b)
{
node *p1,*p2;
p1=p2=head;
while(p1->num!=a&&p1!=NULL)
p1=p1->right;
while(p2->num!=b&&p2!=NULL)
p2=p2->right;
del(p1);
if(action=='A')
insertleft(p2,p1);
else
insertright(p2,p1);
} void link::display()
{
node* p1=head;
while(p1!=NULL)
{
cout<<p1->data<<(p1->right==NULL?"\n" :" ");
p1=p1->right;
}
} void link::reverse_display()
{
node *p1=rear;
while(p1!=NULL)
{
cout<<p1->data<<(p1->left==NULL?"\n" :" ");
p1=p1->left;
}
} int main()
{
int n,m;
char action;
cin>>n>>m;
link s;
s.newnode(n);
while(m--)
{
int a,b;
//s.display();
cin>>action>>a>>b;
s.move(action,a,b);
}
s.display();
s.reverse_display();
return 0;
}

双向链表(自己写的c++类)的更多相关文章

  1. js 一个自写的 监测类

    自从认识了jQuery后,很多页面加载入口,都放在document.ready里面.但是有时候这个觉得ready加载太慢, 这个[监测类 ]就开始产生了 效果类似这个. 每10毫秒检查一次,直到加载了 ...

  2. Java基础-继承-编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数 loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。每个 类都有构造方法和输出相关数据的方法。最后,写一个测试类来测试这些类的功 能。

    #29.编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight.小车类Car是Vehicle的子类,其中包含的属性有载人数 loader.卡车类T ...

  3. 其于OpenXml SDK写的帮助类

    /// <summary> /// 其于OpenXml SDK写的帮助类 /// </summary> public static class OpenXmlHelper { ...

  4. ItcastOA_设计BaseDao_设计DAO接口和实现类_写DAO实现类中的方法内容

    3. 基础功能 3.1. 设计BaseDao接口与BaseDaoImpl类 每个实体都应有一个对应的Dao,他封装了对这个实体的数据库操作.例 实体Dao接口实现类 ================= ...

  5. Controller类的方法上的RequestMapping一定要写在Controller类里吗?

    转载请标明出处: https://blog.csdn.net/forezp/article/details/80069961 本文出自方志朋的博客 使用Spring Cloud做项目的同学会使用Fei ...

  6. 写shell工具类,一个常用实例

    简述: 当我们常用到某些指令时,我们就需要将这个命令进行封装.封装的设计和扩展,因人而异.但为了每个人都能够了解到这个命令,常需要写出这个类的help. 关键字: 函数.getopts 函数 通过自定 ...

  7. JAVA一个文件写多个类

    JAVA一个文件写多个类,并且是同级类,需注意: 在一个.java文件中可以有多个同级类,  其修饰符只可以public/abstract/final/和无修饰符 public修饰的只能有一个,且必须 ...

  8. 30行自己写并发工具类(Semaphore, CyclicBarrier, CountDownLatch)是什么体验?

    30行自己写并发工具类(Semaphore, CyclicBarrier, CountDownLatch)是什么体验? 前言 在本篇文章当中首先给大家介绍三个工具Semaphore, CyclicBa ...

  9. 随手写的Java向文本文件写字符串的类

    今天看了一篇讲Java IO流的文章,好长时间没用IO流了,回顾了一下Java编写IO程序的思路,之前文章中有介绍.对于写二进制文件我们习惯用 面向字节类的流.对于写字符我们使用面向字符类的流.但是我 ...

随机推荐

  1. 解决树莓派新版系统 ssh连接不了问题

    一.解决办法 由于有连接了显示器,所以可以直接输入命令行开启树莓派的SSH,并且使用putty连接就可以. sudo service ssh start sudo service ssh sttus ...

  2. tomcat指定配置文件路径方法

    1.在catalina.sh 中设置JAVA_OPTS,例如: JAVA_OPTS='-server -Xms1024m -Xmx1024m -XX:NewSize=128m -XX:MaxPermS ...

  3. go 可以开发桌面应用

    go 可以开发桌面应用 go 可以开发桌面应用,但并不是很舒适.可以使用的GUI库有:1.goqt,LiteIDE作者出品,Go和QT的绑定,还未发布2.go.uik,纯Go实现的并发UI工具3.wa ...

  4. Kinect 开发 —— ColorBasic

    创建一个Kincet项目通常需要: 1. 创建一个VS项目,一般为了展示通常创建一个wpf项目. 2. 添加Microsoft.Kinect.dll引用,如果是早期版本的SDK,这个名称可能不同. 3 ...

  5. OpenCV —— 图像处理

    使用图像结构中所定义的高层处理方法(图形和视觉范畴)来完成特定任务 平滑处理   cvSmooth 处理后图像与输入图像的大小相同(不用考虑边缘) 中值滤波  CV_MEDIAN 不支持 in pla ...

  6. HDU 3594 The trouble of Xiaoqian 混合背包问题

    The trouble of Xiaoqian Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/ ...

  7. js 判断是不是空、值是否存在

    判断数组是否存在某个值: Array.indexOf(val) > -1 //存在 (缺陷:一是不够语义化,它的含义是找到参数值的第一个出现位置,所以要去比较是否不等于-1,表达起来不够直观.二 ...

  8. vue脚手架3.0的搭建

    一.安装node 打开cmd输入node -v查看是否安装成功 显示node版本号表示安装成功,显示‘node’不是内部或外部命令表示未安装node.node安装地址:http://nodejs.cn ...

  9. WINDOWS8.1企业版官方下载

    这是评估版 WINDOWS8.1企业版官方下载源 https://www.itechtics.com/download-windows-8-1-enterprise-offline-installer ...

  10. js05---js实现Map

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...