資料結構(連結串列的實現)
阿新 • • 發佈:2019-01-26
1.連結串列的實現:插入結點,想要動態分配記憶體,如果分配的記憶體為空,則記憶體分配失敗。
2.序號查詢:for迴圈查詢,關鍵字查詢:while迴圈
3.連結串列的缺點就是不管查詢,刪除都是的從頭結點開始遍歷。
4.如果資料項只有一個,則只用一個結構體,如果資料項有多個,則要定義兩個結構體。
#include<iostream> #include<string> 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 <<"\t"<< test->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; }