【データ構造——チェーン表】チェーン00——チェーンの知識点のまとめ
チェーンテーブルは動的な構造で、チェーンテーブルを作る時、チェーンテーブルの長さを知る必要がなく、ノードを挿入する時、新しいノードのためにメモリを割り当てて、ポインタを調整します.
1.一方向チェーンの定義
リンクメモリは連続していないので、i番目のノードを探すときは、先頭から巡回する必要があります.効率はO(n).チェーンテーブルにある値を含むノードを削除します.
1.面接問題5——最後からチェーンを印刷します.
2.面接問題13——O(1)時間にチェーンノードを削除する
3.面接問題15——チェーンブロックの最後からk番目のノード
4.面接問題16——逆転リスト
5.面接問題17——二つの並べ替えのチェーン表を結合する
6.面接問題26——複雑チェーンのコピー
7.面接問題37——チェーン2つの最初の公共ノード
プログラミングの美しさ
8.3.4——ヘッドレスチェーンテーブルからノードを削除する
jurly
9.79——チェーンの並べ替えのアルゴリズム
10.チェーン表にリングを作る
11シングルチェーンテーブルにループがあるかどうかを検出する
12.ジョセフリング
13.双方向リンク表と二叉木
1.一方向チェーンの定義
struct ListNode
{
int data;
ListNode *pNext;
};
2.チェーンテーブル挿入ノードvoid InsertNode(ListNode** pHead,int data)//pHead
{
ListNode* pNew = new ListNode();
pNew->data = data;
pNew->pNext = NULL;
if(*pHead == NULL)
{
*pHead = pNew;// ,
}
else
{
ListNode *pNode = *pHead;//
while(pNode->pNext != NULL)
pNode = pNode->pNext;// ,
pNode->pNext = pNew;
}
}
3.チェーンテーブル削除ノードリンクメモリは連続していないので、i番目のノードを探すときは、先頭から巡回する必要があります.効率はO(n).チェーンテーブルにある値を含むノードを削除します.
void DeleteNode(ListNode** pHead,int data)
{
if(pHead == NULL || *pHead == NULL)
return;
ListNode* pToBeDelete = NULL;//
if((*pHead)->data == data)//
{
pToBeDelete = *pHead;
*pHead = (*pHead)->pNext;
}
else
{
// , ,
ListNode* pNode = *pHead;
while(pNode->pNext != NULL && pNode->pNext->data != data)
pNode = pNode->pNext;
// , pNode
if(pNode->pNext != NULL && pNode->pNext->data == data)
{
pToBeDelete = pNode->pNext;
pNode->pNext = pNode->pNext->pNext;
}
//
if(pToBeDelete != NULL)
{
delete pToBeDelete;
pToBeDelete = NULL;
}
}
}
剣指オフ1.面接問題5——最後からチェーンを印刷します.
2.面接問題13——O(1)時間にチェーンノードを削除する
3.面接問題15——チェーンブロックの最後からk番目のノード
4.面接問題16——逆転リスト
5.面接問題17——二つの並べ替えのチェーン表を結合する
6.面接問題26——複雑チェーンのコピー
7.面接問題37——チェーン2つの最初の公共ノード
プログラミングの美しさ
8.3.4——ヘッドレスチェーンテーブルからノードを削除する
jurly
9.79——チェーンの並べ替えのアルゴリズム
10.チェーン表にリングを作る
11シングルチェーンテーブルにループがあるかどうかを検出する
12.ジョセフリング
13.双方向リンク表と二叉木