双向循环链表(不依赖具体数据),借鉴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)-双向循环链表(不依赖具体数据)相关推荐

  1. 单链表、循环链表、双向循环链表总结

    链表介绍 结点的概念: 一个结点包含两个信息,一个是数据域和一个是指针域: 数据域存储该结点的数据信息 指针域存储其直接后继的位置,其示意图如下: 链表的概念: 每个结点的存储单元是独立的,若干个结点 ...

  2. 【链表】双向循环链表的实现

    前言 链表是一种物理存储结构上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的链表的结构总共有8种,我们这里来进行带头双向循环链表的增删查改实现 双向循环链表的优势是什么? ...

  3. java与数据结构(4)---java实现双向循环链表

    线性表之链式存储结构双向循环链表 双向循环链表:每个结点包含了数据.直接前驱地址指针和直接后驱地址指针,头结点的直接前驱指向尾结点,尾结点的直接后驱指向头结点,头尾相连构成一个可正可反的圆环.可以形象 ...

  4. 双向循环链表涉及双向指针的基本操作(C语言)

    链表大概分为有无头指针,有无尾指针,是否循环,单向还是双向, 这些都很简单,前提是你要把指针和单链表理解透彻.这些都是基于单链表 的变形,要根据实际问题,选择链表的类型. 头指针的指针域储存着储存头节 ...

  5. java 双向链表循环_双向循环链表的Java版本实现

    1.单项循环列表 单向循环链表是单链表的另一种形式,其结构特点是链表中最后一个结点的指针不再是结束标记,而是指向整个链表的第一个结点,从而使单链表形成一个环.和单链表相比,循环单链表的长处是从链尾到链 ...

  6. 双向循环链表、dancing links

    目录 双向循环链表 力扣 426. 将二叉搜索树转化为排序的双向链表 十字交叉双向循环链表(dancing links) 精确覆盖问题 dancing links X算法(V1递归版) POJ 374 ...

  7. 数据结构与算法(2-2)线性表之链式存储(单链表、静态链表、循环链表、双向循环链表)

    目录 一.单链表 1.存储方式 2.插入 3.删除 总代码: 二.静态链表 1.存储方式 2.插入 3.删除 4.遍历 总代码: 三.循环链表 总代码: 四.双向循环链表 1.存储方式: 2.插入和删 ...

  8. 双向循环链表:维吉尼亚密码

    维吉尼亚密码简介 维吉尼亚密码引入了"密钥"的概念,即根据密钥来决定用哪一行的密表来进行替换,以此来对抗字频统计.假如下面图第一行代表明文字母,左面第一列代表密钥字母,对如下明文加 ...

  9. C语言之链表探究之单向链表(List)、附双向循环链表参考博文地址

    参考博文:C语言数据结构-创建链表的四种方法 链表结构图一 链表结构图二 链表结构图三 链表结构图四 一.静态链表 例1: 附例1代码: #include <stdio.h>typedef ...

最新文章

  1. JavaScript初学者编程题(6)
  2. 吴恩达deeplearning.ai发布NLP课程!
  3. Android项目:proguard混淆之常见开源项目混淆配置
  4. 多组测试数据(求和)IV
  5. mysql函数截断_Mysql截断GROUP_CONCAT函数的并置结果
  6. java spring启动和终止_springBoot jar启动以停止脚本参数详解
  7. JMetro版本11.5.11和8.5.11发布
  8. sql求平均日活_日活、周活(周重活)、月活 统计
  9. 【报告分享】元宇宙发展研究报告2.0-清华大学.pdf(附下载链接)
  10. python计算器gui设计_python 实现简单的计算器(gui界面)
  11. python里countsget_Python Pandas Series.get_dtype_counts()用法及代码示例
  12. 国内有哪些顶级技术团队的博客值得推荐?
  13. FastAdmin 目录权限设置
  14. python floor是什么意思_python里floor怎么用
  15. Go语言基础之网络编程
  16. 规则引擎——IBM ODM(ILog)——基本使用步骤
  17. 企业怎样顺利实施ERP管理系统?
  18. Dcloud课程2 什么是Dcloud
  19. 国内国际期货,外汇,现货跟单、量化交易系统
  20. k8s平台微服务部署

热门文章

  1. 【十九】require和include的区别
  2. 《OKR源于英特尔和谷歌的目标管理利器》读书笔记
  3. Scala sbt 添加国内镜像
  4. 【模板小程序】求M~N范围内的质数个数
  5. javascript数组的操作
  6. Sublime3 快捷键
  7. C# 利用反射动态调用类成员
  8. Reinforcement Learning
  9. poj3666 Making the Grade
  10. 怎么在VS监视DataSet类型的数据