データ構造(チェーンの実現)
3001 ワード
1.リンク表の実現:リンクを挿入し、メモリを動的に割り当てるために、割り当てられたメモリが空の場合、メモリの割り当てに失敗します.
2.番号検索:for循環検索、キーワード検索:whileサイクル
3.チェーンの欠点は検索に関わらず、削除はすべての初めからの接合点から遍歴することです.
4.データ項目が一つだけの場合、一つの構造体だけで、データ項目が複数ある場合、二つの構造体を定義します.
#include
#include
using namespace std;
struct Data {
string key;
string name;
int age;
};
typedef struct Node {
struct Data data;
struct Node *next;
}LNode,*LinkList;
// :
// , null
LinkList CreateList1(LinkList head, Data std)
{
LinkList node;
if (!(node = new LNode))
{
cout << " !" << endl;
return 0;
}
else
{
node->data = std;
node->next = head;
head = node;
return head;
}
}
LinkList CreataList2(LinkList head, Data std)
{
LinkList node, test;
if (!(node = new LNode))
{
cout << " !" << endl;
return 0;
}
else
{
node->data = std;
node->next = NULL;
if (head == NULL)
{
head = node;
return head;
}
else
{
test = head;
while ((test->next) != NULL)
{
test = test->next;
}
test->next = node;
return head;
}
}
}
LinkList FindList1(LinkList head, int k)
{
LinkList test;
test = head;
for (int i = 1; i < k&&test; ++i)
{
test = test->next;
}
return test;
}
LinkList FindList2(LinkList head,string name ) // name
{
LinkList test;
test = head;
while (test)
{
if (test->data.name == name)
{
return test;
}
test = test->next;
}
return NULL;
}
LinkList InsertList(LinkList head, int k, Data data)
{
LinkList test,exam;
if (!(test = new(LNode)))
{
cout << " !" << endl;
}
else
{
test->data = data;
exam = FindList1(head, k - 1);
if (exam)
{
test->next = exam->next;
exam->next = test;
}
else
{
cout << " !" << endl;
delete test;
}
}
return head;
}
LinkList DeleteList1(LinkList head, int k)
{
LinkList a, b;
a = FindList1(head, k - 1);
b = FindList1(head, k);
a->next = b->next;
return head;
}
LinkList DeleteList2(LinkList head, string name)
{
LinkList test, exam;
test = FindList2(head, name);
if (test)
delete test;
else
return 0;
}
int LenList(LinkList head)
{
LinkList test;
int len=0;
test = head;
while (test)
{
++len;
test = test->next;
}return len;
}
void DisplayList(LinkList head)
{
LinkList test;
test = head;
while (test)
{
cout << test->data.key <data.name << "\t" << test->data.age << endl;
test = test->next;
}
}
int main()
{
LinkList lis, head = NULL;
Data data;
string name;
cout << " , : , , ( 0 )" << endl;
while (1)
{
cin >> data.key >> data.name >> data.age;
if (data.age == 0)
{
break;
}
head =CreateList1(head, data);
}
DisplayList(head);
// , 。
system("pause");
return 0;
}