#include #includetypedefintElemType;

typedefstructDLNode{

ElemType data;struct DLNode *next;struct DLNode *prior;

}DLNode;

DLNode*InitList(DLNode *DL);//初始化

int ListEmpty(DLNode *DL);//判空

int ListLength(DLNode *DL);//返回链表长度

int ListInsert(DLNode *DL, int i, ElemType e);//插入元素

int ListDelete(DLNode *DL, int i);//删除第i个元素

void TraverseList(DLNode *DL);//遍历线性表//初始化

DLNode* InitList(DLNode *DL){intx;

DLNode*p =NULL;

DLNode*r =NULL;

DL= (DLNode *)malloc(sizeof(DLNode));

DL->next =DL;

DL->prior =DL;

r=DL;

printf("输入直到-1为止\n");while(1){

scanf("%d", &x);if(x == -1){

printf("初始化成功\n");break;

}

p= (DLNode *)malloc(sizeof(DLNode));if(p){

p->data =x;

p->prior =r;

p->next =DL;

r->next =p;

DL->prior =p;

r=p;

}else{

printf("空间不足初始化失败\n");returnNULL;

}

}returnDL;

}//判空

int ListEmpty(DLNode *DL){return (DL->next ==DL);

}//插入元素

int ListInsert(DLNode *DL, inti, ElemType e){if(i>ListLength(DL)+1 || i<=0){

printf("插入位置有误,插入失败\n");return 0;

}

DLNode*p =DL;int j = 0;while(j

p= p->next;

j++;

}

DLNode*nDLNode = (DLNode *)malloc(sizeof(DLNode));

nDLNode->data =e;

nDLNode->prior = p->prior;

p->prior->next =nDLNode;

p->prior =nDLNode;

nDLNode->next =p;

printf("插入成功\n");return 1;

}//删除第i个元素

int ListDelete(DLNode *DL, inti){if(i>ListLength(DL) || i<=0){

printf("删除位置有误,插入失败\n");return 0;

}

DLNode*p =DL;int j = 0;while(j

p= p->next;

j++;

}

p->prior->next = p->next;

p->next->prior = p->prior;free(p);

printf("删除成功\n");return 1;

}//返回链表长度

int ListLength(DLNode *DL){int len = 0;if(ListEmpty(DL)) return 0;

DLNode*p = DL->next;while(p->data!=DL->data){

len++;

p= p->next;

}returnlen;

}//遍历线性表

void TraverseList(DLNode *DL){if(ListEmpty(DL)){

printf("空链表");

}

DLNode*p = DL->next;//终止循环遍历

while(p->data != DL->data){

printf("%d", p->data);

p= p->next;

}

printf("\n");

}intmain(){

ElemType e=NULL;

DLNode*DL =NULL;//初始化测试

DL =InitList(DL);// //等价测试//DLNode *d = DL->next->next;//if(d->next->prior == d->prior->next){//printf("d->next->prior == d->prior->next\n");//}//if(d->next->prior == d){//printf("d->next->prior == d\n");//}//if(d == d->prior->next){//printf("d == d->prior->next\n");//}//遍历测试

TraverseList(DL);//

//printf("双向循环链表长度为%d\n",ListLength(DL));//插入元素测试

printf("第3个位置插入999\n");

ListInsert(DL,3, 999);

TraverseList(DL);//-----------------------------------------------------//非法操作?循环双向链表插入一个巨大的位置是否合法?//和老师讨论完,算不合法

printf("第567位置插入999\n");

ListInsert(DL,567, 999);

TraverseList(DL);//------------------------------------------------------//删除元素测试//printf("删除第1个位置\n");//ListDelete(DL, 1);//TraverseList(DL);//------------------------------------------------------//非法操作?同上//新问题,1,2,3,4,-1,删除第5个是头节点。//和老师讨论完,算不合法//printf("删除第55位置\n");//ListDelete(DL, 55);//TraverseList(DL);//------------------------------------------------------

}

