《資料結構與演算法A》實驗1:按資料元素升序建立單鏈表
阿新 • • 發佈:2018-12-10
**
實驗題目
**
對輸入的正整數序列建立有序單鏈表。在建立單鏈表的過程中,連結串列中的資料元素按升序排列。當輸入的資料元素在單鏈表中已經存在時,不進行插入操作。 請使用面向物件形式定義結點類和連結串列類,參考程式碼如下。 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; }