【C++】【三】单向链表
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                【C++】【三】单向链表
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.                        
                                // 單向鏈表.cpp : 此文件包含 "main" 函數(shù)。程序執(zhí)行將在此處開始并結(jié)束。
//#include <iostream>
#include<stdlib.h>typedef struct LINKNODE {void* data;struct LINKNODE* next;
}linknode;typedef struct LINKLIST {LINKNODE* head;int size;
}linklist;
//print function ptr
typedef void(*PRINTLINKNODE)(void*);//init
linklist* Init_linklist() {linklist* list = (linklist*)malloc(sizeof(linklist));list->size=0;//頭節(jié)點(diǎn),方便判斷位置list->head = (linknode*)malloc(sizeof(linknode));list->head->data = NULL;list->head->next = NULL;return list;
}void Insert_linklist(linklist* list, int pos, void* data) {if (list == NULL) {return;}if (data == NULL) {return;}if (pos < 0 || pos > list->size) {pos = list->size;}//創(chuàng)建新節(jié)點(diǎn)linknode* newnode = (linknode*)malloc(sizeof(linknode));newnode->data = data;newnode->next = NULL;//查找待插入位置 ? ?//遍歷位置 ? ?//輔助指針變量linknode* pcur = list->head;for (int i = 0; i < pos; ++i) {pcur = pcur->next;}//插入 ?newnode->next = pcur->next;pcur->next = newnode;list->size++;
}void RemoveByPos_linklist(linklist* list, int pos) {if (list == NULL) {return;}if (pos < 0 || pos >= list->size) {return;}//查找刪除節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn)linknode* pcur = list->head;for (int i = 0; i < pos; ++i) {pcur = pcur->next;}linknode* pdel = pcur->next;pcur->next = pdel->next;free(pdel);list->size--;
}void RemoveByValue_linklist(linklist* list, void* data) {}int Size_linklist(linklist* list) {return list->size;
}int Find_list(linklist* list, void* data) {if (list == NULL) {return -1;}if (data == NULL) {return-1;}//遍歷查找linknode* pcur = list->head->next;int i = 0;while (pcur != NULL) {if (pcur->data == data) {break;}i++;pcur = pcur->next;}return i;
}
//返回第一個(gè)節(jié)點(diǎn)
void* Front_linklist(linklist* list) {return list->head->next->data;
}void Free_linklist(linklist* list) {if (list == NULL) {return;}linknode* pcur = list->head;while (pcur != NULL) {linknode* pnext = pcur->next;free(pcur);pcur = pnext;//move node/ptr}list->size = 0;free(list);
}void Print_linklist(linklist* list,PRINTLINKNODE print) {if (list == NULL) {return;}//節(jié)點(diǎn)遍歷linknode* pcur = list->head->next;while (pcur != NULL) {//調(diào)用戶傳進(jìn)來的函數(shù)print(pcur->data);pcur = pcur->next;}
}typedef struct PERSON {char name[64];int age;int score;
}person;void myprint(void* data) {person* p = (person*)data;printf("name:=%s,age=%d,score=%d\n", p->name, p->age, p->score);
}int main()
{linklist* list = Init_linklist();person p1 = { "aaa",18,100 };person p2 = { "bbb",19,99 };person p3 = { "ccc",20,101 };person p4 = { "ddd",17,97 };person p5 = { "eee",16,59 };Insert_linklist(list, 0, &p1);Insert_linklist(list, 0, &p2);Insert_linklist(list, 0, &p3);Insert_linklist(list, 0, &p4);Insert_linklist(list, 0, &p5);//打印Print_linklist(list, myprint);printf("-------------------------------\n");//刪除RemoveByPos_linklist(list, 3);Print_linklist(list, myprint);printf("-------------------------------\n");//返回第一個(gè)節(jié)點(diǎn)person* ret =(person*)Front_linklist(list);printf("name=%s,age=%d,score=%d\n", ret->name, ret->age, ret->score);printf("-------------------------------\n");//銷毀Free_linklist(list);system("pause");return 0;
}
?
總結(jié)
以上是生活随笔為你收集整理的【C++】【三】单向链表的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 求偏偏喜欢你歌词。
- 下一篇: 【C++】【二】动态数组-Dynamic
