1. 程式人生 > >《資料結構與演算法A》實驗1:按資料元素升序建立單鏈表

《資料結構與演算法A》實驗1:按資料元素升序建立單鏈表

**

實驗題目

**

對輸入的正整數序列建立有序單鏈表。在建立單鏈表的過程中,連結串列中的資料元素按升序排列。當輸入的資料元素在單鏈表中已經存在時,不進行插入操作。 請使用面向物件形式定義結點類和連結串列類,參考程式碼如下。 class Node { int data; Node* next; friend class LinkList; //宣告友元類,以便在LinkList類中可以訪問Node類的私有成員。 }; class LinkList { Node* head; int size; public: … };

程式碼如下:

#include<iostream>
using namespace std;

class Node
{
	int data;
	Node* next;
	friend class LinkList;
};

class LinkList
{
	Node* head;
	int size;
public:
	LinkList() {
		head = new Node;
		head->next = NULL;
		size = 0;
	}

	void addNode(int x) {	//加入節點
		Node *p, *q;
		p = head;
		while (1) {
			if (p->next == NULL) {	//最後一位情況
				q = new Node;
				q->next = p->next;
				q->data = x;
				p->next = q;
				size++;
				break;
			}
			if (p->next->data == x)	//去重
				break;
			if (p->next->data < x) {	//後續節點比x小
				p = p->next;
				continue;
			}
			q = new Node;	//後續節點比x大,滿足升序
			q->next = p->next;
			q->data = x;
			p->next = q;
			size++;
			break;
		}
	}

	void ergodic() {	//遍歷連結串列
		Node *p;
		p = head->next;
		while (p != NULL) {
			cout << p->data << "\n";
			p = p->next;
		}
	}
};

int main() {	//主函式
	int x;
	LinkList LL;
	while (true) {
		cin >> x;
		if (x == -1)
			break;
		LL.addNode(x);	//加入節點
	}
	LL.ergodic();	//遍歷連結串列
	//system("pause");
	return 0;
}