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. CODEVS——T 4189 字典

    http://codevs.cn/problem/4189/  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 大师 Master 题解  查看运行结果     题目描述 Des ...

  2. &lt;LeetCode OJ&gt; 20. Valid Parentheses

    Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...

  3. [Python] Create a Log for your Python application

    Print statements will get you a long way in monitoring the behavior of your application, but logging ...

  4. U盘版Windows 10已经在亚马逊Amazon開始接受预订啦

    Windows 10定于下周7月29日正式公布. Windows 10家庭版119美元.专业版199美元,这个价格包含 Windows 10 授权.

  5. 正确地在QML应用中使用fontsize

    我们知道我们有时须要显示text文本.可是,在QML应用中.我们应该怎样选择font的大小呢?在今天的这篇文章中,我们将展示在Ubuntu平台中的不同文字的大小.我们能够通过FontUtils来帮我们 ...

  6. RISC-V指令集的诞生,"V"也表示变化(variation)和向量(vectors)

    RISC-V登场,Intel和ARM会怕吗? 张竞扬 摩尔精英 摩尔精英.创始人兼CEO 82 人赞了该文章 在2015年12月的Nature网站上,由U.C. Berkeley等几个大学的研究人员主 ...

  7. Thinkphp的 is null 查询条件是什么,以及exp表达式如何使用

    Thinkphp的 is null 查询条件是什么,以及exp表达式如何使用 一.总结 一句话总结:$map['name'] = array('exp','is null'); 1.is null判断 ...

  8. 关于router-link的传参以及参数的传递

    1.路径:http://localhost:8081/#/test?name=1 <router-link :to="{path:'/test',query: {name: id}}& ...

  9. dp之多重背包(二进制优化)

    void solve(int v,int w,int c){    int count=0;    for(int k=1;k<=c;k<<=1)    {        val[c ...

  10. Android SDK使用国内镜像站,解决下载速度慢无法更新?

    1. 国内android开源镜像网站 下面是国内几个比較知名的开源网站.我用的是电子科技大学的镜像源,下载速度很快. mirrors.neusoft.edu.cn //东软信息学院 ubuntu.bu ...