南郵OJ 1004リニアメーター操作


リニアテーブル操作
時間制限(通常/Java):
1000 MS/3000 MS実行メモリ制限:65536 KByte総発行:3959テスト合格:878
試合の説明
線形テーブルはn個の要素の秩序化集合(n≧0)であり、nは線形テーブル中の要素の個数であり、線形テーブルの長さと呼ばれる.線形テーブルの要素は、一連のアドレス連続メモリセルで順次記憶することができ、この記憶方式の線形テーブルをシーケンステーブルと呼ぶ.
シーケンステーブルで演算を実現し、シーケンステーブルの逆設定を実現し、テーブル内のすべての要素値がxに等しい要素を削除してください.
入力
シーケンステーブル要素タイプは、整数、文字、および実の3つのデータのセットです.
各グループの第1行は要素数n(0しゅつりょく
3組のデータは、各組の第1行に逆置後の順序表要素が与えられ、第2行はこの基礎の上で指定された要素を削除した後の順序表要素であり、各出力要素の後にスペースがあり、要素がすべて削除された場合、空の行が出力される.
サンプル入力
8 1 2 3 7 5 6 7 8  7 3 a c m h 4 1.2 3.4 5.6 7.8 1.2
サンプル出力
8 7 6 5 7 3 2 1  8 6 5 3 2 1  m c a  m c a  7.8 5.6 3.4 1.2  7.8 5.6 3.4 
ヒント
この問題は南京郵電大学の「データ構造A」実験1の内容に属し、教科書のコードを検証し、慎重に解答してください.
2014.12.30出力フォーマットについて必要な説明をした.
テーマソース
南京郵電大学の《データ構造A》課程の実験
#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);
};

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

template<typename Type>
void SinglyLinkedNode<Type>::printLink(void){
	SinglyLinkedNode *p = this->next;
	while(p!=NULL){
		cout<<p->data<<" ";
		p = p->next;
	}
	cout<<endl;
}

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

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

template<typename Type>
void ACM1004(){
	SinglyLinkedNode<Type> *head = new SinglyLinkedNode<Type>();
	Type del;	
	head->createLink();
	cin>>del;
	head->reverseLink();
	head->printLink();
	head->deleteElements(del);
	head->printLink();
}
int main(void){
	ACM1004<int>();
	ACM1004<char>();
	ACM1004<double>();
}