您的位置:首页 > 其它

南邮 OJ 1014 数据的插入与删除

2015-08-03 10:11 519 查看

数据的插入与删除

时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte

总提交 : 1946            测试通过 : 405 


比赛描述

在一组数据(数目不超过10000)中,插入新数,删除所有与给定数相等的数据。

输入

第一行是未排序的一组非负整数,数目不超过10000。以-1作为结束标志。

第二行是要插入的数。

第三行是要删除的数。

输出

第一行输出自小到大排好序的数。如果没有元素,输出“No elements.”(不包括引号)。

第二行输出插入后自小到大排好序的数,以“,”隔开。

第三行输出删除后自小到大排好序的数,以“,”隔开。如果没有元素,输出“No elements.”(不包括引号)。

样例输入

100 98 79 63 44 99 -1

88

79

样例输出

44,63,79,98,99,100

44,63,79,88,98,99,100

44,63,88,98,99,100

提示

 

题目来源

GUOJ

#include<iostream>
using namespace std;

template<typename Type>
class SinglyLinkedNode{
Type data;
SinglyLinkedNode *next;
public:
void createLink(void);
void printLink(void);
void reverseLink(void);
void deleteElements(Type del);
void addNodeToOrderedLink(Type add);
};

/*
*函数说明:输入一个链表,第一行给出元素数目n(0<n≤1000),第二行给出元素数值
*入口参数:无
*出口参数:无
*作者:陈汝军
*日期:2014-8-17 21:42:44
*/
template<typename Type>
void SinglyLinkedNode<Type>::createLink(void){
int n;						//元素数目
cin>>n;
SinglyLinkedNode *p,*q;
p = this;
while(n--){
q = new SinglyLinkedNode();
cin>>q->data;
p->next = q;
p = q;
}
}

/*
*函数说明:打印一个链表
*入口参数:无
*出口参数:无
*作者:陈汝军
*日期:2014-8-17 21:42:51
*/
template<typename Type>
void SinglyLinkedNode<Type>::printLink(void){
SinglyLinkedNode *p = this->next;
if(p==NULL){
cout<<"No elements.";
}
while(p!=NULL){
cout<<p->data;
p = p->next;
if(p!=NULL)
cout<<",";
}
cout<<endl;
}

/*
*函数说明:翻转一个链表
*入口参数:无
*出口参数:无
*作者:陈汝军
*日期:2014-8-17 21:42:28
*/
template<typename Type>
void SinglyLinkedNode<Type>::reverseLink(void){
SinglyLinkedNode *p,*q;
p = this->next;								//p指向原来链表第一个元素,也是翻转后的最后一个元素的下一个元素
if(p == NULL) return;
q = p->next;								//q指向将要移动的元素
while(q!=NULL){
p->next = q->next;
q->next = this->next;
this->next = q;
q = p->next;
}
}

/*
*函数说明:删除一个链表与给出的值相等的节点
*入口参数:Type del:将要删除的值
*出口参数:无
*作者:陈汝军
*日期:2014-8-17 21:43:38
*/
template<typename Type>
void SinglyLinkedNode<Type>::deleteElements(Type del){
SinglyLinkedNode *p,*q;
p = this;
q = p->next;
while(q!=NULL){
if(q->data == del){
p->next = q->next;
delete q;
q = p->next;
}else{
p = p->next;
q = p->next;
}
}
}

/*
*函数说明:添加一个元素到已经排好序的一个链表,由小到大排序
*入口参数:Type add:将要添加的元素值
*出口参数:无
*作者:陈汝军
*日期:2014-8-17 21:44:23
*/
template<typename Type>
void SinglyLinkedNode<Type>::addNodeToOrderedLink(Type add){
SinglyLinkedNode *p,*q;
q = new SinglyLinkedNode();
q->data = add;
p = this;
while(p->next!=NULL && p->next->data<add){
p = p->next;
}
q->next = p->next;
p->next = q;
}

int main(void){
int temp;
SinglyLinkedNode<int> *head = new SinglyLinkedNode<int>();
while(cin>>temp && temp!=-1){
head->addNodeToOrderedLink(temp);
}
head->printLink();
cin>>temp;
head->addNodeToOrderedLink(temp);
head->printLink();
cin>>temp;
head->deleteElements(temp);
head->printLink();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息