单向链表_笔记
.h
//鏈表節點 typedef struct LINKNODE {void* data; //鏈表數據struct LINKNODE* next; //節點}LinkNode;//鏈表結構體 typedef struct LINKLIST {LinkNode *head; //頭節點int size; //共幾個節點}LinkList;//打印函數指針 typedef void(*PRINTLINKNODE)(void*);class List { public:List();~List();public://在指定位置插入數據void Insert_Link(LinkList *list,int pos,void* data);//刪除指定位置的值void RemoveByPos_List(LinkList *list, int pos);//查找int Find_List(LinkList *list,void* data);//獲得鏈表的長度int Length_List(LinkList *list);//打印鏈表節點void Print_List(LinkList *list, PRINTLINKNODE print);//獲取第一個節點位置void* GetFront_List(LinkList *list);public:LinkNode* linknode;LinkList* linklist; };.cpp
List::List() {linklist = new LinkList;linklist->size = 0;linklist->head = new LinkNode;linklist->head->next = 0;linklist->head->data = 0;} List::~List() {if (linklist == NULL){return;}//輔助指針變量LinkNode *pCurrent = linklist->head;while (pCurrent != NULL){//緩存下一個節點LinkNode *pNext = pCurrent->next;delete pCurrent;pCurrent = pNext;}//釋放鏈表內存linklist->size = 0;delete linklist; }//在指定位置插入數據 void List::Insert_Link(LinkList *list, int pos, void* data) {if (list == NULL || data == NULL)return;//pos越界if ( pos < 0 || pos > list->size )pos = list->size;//創建新的節點LinkNode *newnode = new LinkNode;newnode->data = data;newnode->next = NULL;//找節點LinkNode *pCurrent = list->head; //輔助指針for (size_t i = 0; i < pos; i++){pCurrent = pCurrent->next;}//新節點入鏈表newnode->next = pCurrent->next;pCurrent->next = newnode;list->size++;}//刪除指定位置的值 void List::RemoveByPos_List(LinkList *list, int pos) {if (list == NULL)return;if (pos < 0 || pos >= list->size)return;//查找要刪除節點的前一個節點LinkNode *pCurrent = list->head;for (size_t i = 0; i < pos; i++){pCurrent = pCurrent->next;}//保存刪除的節點LinkNode *pdel = pCurrent->next;pCurrent->next = pdel->next;//釋放刪除節點的內存delete pdel;list->size--;}//查找 int List::Find_List(LinkList *list, void* data) {if (list == NULL || data == NULL)return -1;//遍歷LinkNode* pCurren = list->head->next;int i = 0;while (pCurren != NULL){if (pCurren->data == data){break;}pCurren = pCurren->next;i++;}return i; }//獲得鏈表的長度 int List::Length_List(LinkList *list) {return list->size; }//打印鏈表節點 void List::Print_List(LinkList *list, PRINTLINKNODE print) {if (list == NULL)return;LinkNode* pCurren = list->head->next;while (pCurren != NULL){print(pCurren->data);pCurren = pCurren->next;}}//獲取第一個節點位置 void* List::GetFront_List(LinkList *list) {return list->head->next->data; }main.cpp
typedef struct PERSON {char Name[64];int age;int score; }Person;void printfp(void* data) {Person *p = (Person*)data;cout << "DataAddr:" << data << " ";cout << "Nane:" << p->Name << " ";cout << "Age:" << p->age << " ";cout << "Score:" << p->score << " ";cout << endl;}int main() {List* l = new List();//創建數據類型Person p1 = { "Name1",18,100};Person p2 = { "Name2",18,99 };Person p3 = { "Name3",18,98 };Person p4 = { "Name4",18,97 }; Person p5 = { "Name5",18,96 };//插入數據l->Insert_Link(l->linklist, 0, &p1);l->Insert_Link(l->linklist, 0, &p2);l->Insert_Link(l->linklist, 0, &p3);l->Insert_Link(l->linklist, 0, &p4);l->Insert_Link(l->linklist, 0, &p5);//打印l->Print_List(l->linklist, printfp);cout << "---------------------------------" << endl;//刪除l->RemoveByPos_List(l->linklist,3);l->Print_List(l->linklist, printfp);cout << "---------------------------------" << endl;//返回第一個節點Person* ret = (Person*) l->GetFront_List(l->linklist);cout << "Nane:" << ret->Name << " ";cout << "Age:" << ret->age << " ";cout << "Score:" << ret->score << " ";cout << endl;cout << "---------------------------------" << endl;//鏈表長度cout << l->Length_List(l->linklist)<<endl;cout << "---------------------------------" << endl;//查找cout << l->Find_List(l->linklist, l->linklist->head->next->data)<<endl;cout << "---------------------------------" << endl;delete l;return 0; }總結