南邮 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; }