双向链表(自己写的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程序的思路,之前文章中有介绍.对于写二进制文件我们习惯用 面向字节类的流.对于写字符我们使用面向字符类的流.但是我 ...
随机推荐
- ZOJ 2532 Internship
Internship Time Limit: 5000ms Memory Limit: 32768KB This problem will be judged on ZJU. Original ID: ...
- Maven实战(八)---模块划分
为了防止传递依赖,我们各个模块之间尽量用直接依赖的方式.本篇文章介绍多模块化开发.我们做过Maven项目的都知道.我们的项目一般都是分模块的,每一个模块都会相应着一个POM.xml文件,它们之间通过继 ...
- 软件设计师必备——操作系统·
引子: 在今天,我们对于操作系统已经很熟悉,不论是微软的windows还是苹果的Mac OS X,包扩当先很流行的android都在操作系统范畴,而这些操作系统尽管各有各的特点,可是,作为总体,我们能 ...
- HTTP请求和响应1:概述
HTTP的报文分为请求报文和响应报文,打开一个web页面后,浏览器将发起一个HTTP请求报文.HTTPserver收到请求后将回送一个响应报文. 报文的基本结构 HTTP的请求和响应报文都由三个部分组 ...
- {head first} --- networking 3
Chapter 10 无线网络 续 .. Chapter 11 网络安全 Chapter 12 设计网络 涉及到物理的设计网络布局等.我没细看. 附录
- 13.2 UPDATE
13.2 UPDATE正在更新内容.请稍后
- Docs-->.NET-->API reference-->System.Web.UI.WebControls-->Repeater
https://docs.microsoft.com/en-us/dotnet/api/system.web.ui.webcontrols.repeater?view=netframework-4.7 ...
- vue --- 解读vue的中webpack.base.config.js
const path = require('path') const utils = require('./utils')// 引入utils工具模块,具体查看我的博客关于utils的解释,utils ...
- 深入理解Android(3)——Eclipse集成javah和NDK-Builder
在上一篇文章中我们使用了javah工具来生成了native java文件所对应的C++头文件,但是这样生成比较麻烦,我们这一篇来介绍如何在eclipse中集成javah和NDK-Builder. 一. ...
- Linux MTD 子系统
一.MTD子系统概述 MTD(Memory Technology Device, 内存技术设备)是用于访问memory 设备 (ROM.FLASH)的Linux子系统. 主要目的是为了使新的memor ...