《数据结构》 2.3 循环链表

http://hncu.acmclub.com/index.php?app=problem_title&id=111&problem_id=1328

题目描述

双向链表是在结点中既保存了后一个结点指针又保存了前一个结点指针的链表。这种链表较单向链表而言能够快速查找某一结点的前后结点。下面给出双向链表的定义、插入以及删除算法描述。
图1:双向链表示例
(a)结点结构;(b)空的双向循环链表;(c)含有三个结点的双向循环链表
图2:双向链表的定义以及创建
双向链表在插入与删除时一定要注意其操作步骤的顺序。下面给出双向链表在插入与删除时的图示。
图3:双向链表插入与删除的图示
(a)双向链表的删除操作;(b)双向链表的插入操作
图4:双向链表的查找以及插入
图5:双向链表的删除操作

输入格式

输入数据只有一组,包含很多行。每行有1~3个整数。第一个整数如果是0,则表示输出双向链表中的所有元素;第一个整数如果是1,表示插入1个整数,其后跟2个整数i、e代表在第i个位置插入e;第一个整数如果是2,表示删除1个整数,其后跟1个整数i,表示删除的位置为i。
起始双向链表为空表。保证链表中每个元素不会重复,同时所有的操作都合法。

输出

当需要输出双向链表中的所有元素时输出,每次输出一行。整数间用一个空格隔开。

样例输入

1 1 2
0
1 2 7
0
2 1
0
1 2 4
1 3 5
1 2 6
0
2 3
0

样例输出

2
2 7
7
7 6 4 5
7 6 5

16号第3天改这道题 终于改对了 从这道题我发现自己之前写的都错了

#include<stdio.h>
#include<stdlib.h>#define ERROR 0
#define OK 1typedef int Status;
typedef int ElemType;//-----线性表的双向链表存储结构-------
typedef struct Dulnode{int data;struct Dulnode *prior;struct Dulnode *next;
}DuLNode,*DuLinkList;DuLinkList GetElemP_DuL(DuLinkList l,int i)
{//找到双向循环链表的第i个位置 DuLinkList s ;int j ;s = l->next ;for( j = 1; j < i&&s !=l; j++){s = s->next ;}return s;
}Status ListInsert_DuL(DuLinkList l,int i,ElemType e)
{//在带头结点的双链表L中的第i个位置之前插入元素e
//i的合法值为1<=i<= 表长+1; DuLinkList s ,p;if(!(p = GetElemP_DuL(l,i)))//在L中确定插入的位置指针p return ERROR;s= (DuLinkList)malloc(sizeof(DuLNode));s->data = e;p->prior->next = s;s->prior = p->prior ;s->next = p;p->prior = s;s  = l->next ;return OK;
}Status ListDelete_DuL(DuLinkList l,int i)
{
//删除带头结点的双链循环链表L中的第i个元素
//i的合法值1<= i<= 表长 DuLinkList p;if(!(p = GetElemP_DuL(l,i)))//在L中确定第i个元素的位置指针p return ERROR;p->prior->next = p->next ;p->next->prior = p->prior;free(p);
}void print(DuLinkList l)
{DuLinkList s = l->next ;int i = 0;while(s != l){if(i)printf(" ");printf("%d",s->data );s = s->next  ;i++;}printf("\n");return ;
}int main()
{int n,i,e;DuLinkList l,s;l =  (DuLinkList)malloc(sizeof(DuLNode));l->next = l ;l->prior = l ;while(scanf("%d",&n)!=EOF){switch(n){case 0:print(l);break;case 1:scanf("%d%d",&i,&e);ListInsert_DuL(l,i,e);break;case 2:scanf("%d",&i);ListDelete_DuL(l,i);break;}}return 0;} 

转载于:https://www.cnblogs.com/hellocheng/p/7350142.html

