単純チェーンテーブル実装

3354 ワード

#include<iostream>
using namespace std;
template<typename T>
class List {
public:
   struct Node {
	T value;
	Node* next;
   };

	List()
	{   
		while ( head == 0)
		{
	       head=new Node;
		}
		head->next=0;
	}
	bool Create()
	{
		Node* x;
		Node* p;
		T v;
		char a;
		p=new Node;
		if (p!=0)
		{
		   p=head;

        cout << "Please input the elements by space"<<endl;
		while(v != '
') {         cin >> v;    x=new Node;    p->next=x;        x->value=v;        x->next=0;    p=x;   } return true; }       return false;    } bool Insert() { Node* p; Node* temp; Node* x; int k, i; T v;     p=new Node; temp=new Node; x=new Node; p=head;         cout << "please input the element's location" << endl; cin >> k; if (k>0) { for (i=0; i<k-1; i++,p=p->next) {   if (p == 0)   return false; }             cout << "please input the element's value" << endl;             cin >> v;     x->value=v; if( p->next == 0) { p->next=x; x->next=0; } else { temp=p->next; p->next=x; x->next=temp; } return true; } return false; } bool Delete() { Node* p; Node* temp; int k, i;     p=new Node; temp=new Node; p=head;         cout << "please input the element's location" << endl; cin >> k; if (p->next!=0 && k>0) {             for(i=0; i<k-1; i++,p=p->next); { if (p->next == 0) return false; }                temp=p->next;                p->next=p->next->next;    delete temp;    return true; } return false; } void Display() { Node* p; if( head->next != 0) { for(p=head->next; p!=0; p=p->next) cout<<p->value<<" "; cout<<endl; } else cout << "empty!"<<endl; } private: Node* head; }; void menu(); int main() { bool res;     int i; List<char> a;     menu();    while(1) {     cin >> i;         switch(i) {       case 1:   {  res=a.Create(); if (res == false) cout << "failed" << endl; else cout<< "succeed" << endl; break; }   case 2:   {                 res=a.Delete(); if (res == false) cout << "failed" << endl; else cout<< "succeed" << endl; break;   }   case 3:   {                 res=a.Insert(); if (res == false) cout << "failed" << endl; else cout<< "succeed" << endl; break;   }   case 4:   {   a.Display();   break;   }   case 5:   {   return 0;   }   default:break; } } } void menu() {     cout << "please input a number to choose your operation" << endl; cout << "1: create a list" << endl << "2: delete an element by location" << endl; cout << "3: insert an element by location" << endl << "4: display the latest list" << endl;     cout << "5: quit the programm" << endl; }