単一チェーンテーブルからの削除操作
1964 ワード
テーマ:単一チェーンテーブルを非減算シーケンスで設定し、設計アルゴリズムは単一チェーンテーブルの中で値が同じ余分なノードを削除することを実現する.
C++は以下のように実現される.
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;
}