データ構造(チェーンの実現)

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;
}