双向链表(自己写的c++类)
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++类)的更多相关文章
- js 一个自写的 监测类
自从认识了jQuery后,很多页面加载入口,都放在document.ready里面.但是有时候这个觉得ready加载太慢, 这个[监测类 ]就开始产生了 效果类似这个. 每10毫秒检查一次,直到加载了 ...
- Java基础-继承-编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数 loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。每个 类都有构造方法和输出相关数据的方法。最后,写一个测试类来测试这些类的功 能。
#29.编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight.小车类Car是Vehicle的子类,其中包含的属性有载人数 loader.卡车类T ...
- 其于OpenXml SDK写的帮助类
/// <summary> /// 其于OpenXml SDK写的帮助类 /// </summary> public static class OpenXmlHelper { ...
- ItcastOA_设计BaseDao_设计DAO接口和实现类_写DAO实现类中的方法内容
3. 基础功能 3.1. 设计BaseDao接口与BaseDaoImpl类 每个实体都应有一个对应的Dao,他封装了对这个实体的数据库操作.例 实体Dao接口实现类 ================= ...
- Controller类的方法上的RequestMapping一定要写在Controller类里吗?
转载请标明出处: https://blog.csdn.net/forezp/article/details/80069961 本文出自方志朋的博客 使用Spring Cloud做项目的同学会使用Fei ...
- 写shell工具类,一个常用实例
简述: 当我们常用到某些指令时,我们就需要将这个命令进行封装.封装的设计和扩展,因人而异.但为了每个人都能够了解到这个命令,常需要写出这个类的help. 关键字: 函数.getopts 函数 通过自定 ...
- JAVA一个文件写多个类
JAVA一个文件写多个类,并且是同级类,需注意: 在一个.java文件中可以有多个同级类, 其修饰符只可以public/abstract/final/和无修饰符 public修饰的只能有一个,且必须 ...
- 30行自己写并发工具类(Semaphore, CyclicBarrier, CountDownLatch)是什么体验?
30行自己写并发工具类(Semaphore, CyclicBarrier, CountDownLatch)是什么体验? 前言 在本篇文章当中首先给大家介绍三个工具Semaphore, CyclicBa ...
- 随手写的Java向文本文件写字符串的类
今天看了一篇讲Java IO流的文章,好长时间没用IO流了,回顾了一下Java编写IO程序的思路,之前文章中有介绍.对于写二进制文件我们习惯用 面向字节类的流.对于写字符我们使用面向字符类的流.但是我 ...
随机推荐
- 保留原先小程序名称 更改微信小程序主体
首先给小程序开发者普及一些官方消息: 1.目前官方是不允许修改已经认证的小程序主体信息!(公众号可以修改) 2.小程序与公众号的名称是全平台唯一,即如果小程序叫‘ABC’其他小程序和公众号就不能存在‘ ...
- js防止提交数据之后的按钮连击
js防止提交数据之后的按钮连击 一.实例描述 当页面提交的数据特别多时,页面会反应比较迟钝,此时如果用户等不及而连续单击按钮,导致数据重复提交.本案例就是为了防止数据重复提交. 二.截图 三.代码 & ...
- 轻松使用 Redis slowlog
之前中秋项目搞活动,用户比较活跃 SE.Redis 频繁报 Timeout 异常,狂翻了一波 issues 发现提这个问题还蛮多的,作者非常频繁的提到使用 slowlog 这个命令进行排查,那么问题就 ...
- rtmp,rtsp,hLS区别
流媒体协议一共三种:rtmp,rtsp,http live streaming(apple和adobe各一种)rtmp是adobe的,rtsp android native支持,http live s ...
- HTTP -- 请求/响应 结构
一:一个HTTP请求报文由四个部分组成:请求行.请求头部.空行.请求数据. 1.请求行 1.请求方法:GET POST 2.URL字段 3.HTTP版本字段 2.请求头 1.Accept:浏览器可接受 ...
- 突破极限 解决大硬盘上安装Unix新思路
一.问题提出 硬盘越做越大,然我喜欢让我忧.10年前就遇到过在586电脑BIOS不认识超过8.4G容量硬盘的问题,以及Windows Nt操作系统不认大硬盘(容量超过8.4G)的问题,对于Linux ...
- [ Java ] [ Spring ] [ Spring MVC ] Tutorial
中文 Spring 教學 http://hatemegalaxy.blogspot.tw/2014/09/spring-framework-useful-tutorials-for.html 英文 S ...
- Exercise : Softmax Regression
Step 0: Initialize constants and parameters Step 1: Load data Step 2: Implement softmaxCost Implemen ...
- cmd 批处理制作
新建个记事本abc.txt,把下面的内容复制到记事本d:cd d:\a\b\cdir d:\a\b\ccmd复制完成后并保存,把文件的后缀名.txt改为.bat变成一个批处理即abc.bat
- Hyperic
https://my.oschina.net/hyperichq/blog/525590