c语言怎么创建循环链表,纯C语言实现循环双向链表创建,插入和删除相关推荐

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

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

  2. linux下c语言聊天室程序,纯C语言Socket实现聊天室

    最近在学习嵌入式开发,练习C语言小项目,基本是参考别人的代码,做了些修改实现了聊天室,纯C语言编写. 想直接看源码的跳到最后. 一.练习内容 socket通信流程 管道的使用 epoll的使用 首先要 ...

  3. c语言平曲线,算法——纯C语言最小二乘法曲线拟合

    算法--纯C语言最小二乘法曲线拟合 写完,还没来得及写注释,已通过Matlab的polyfit验证(阶数高或者数据量太大会有double数据溢出的危险,低阶的都吻合),时间有点紧,程序注释,数学推导等 ...

  4. C语言实现双向链表:插入和删除

    抽象数据类型 typedef sturct DuLnode {int data;struct DuLnode* next, *prior; }DuLnode, *DuLinklist; 带头结点的双向 ...

  5. c语言 系统跑分,纯C语言跑分(详细注释)(示例代码)

    #include #include//clock()所属头文件 const int N_qsort=10000;//快排的数据规模 const int M=20000,N=50000;//整点.浮点运 ...

  6. C语言数据结构 单链表的建立、遍历、查找、插入和删除操作

    参考文献 本博文为半摘记性质 -- 声明:全文主干部分摘自 [1] 杨智明. 数据结构(C语言版)[M]. 第一版. 北京:北京理工大学出版社, 2016. [2] 严蔚敏, 李冬梅, 吴伟民. 数据 ...

  7. 《C语言及程序设计》教学视频 18 链表中结点的插入和删除 示例代码

    2017-05-02 //插入新建节点 #include <stdio.h> #include <malloc.h>typedef struct Link{int data;s ...

  8. 单链表的创建(头插法尾插法),插入,删除

    <span style="font-size:18px;">#include <iostream> #include <cstdio> #inc ...

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

    http://blog.csdn.net/fisherwan/article/details/19801993 双向循环链表是基于双向链表的基础上实现的,和双向链表的操作差不多,唯一的区别就是它是个循 ...

最新文章

  1. 标称变量(Categorical Features)或者分类变量(Categorical Features​​​​​​​)编码为数值变量(Continuous Features​​​​​​​)
  2. H5与Native交互之JSBridge技术
  3. python视频处理为卡通风格_使用python代码将照片变成卡通图片
  4. 程序员修仙之路-数据结构之 CXO让我做一个计算器
  5. 如何创建一个简单 APT 仓库
  6. tomcat无法正常shutdown
  7. CCNA的计分方法(转)
  8. 质数的后代c语言,GRE机经:2014数学sub回忆题(造福后人)
  9. 极域电子教室64位破解版|极域电子教室软件64位破解版下载v6.0
  10. mysql数据库置疑_SQL数据库置疑 823 824 错误修复 无法附加处理
  11. 你熟悉的新华书店,已经变样了 | 数字化案例
  12. 网络协议和标准——IEEE802
  13. 在esp32开发板上实现的web_radio,基于wm8978 codec芯片
  14. 数据分析师面试题目_数据分析师面试的77个常见问题,你准备好了吗?
  15. “迅速、坚决、果断”
  16. Flash制作卷轴水墨画展开动画效果
  17. “大自然的印钞机”农夫山泉如何借数藏冲破自己的“天花板”?
  18. [网络安全自学篇] 七十一.深信服分享之外部威胁防护和勒索病毒对抗
  19. COSO企业风险管理综合框架主要关注8大层面的企业风险
  20. 二维码怎么知道自己被扫描 ()==> java 篇 带一点点(Android)

热门文章

  1. 图形化渗透测试工具 -- GUI_Tools
  2. ros操作系统打开rviz,没有显示joint state publisher插件的两种情况(古月)
  3. opencv 全景 android,基于OpenCV的Android手机全景图像拼接技术研究
  4. iText7使用IExternalSignatureContainer进行签名和验签
  5. imagemagick和gm报错{ Error: Command failed: ��Ч���� - -resize
  6. DW CS3 快捷键
  7. 2021公司年终总结及明年工作计划 用便签更科学
  8. 三大运营商物联网卡有哪些优势?物联卡为何如此受欢迎?
  9. 基于stm32单片机智能导盲拐杖源程序Proteus仿真设计
  10. Item 28: Understand reference collapsing.