c++17(20)-双向循环链表(不依赖具体数据)
生活随笔
收集整理的這篇文章主要介紹了
c++17(20)-双向循环链表(不依赖具体数据)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
雙向循環鏈表(不依賴具體數據),借鑒LINUX內核的鏈表結構
#include <iostream> using namespace std; struct stdlist{stdlist *prev;stdlist *next; } ; struct student{int id;string *name;stdlist list; } ;int main(int argc, char **argv) { stdlist *listHead; student *st1=new student;st1->id=1;st1->name=new string("張三");st1->list.next=&st1->list;st1->list.prev=&st1->list;listHead=&st1->list;student *st2=new student;st2->id=2;st2->name=new string("張五");st2->list.next=listHead;st2->list.prev=listHead->prev;listHead->prev=&st2->list;listHead=&st2->list;void* stclsv=static_cast<void *>(listHead);student *stv=static_cast<student*>(stclsv-(sizeof(student)-sizeof(stdlist)));cout<<stv->id<<" "<<*stv->name<<endl;return 0; } 2 張五Hit any key to continue... ```cpp #include <iostream> using namespace std; struct stdlist{stdlist *prev;stdlist *next; } ; struct student{int id;string *name;stdlist list; } ;void initList(stdlist *list,stdlist **listHead){list->next=list;list->prev=list;*listHead=list; }void addList(stdlist *list,stdlist **listHead){list->next=*listHead;list->prev=(*listHead)->prev;(*listHead)->prev=list;*listHead=list; }stdlist* nextlist(stdlist **listHead){return (*listHead)->next; }int main(int argc, char **argv) { stdlist *listHead; student *st1=new student;st1->id=1;st1->name=new string("張三");initList(&st1->list,&listHead);student *st2=new student;st2->id=2;st2->name=new string("張五");addList(&st2->list,&listHead); void* stclsv=static_cast<void *>(listHead);student *stv=static_cast<student*>(stclsv-(sizeof(student)-sizeof(stdlist)));cout<<stv->id<<" "<<*stv->name<<endl;stclsv=static_cast<void *>(nextlist(&listHead));stv=static_cast<student*>(stclsv-(sizeof(student)-sizeof(stdlist)));cout<<stv->id<<" "<<*stv->name<<endl; return 0; } 2 張五 1 張三Hit any key to continue...總結
以上是生活随笔為你收集整理的c++17(20)-双向循环链表(不依赖具体数据)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java Stream Collecto
- 下一篇: opencv精要(4)-fedora下的