単一チェーンテーブルからの削除操作

1964 ワード

テーマ:単一チェーンテーブルを非減算シーケンスで設定し、設計アルゴリズムは単一チェーンテーブルの中で値が同じ余分なノードを削除することを実現する.
C++は以下のように実現される.
#include 
using namespace std;
struct Node
{
	int data;
	Node *next;
};
class  LinkList
{
public:
	LinkList();//      
	LinkList(int b[], int n);//      
	void Order(int a[], int n);//        
	void Check();//              
	void PrintList();//       
private:
	Node *first;
	int trash[10];//        
	static int t;//         
};
LinkList::LinkList()
{
	first = new Node;
	first->next = NULL;
}
LinkList::LinkList(int b[], int n)
{
	Order(b,10);//          
	Node *s,*r;
	first = new Node;	r = first;
	for (int i = 0; i < n; i++)
	{
		s = new Node;  s->data = b[i];
		r->next = s; r = s;
	}
	r->next = NULL;
}
void LinkList::Check()
{
	t = 0;//       t+1
	Node *p, *q;
	p = first; 
	if (first->next == NULL)
		cout << "      !";
	else
	{
		while (p->next !=NULL)//      
		{
			if (p->data == p->next->data)//                
			{
				q = p->next;
				p->next = q->next;//q      ,         ,                   
				trash[t++] = p->data;//       
				delete q;
			}
			else p = p->next;//p                p    
		}
	}
}
void LinkList::PrintList()
{
	Node *r;
	r = first->next;
	while (r != NULL)
	{
		cout << r->data<next;
	}
	cout << endl;
}

void LinkList::Order(int a[], int n)//        ,    
{
	int i, temp, work;
	for (int pass = 1; pass < n; pass++)
	{
		work = 1;
		for (i = 0; i < n - pass; i++)
		
			if (a[i] >= a[i + 1])//    
			{
				temp = a[i];
				a[i] = a[i + 1];
				a[i + 1] = temp;
				work = 0;
			}
			if (work)break;
	}
}
int main()
{
	int a[10];
	cout << "   :"<> a[i];
    LinkList L(a, 10);
	cout << endl << "   :";
	L.PrintList();
	L.Check();
	cout << endl << "   :";
	L.PrintList();
	return 0;
}