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. github连接报"ssh: connect to host github.com port 22: Connection timed out"错误

    1. 异常 在连接github时,执行"ssh -T git@github.com" 命令时,出现 ssh: connect to host github.com port 22: ...

  2. 各消息队列对比,Kafka深度解析,众人推荐,精彩好文!

    http://blog.csdn.net/allthesametome/article/details/47362451

  3. TaoCode-淘宝的SVN开源托管平台

    无意中发现的..试用了一下,感觉还不错, 简单说一下怎样使用: 进入 http://code.taobao.org/project/explore/ 注冊完后依据提示新建项目,然后在本地随便新建一个文 ...

  4. php 图片局部打马赛克

    php 图片局部打马赛克 原理: 对图片中选定区域的每一像素,添加若干宽度及高度,生成矩型.而每一像素的矩型重叠在一起.就形成了马赛克效果. 本例使用GD库的imagecolorat获取像素颜色,使用 ...

  5. vim 解决tags递归查询问题

    今天在vim下配置了两个插件,分别是exuberant-ctags 跟cscope.这两个插件主要是用来实现类.方法查询跟跳转.至于它们如何安装跟使用,网上教程一大堆,我也是按着别的大神教程一步步来的 ...

  6. 圆形头像CircleImageView和Cardview使用

    效果: 圆形头像在我们的日常使用的app中很常见,因为圆形的头像比较美观. 使用圆形图片的方法可能有我们直接将图片裁剪成圆形再在app中使用, 还有就是使用自定义View对我们设置的任何图片自动裁剪成 ...

  7. c++中重载、重写、覆盖的区别

    Overload(重载):在C++程序中,可以将语义.功能相似的几个函数用同一个名字表示,但参数或返回值不同(包括类型.顺序不同),即函数重载.(1)相同的范围(在同一个类中):(2)函数名字相同:( ...

  8. HDP和HDF

    参考文档: HDP安装: 官方文档:https://docs.hortonworks.com/HDPDocuments/Ambari-2.5.0.3/bk_ambari-installation/co ...

  9. ZJOI2017线段树

    ZJOI2017线段树 题意: ​ 给你一颗广义线段树,太长了,自己去看. 题解: ​ 直接上zkw那一套,把闭区间换成开区间,就是把取\([l,r]\),变成取\([l-1,l-1],[r+1,r+ ...

  10. Jenkins学习总结(3)——Jenkins+Maven+Git搭建持续集成和自动化部署的

    前言 持续集成这个概念已经成为软件开发的主流,可以更频繁的进行测试,尽早发现问题并提示.自动化部署就更不用说了,可以加快部署速度,并可以有效减少人为操作的失误.之前一直没有把这个做起来,最近的新项目正 ...