企业链表_笔记
.h
typedef struct LINKNODE {struct LINKNODE* next;//下一個節點 }LinkNode;typedef struct LINKLIST {LinkNode head;int size;}LinkList;//打印函數指針 typedef void(*PRINTNODE)(LinkNode* Address); //比較函數指針 typedef int(*COMPARENODE)(LinkNode*, LinkNode*);class List { public:List();~List();public:LinkNode* linknode;LinkList* linklist;public://插入void Insert_LinkList(LinkList* list,int pos, LinkNode* data);//刪除void Remove_LinkList(LinkList* list, int pos);//查找int Find_LinkList(LinkList* list, LinkNode* data, COMPARENODE cmp);//返回鏈表大小int Size_LinkList(LinkList* list);//打印void Print_LinkList(LinkList* list, PRINTNODE print);};.cpp
List::List() {linklist = new LinkList;linklist->head.next = NULL;linklist->size = 0;}List::~List() {if (linklist == NULL)return;delete linklist; }//插入 void List::Insert_LinkList(LinkList* list, int pos, LinkNode* data) {if (list == NULL || data == NULL)return;if (pos < 0 || pos > list->size)pos = list->size;//查找插入位置LinkNode* pCurrent = &(list->head);for (int i = 0; i < pos; i++){pCurrent = pCurrent->next;}//插入新節點data->next = pCurrent->next;pCurrent->next = data;list->size++;}//刪除 void List::Remove_LinkList(LinkList* list, int pos) {if (list == NULL)return ;if (pos < 0 || pos>= list->size)return;//輔助指針LinkNode* pCurrent = &list->head;for (int i = 0; i < pos; i++){pCurrent = pCurrent->next;}//刪除節點pCurrent->next = pCurrent->next->next;list->size--; }//查找 int List::Find_LinkList(LinkList* list, LinkNode* data, COMPARENODE cmp) {if (list == NULL || list == NULL)return -1;//輔助指針LinkNode* pCurrent = list->head.next;int index = 0;int flag = -1;while (pCurrent != NULL){if (cmp(pCurrent, data) == 0){flag = index;break;}pCurrent = pCurrent->next;index++;}return flag; }//返回鏈表大小 int List::Size_LinkList(LinkList* list) {return list->size; }//打印 void List::Print_LinkList(LinkList* list, PRINTNODE print) {if (list == NULL){return;}//輔助指針LinkNode* pCurrent = list->head.next;while (pCurrent != NULL){print(pCurrent);pCurrent = pCurrent->next;}}main.cpp
typedef struct PERSON {LinkNode Node;char Name[64];int age;}Person;void MyPrint(LinkNode* data) {Person* p = (Person*)data;cout << "addr:" << data << " ";cout << "Name:" << p->Name << " ";cout << "Age:" << p->age << " ";cout << endl;}int MyCompare(LinkNode* node1,LinkNode* node2) {Person* p1 = (Person*)node1;Person* p2 = (Person*)node2;if (strcmp(p1->Name,p2->Name)==0 && p1->age == p2->age){return 0;}return -1; }int main() {List* l = new List();//創建數據Person p1, p2, p3, p4, p5;strcpy(p1.Name, "p1");strcpy(p2.Name, "p2");strcpy(p3.Name, "p3");strcpy(p4.Name, "p4");strcpy(p5.Name, "p5");p1.age = 10;p2.age = 20;p3.age = 30;p4.age = 40;p5.age = 50;//將節點插入鏈表l->Insert_LinkList(l->linklist, 0, (LinkNode*)&p1);l->Insert_LinkList(l->linklist, 0, (LinkNode*)&p2);l->Insert_LinkList(l->linklist, 0, (LinkNode*)&p3);l->Insert_LinkList(l->linklist, 0, (LinkNode*)&p4);l->Insert_LinkList(l->linklist, 0, (LinkNode*)&p5);//打印l->Print_LinkList(l->linklist, MyPrint);cout << "--------------------------------------" << endl;//刪除節點l->Remove_LinkList(l->linklist,4);l->Print_LinkList(l->linklist, MyPrint);//查找Person Find;strcpy(Find.Name,"p2");Find.age = 20;int pos = l->Find_LinkList(l->linklist,(LinkNode*)&Find, MyCompare);cout << "位置:"<<pos << endl;cout << "--------------------------------------" << endl;//釋放delete l;return 0; }準備存放的數據
存放完成
總結