#include<stdio.h>
#include<stdlib.h>
#include<string.h>#define OVERFLOW -2
#define FALSE 0
#define TRUE 1
#define OK 1
#define ERROR 0typedef int Status;
//链表元素的数据类型
typedef struct
{char name[20];float score;
}ElemType;
//线性链表的双向链表存储结构
typedef struct
{ElemType data;struct Dnode *next;   //存放后继结点地址struct Dnode *pre;    //存放前驱结点地址
}Dnode,*DLinkList;
int main()
{DLinkList L,p,q,s;ElemType e1,e2,e3,e4;L=(DLinkList)malloc(sizeof(Dnode));L->next=L->pre=L;strcpy(e1.name,"宇文");strcpy(e2.name,"化及");strcpy(e3.name,"长孙");strcpy(e4.name,"无忌");e1.score=87.44;e2.score=69.22;e3.score=56.33;e4.score=89.22;p=L;s=(DLinkList)malloc(sizeof(Dnode));s->data=e1;s->next=p->next; s->pre=p;    //生成的节点右边连线,左边连线
//  p->next->pre=s; //这一步就不需要了,因为pre还不存在,表中只有一个头结点
// 经过发现不是不需要,编译器报错的原因是,识别不了你是什么意思,可以分两步来写q=p->next; q->pre=s;         //生成节点的后继节点左边连线p->next=s;                   //生成节点的前驱节点右边连线p=L;         //头插s=(DLinkList)malloc(sizeof(Dnode));s->data=e2;s->next=p->next; s->pre=p;    q->pre=s;q=p->next;p->next=s;q=L->next;   //尾插p=q->next;s=(DLinkList)malloc(sizeof(Dnode));s->data=e3;s->next=p->next; s->pre=p;    q->pre=s;q=p->next;p->next=s;p=L->next;    //插入到第一个节点和第二个节点之间s=(DLinkList)malloc(sizeof(Dnode));s->data=e4;s->next=p->next; s->pre=p;   q->pre=s;q=p->next;p->next=s;p=L->next;while(p!=L){printf("姓名:%s 分数:%4.2f 地址:%x,房间大小:%d,pre %x next %x \n",p->data.name,p->data.score,p,sizeof(Dnode),p->pre,p->next);p=p->next;}
}

运行结果

//删除第i个结点
Status deleteDLinkList(DLinkList L,int i,ElemType *e)
{DLinkList p,q;int j;p=L;j=0;//p指向第i-1个结点,又要确保不是空表if(p->next==L||j>i-1){printf("删除位置不合理或链表为空!\n");return ERROR;}while(p->next!=L && j<i-1) //p为空表或者到达i-1这个位置,就停止了{p=p->next;j++;}q=p->next;   //q为要删除的节点*x=q->data;p->next=q->next; //q的前驱节点越过q连接q的下一个节点q->next->pre=p;  //q的后记节点越过q连接q的前驱节点free(q);return OK;
}
//指定遍历方向,遍历所有数据
void dispDLinkList(DLinkList L,int n)
{DLinkList p;if(n==1){p=L->next;while(p!=L){printf(p->data);p=p->next;}printf("\n");}if(n==2){p=L->pre;while(p!=L){printf(p->data);p=p->pre;}printf("\n");}
}