HNCU 1328: 算法2-18~2-19:双向循环链表相关推荐

  1. 从无到有算法养成篇-双向链表与双向循环链表

    一.双向链表 1.定义:从下图中的定义结点的代码我们能发现,双向与单向最明显的区别就是是否可以反向查找上一结点. 定义 2.创建:大致和单向的创建差不多,区别在于多了prior的处理 步骤: 1.*L ...

  2. 51nod 算法马拉松18 B 非010串 矩阵快速幂

    51nod 算法马拉松18 B 非010串 矩阵快速幂 非010串 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 如果一个01字符串满足不存在010这样的子串,那么称它为非010串 ...

  3. Interview:算法岗位面试—11.19早上上海某银行(总行,四大行之一)信息技术岗面试记录

    ML岗位面试:11.19早上上海某银行(总行,四大行之一)信息技术岗面试记录 Interview:算法岗位面试-11.19早上上海某银行(总行,四大行之一)信息技术岗面试记录 导读:该次面试是笔试通过 ...

  4. 使用WPA Supplicant在Ubuntu 18.04/19.04上从终端连接到Wi-Fi的方法

    使用WPA Supplicant在Ubuntu 18.04/19.04上从终端连接到Wi-Fi的方法_Linux教程_云网牛站 (ywnz.com) 本文介绍使用wpa_supplicant从Ubun ...

  5. ubuntu php7.4,在Ubuntu 18.04/19.04/16.04版本上安装PHP 7.4的简单方法

    以下介绍安装PHP 7.4的方法非常的简单,适用于Ubuntu 18.04/19.04/16.04版本上,所安装的版本是PHP 7.4.0 RC1,只需要添加PHP ppa存储库并运行相关命令即可完成 ...

  6. 试编写一个将双向循环链表逆置的算法_图解:链表的快慢指针,解决 80% 的链表面试题!...

    一.前言 链表是基本的数据结构之一,它与数组不同,数组在内存中存储,需要一块连续的内容空间来存储,对内存的要求比较高.例如我们需要 100MB 大小的数组,内存中就必须有一段连续的 100MB 的内存 ...

  7. Leetcode算法Java全解答--19. 删除链表的倒数第N个节点

    Leetcode算法Java全解答–19. 删除链表的倒数第N个节点 文章目录 Leetcode算法Java全解答--19. 删除链表的倒数第N个节点 题目 想法 结果 总结 代码 我的答案 大佬们的 ...

  8. 比特数据结构与算法(第二章收尾)带头双向循环链表的实现

    1.链表的分类 链表的分类 ① 单向或者双向 ② 带头或者不带头 ③ 循环或者非循环 常用的链表: 根据上面的分类我们可以细分出8种不同类型的链表,这么多链表我们一个个讲解这并没有意义.我们实际中最常 ...

  9. 【算法讲18:二次剩余】勒让德符号 | 欧拉判别法 | Cipolla 算法

    [算法讲18:二次剩余] Source\mathfrak{Source}Source ⌈\lceil⌈二次剩余⌋\rfloor⌋与⌈\lceil⌈二次非剩余⌋\rfloor⌋ ⌈\lceil⌈二次互反 ...

最新文章

  1. 微信小程序获取验证码倒计时
  2. python实现列表去重_python实现七种列表去重方法
  3. SourceInsight 4.0 之一 设置项目的相对路径(可任意移动位置)
  4. 将java项目做成app_将鸿蒙做成和EMUI一致,又兼容安卓APP,华为已立于不败之地...
  5. 想对你说的话,就在这里!
  6. LeetCode 350. Intersection of Two Arrays II
  7. H5支付完整demo及问题总结【已解决】
  8. document 对象 html文档内容
  9. 计算最小公倍数LCM
  10. MySQL 第六次练习(视图)
  11. 去掉表中字段空的空格或换行符
  12. java 事件处理机制
  13. Jxl实现Excel的导入与导出
  14. 1.使用WPE工具分析游戏网络封包
  15. 万能 解决ubuntu网易云音乐不能播放的各种问题
  16. 花了1晚上diy的matlab解数独算法,很好理解!
  17. [xdm+ip]ubuntu下载数据慢或者不通
  18. 年后跳槽全过程总结(上)——从面试准备到拿到offer
  19. 知之道,达有余而通不足;行之道,嬴有余以弥不足。知行合一,亦乎 如是。
  20. 超级壁纸android,超级壁纸大全app下载

热门文章

  1. 内存对齐指令详解(posix_memalign)
  2. ARM中Steppingstone启动
  3. CF-547E(Mike and Friends)后缀数组+线段树 AC自动机+DFS序+树状数组
  4. 2019牛客暑期多校训练营(第六场)H - Train Driver (最短路)
  5. IDEA查看Java源码
  6. 手把手教你安装VMtools
  7. 列表初始化和赋值初始化的使用注意事项
  8. Direct Byte Buffer的操作
  9. 初玩PLSQL连接 Oracle
  10. hihocoder #1465 : 后缀自动机五·重复旋律8