C++データ構造の単一チェーンテーブル
3395 ワード
チェーンテーブルの作成
1.プラグ方式
新しいノードのポインタドメインは、ヘッダノードのポインタドメインの値を格納し、ヘッダノードのポインタ値を新しいノードのアドレスに変更します.すなわち、s->next=Head->next、Head->next=s(順序は変更できません)
2.テールプラグ
新しいノードはチェーンテーブルの末尾のノードであるため、新しいノードのポインタ値はNULL、すなわちs->next=NULLであり、前のノードのポインタは新しいノード、すなわちp->next=sを指し、その後pは新しいノードを指し、p=sは、ずっとこのようにラウンドしている.
挿入
1.初期化ポインタpはヘッダポインタに等しく、i=0
2.p=p->nextをループし、pがNULLに等しいか、i=L-1番目のノードが見つかるまで、pはL-1番目のノードを指す
3.pが空のポインタであれば、位置が間違っていて、エラー値を提示して返します.そうでなければ、newの新しいノードは、新しいノードのポインタフィールドをp->next(元のL位置のノードのアドレス)に割り当て、p->nextが新しいノードのアドレスを変更します(逆にすることはできません).
4.表長+1
削除
1.
初期化ポインタpはヘッダポインタに等しく、i=0
2.p=p->nextをループし、pがNULLに等しいか、i=L-1番目のノードが見つかるまで、pはL-1番目のノードを指す
3.pが空のポインタである場合、位置エラーが発生し、エラー値が返されます.そうでない場合、現在のノードのポインタ値を次のノードのポインタ値(すなわち、次のノードのアドレス)に変更し、deleteのL番目のノード
チェーンテーブルの破棄
最初のノードから、次のノードのアドレスを取得し、現在のノードのメモリを解放し、NULLに遭遇するまでループします.
1.プラグ方式
新しいノードのポインタドメインは、ヘッダノードのポインタドメインの値を格納し、ヘッダノードのポインタ値を新しいノードのアドレスに変更します.すなわち、s->next=Head->next、Head->next=s(順序は変更できません)
2.テールプラグ
新しいノードはチェーンテーブルの末尾のノードであるため、新しいノードのポインタ値はNULL、すなわちs->next=NULLであり、前のノードのポインタは新しいノード、すなわちp->next=sを指し、その後pは新しいノードを指し、p=sは、ずっとこのようにラウンドしている.
挿入
1.初期化ポインタpはヘッダポインタに等しく、i=0
2.p=p->nextをループし、pがNULLに等しいか、i=L-1番目のノードが見つかるまで、pはL-1番目のノードを指す
3.pが空のポインタであれば、位置が間違っていて、エラー値を提示して返します.そうでなければ、newの新しいノードは、新しいノードのポインタフィールドをp->next(元のL位置のノードのアドレス)に割り当て、p->nextが新しいノードのアドレスを変更します(逆にすることはできません).
4.表長+1
削除
1.
初期化ポインタpはヘッダポインタに等しく、i=0
2.p=p->nextをループし、pがNULLに等しいか、i=L-1番目のノードが見つかるまで、pはL-1番目のノードを指す
3.pが空のポインタである場合、位置エラーが発生し、エラー値が返されます.そうでない場合、現在のノードのポインタ値を次のノードのポインタ値(すなわち、次のノードのアドレス)に変更し、deleteのL番目のノード
チェーンテーブルの破棄
最初のノードから、次のノードのアドレスを取得し、現在のノードのメモリを解放し、NULLに遭遇するまでループします.
#include
using namespace std;
struct Node{
int date;
Node *next;
};
class LinkList{
private:
Node *Head;
public:
LinkList(int N);//
~LinkList();//
void Create_Head(int N);//
void Create_R(int N);//
bool IsEmpty();//
int Insert(int L,int Elem);//
int Delete(int L);//
int Length();//
int GetElem(int L);//
int Locate(int Elem);//
void Show();//
};
LinkList::LinkList(int N)
{
cout<>choose;
Head=new Node;//
Head->next=NULL;
cout<date=N;
cout<next;
delete s;
}
cout<>s->date;
s->next=p->next;
p->next=s;
}
}
void LinkList::Create_R(int N)
{
Node *p,*s;
p=Head;
for (int i=1;i<=N;i++)
{
s=new Node;
cin>>s->date;
s->next=NULL;
p->next=s;
p=s;
}
}
bool LinkList::IsEmpty()
{
return (Head->next==NULL);
}
int LinkList::Insert(int L,int Elem)
{
Node *p=Head;
for (int i=0;inext;
}
if (!p)
{
cout<date=Elem;
s->next=p->next;
p->next=s;
Head->date+=1;
cout<next;
}
if (!p)
{
cout<next;
p->next=s->next;
delete s;
cout<date-=1;
return 0;
}
}
int LinkList::GetElem(int L)
{
Node *p=Head;
int i=0;
while (inext;
i++;
}
if (!p)
{
cout<date;
}
int LinkList::Locate(int Elem)
{
Node *p=Head;
int i=0;
while (p&&p->date!=Elem)
{
p=p->next;
i++;
}
if (p->date==Elem)
return i;
else
{
cout<date;
}
void LinkList::Show()
{
Node *p=Head->next;//
while (p)
{
cout<date<next;
}
}
int main()
{
LinkList LS(10);
cout<>i;
while (i)
{
switch(i)
{
case 1:
cout<>L;
cout<>Elem;
LS.Insert(L,Elem);
LS.Show();
break;
case 2:
cout<>L;
LS.Delete(L);
LS.Show();
break;
case 3:
cout<>L;
cout<>Elem;
cout<>i;
}
return 0;
}