双向链表的插入删除和遍历相关推荐

  1. 顺序表的插入删除查找遍历

    顺序表的插入删除查找遍历 文章目录 顺序表的插入删除查找遍历 代码 运行结果截图 代码 #define Maxsize 100typedef int ElemType; typedef struct{ ...

  2. C语言 红黑树插入/删除/查找/遍历

    1 红黑树介绍 红黑树(Red-Black Tree,简称R-B Tree),它一种特殊的二叉查找树. 红黑树是特殊的二叉查找树,意味着它满足二叉查找树的特征:任意一个节点所包含的键值,大于等于左孩子 ...

  3. (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作

    http://blog.csdn.net/fisherwan/article/details/19760681 上午写了下单向循环链表的程序,今天下午我把双向链表的程序写完了.其实双向链表和单向链表也 ...

  4. 双向链表的插入与删除(c++实现)

    目录 前言 双向链表插入节点 实现代码 双向链表删除节点 实现代码 整个项目的完整代码 运行截图 总结 前言 本篇文章主要接着上文的双向链表的创建与遍历(c++实现) 双向链表插入节点 在双向链表中插 ...

  5. C语言双向链表的插入与删除

    数据结构复习1.2--双向链表的插入与删除 插入元素 删除元素 代码:和单链表差不多,不会就画一画,就写出来了 //双向链表的插入与删除 #include<stdio.h> #includ ...

  6. C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(Windows VirtualStudio)——遍历和删除

    相关环境和说明在<C++拾趣--STL容器的插入.删除.遍历和查找操作性能对比(Windows VirtualStudio)--插入>已给出.本文将分析各个容器中遍历和查找的性能.(转载请 ...

  7. C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(Windows VirtualStudio)——删除

    相关环境和说明在<C++拾趣--STL容器的插入.删除.遍历和查找操作性能对比(Windows VirtualStudio)--插入>已给出.本文将分析从头部.中间和尾部对各个容器进行删除 ...

  8. C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(ubuntu g++)——遍历和查找

    相关环境和说明在<C++拾趣--STL容器的插入.删除.遍历和查找操作性能对比(ubuntu g++)--插入>已给出.本文将分析各个容器中遍历和查找的性能.(转载请指明出于breakso ...

  9. C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(ubuntu g++)——删除

    相关环境和说明在<C++拾趣--STL容器的插入.删除.遍历和查找操作性能对比(ubuntu g++)--插入>已给出.本文将分析从头部.中间和尾部对各个容器进行删除的性能.(转载请指明出 ...

  10. 学生信息链表,建立,插入,删除,遍历,查找,修改,最大(小)值,平均...

    /[例11-10]建立一个学生成绩信息(包括学号.姓名.成绩)的单向链表,学生数据按学号由小到大顺序排列,要求实现对成绩信息的插入.修改.删除和遍历操作./ /* 用链表实现学生成绩信息的管理 */ ...

最新文章

  1. H - Parity game-poj1733(需要离散化)
  2. 招聘 | 香侬在召唤:算法工程师,让金融把你的代码变现
  3. 从 github 执行 git clone 一个大的项目时提示 error: RPC failed
  4. python编程基础_月隐学python第一课
  5. 我用 MySQL 干掉了一摞简历
  6. Sentinel(十六)之AHAS Sentinel 控制台
  7. 前端学习(526):等分布局
  8. C++中的各种可调用对象
  9. 一张图轻松搞懂javascript event对象的clientX,offsetX,screenX,pageX区别
  10. 三体与计算机科学与技术,《三体》作者刘慈欣:AlphaGo赢了,但人工智能不可能强大到没有弱点...
  11. 花书+吴恩达深度学习(十九)构建模型策略(训练模型顺序、偏差方差、数据集划分、数据不匹配)
  12. MVC路由 路由的三种扩展 替换MVC内置的Handler
  13. latex中png、pdf和eps格式的图片文件转换
  14. 老男孩Python高级全栈开发工程师【高清全套完整】
  15. 初中数学老师计算机培训反思,初中数学特级教师培训会学习心得体会
  16. 淘宝开放平台回顾与前景展望
  17. collection中cell选中状态下分享图片的快照snapshot
  18. csdn各种积分规则
  19. 进程互斥以及进程互斥实现方法(包含代码)
  20. GBase 8a并发支持性能

热门文章

  1. FLASH缓动导航制作方法.
  2. 精简指令集(MIPS为例)常用指令特点及其格式
  3. 超定方程组的经典Gram-Schmidt正交化解法
  4. [高数][高昆轮][高等数学上][第二章-导数与微分]05.函数的微分
  5. iOS开发UI篇—程序启动原理和UIApplication
  6. 纯CSS3浮雕质感的立体文字旋转动画
  7. css3 flex流动自适应响应式布局样式类
  8. DPM2012学习(二),添加本地磁盘
  9. 【超详细转】VMware 9 安装 Mac OS X 10.8 Mountain Lion 图文全程
  10. iOS 使用脚本自动化复制target