日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

【C++】【三】单向链表

發(fā)布時(shí)間:2023/11/27 生活经验 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C++】【三】单向链表 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
// 單向鏈表.cpp : 此文件包含 "main" 函數(shù)。程序執(zhí)行將在此處開(kāi)始并結(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)用戶(hù)傳進(jìn)來(lái)的函數(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");//銷(xiāo)毀Free_linklist(list);system("pause");return 0;
}

?

總結(jié)

以上是生活随笔為你收集整理的【C++】【三】单向链表的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。