Cách nhập và xuất HashTable trong C++

Dạ em chào mọi người, đề bài của em là xử lí xung đột bằng danh sách liên kết. Đây là code của em:

#include <iostream>
using namespace std;

struct node
{
	int value;
	node* pNext;
};

typedef struct node NODE;
NODE* HASHTABLE[11];

void InitHashTable()
{
	for (int i = 0; i < 11; i++)
	{
		HASHTABLE[i] = NULL;
	}
}

int HashFucntion(int k)
{
	return k % 11;
}

void Insert(int value, int i)
{
	NODE* p, * k;
	p = new NODE;
	p->value = value;
	p->pNext = NULL;
	if (HASHTABLE[i] == NULL)
	{
		HASHTABLE[i] = p;
	}
	else
	{
		for (k = HASHTABLE[i]; k->pNext != NULL; k = k->pNext)
		{
			k->pNext = p;
		}
	}
}

void InPut(int a[])
{
	for (int i = 0; i < 7; i++)
	{
		int hashIndex = HashFucntion(a[i]);
		Insert(a[i], hashIndex);
	}
}

void OutPut()
{
	for (int i = 0; i < 11; i++)
	{
		cout << "key = " << i << ": ";
		for (NODE* k = HASHTABLE[i]; k != NULL; k = k->pNext)
		{
			cout << k->value << " ";
		}
		cout << "\n";
	}
}

int main()
{
	InitHashTable();
	int a[] = { 7, 12, 16, 20, 24, 40, 15 };
	InPut(a);
	OutPut();
	return 0;
}

em chạy từng dòng code thấy vòng for của hàm Insert không chạy:

void Insert(int value, int i)
{
	NODE* p, * k;
	p = new NODE;
	p->value = value;
	p->pNext = NULL;
	if (HASHTABLE[i] == NULL)
	{
		HASHTABLE[i] = p;
	}
	else
	{
		for (k = HASHTABLE[i]; k->pNext != NULL; k = k->pNext)
		{
			k->pNext = p;
		}
	}
}

em thắc mắc là tại sao vậy ạ

Nhánh điều kiện if đã chạy rồi thì sao nó chạy vào else.

2 Likes

key = 7 nó giữ index bằng 7, key = 40 nó cũng có index = 7, em nghĩ giờ nó sẽ thực hiện else chứ anh

À, hình dung ra được rồi.
Mục đích của vòng lặp là thêm vào cuối DSLK phải không?
Chính xác là nó có chạy. Nhưng nó không chạy đúng ý định của bạn và bạn gán ngay trong vòng lặp là SAI.
Chạy chế độ Gỡ lỗi (Debug) thì sẽ biết thôi.

		for (k = HASHTABLE[i]; k->pNext!= NULL; k = k->pNext);
		k->pNext = p;
		/* Đoạn mã tương tự với while
		k = HASHTABLE[i];
		while(k->pNext!=NULL){
		    k = k->pNext;
		}
		k->pNext = p;
		*/
2 Likes

sau khi chạy từng dòng code thì em đã hiểu hè hè thanh kiu a

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?