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に遭遇するまでループします.
#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;
}