c语言怎么创建循环链表,纯C语言实现循环双向链表创建,插入和删除
#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语言实现循环双向链表创建,插入和删除相关推荐
- C语言双向链表的插入与删除
数据结构复习1.2--双向链表的插入与删除 插入元素 删除元素 代码:和单链表差不多,不会就画一画,就写出来了 //双向链表的插入与删除 #include<stdio.h> #includ ...
- linux下c语言聊天室程序,纯C语言Socket实现聊天室
最近在学习嵌入式开发,练习C语言小项目,基本是参考别人的代码,做了些修改实现了聊天室,纯C语言编写. 想直接看源码的跳到最后. 一.练习内容 socket通信流程 管道的使用 epoll的使用 首先要 ...
- c语言平曲线,算法——纯C语言最小二乘法曲线拟合
算法--纯C语言最小二乘法曲线拟合 写完,还没来得及写注释,已通过Matlab的polyfit验证(阶数高或者数据量太大会有double数据溢出的危险,低阶的都吻合),时间有点紧,程序注释,数学推导等 ...
- C语言实现双向链表:插入和删除
抽象数据类型 typedef sturct DuLnode {int data;struct DuLnode* next, *prior; }DuLnode, *DuLinklist; 带头结点的双向 ...
- c语言 系统跑分,纯C语言跑分(详细注释)(示例代码)
#include #include//clock()所属头文件 const int N_qsort=10000;//快排的数据规模 const int M=20000,N=50000;//整点.浮点运 ...
- C语言数据结构 单链表的建立、遍历、查找、插入和删除操作
参考文献 本博文为半摘记性质 -- 声明:全文主干部分摘自 [1] 杨智明. 数据结构(C语言版)[M]. 第一版. 北京:北京理工大学出版社, 2016. [2] 严蔚敏, 李冬梅, 吴伟民. 数据 ...
- 《C语言及程序设计》教学视频 18 链表中结点的插入和删除 示例代码
2017-05-02 //插入新建节点 #include <stdio.h> #include <malloc.h>typedef struct Link{int data;s ...
- 单链表的创建(头插法尾插法),插入,删除
<span style="font-size:18px;">#include <iostream> #include <cstdio> #inc ...
- (C语言版)链表(四)——实现双向循环链表创建、插入、删除、释放内存等简单操作
http://blog.csdn.net/fisherwan/article/details/19801993 双向循环链表是基于双向链表的基础上实现的,和双向链表的操作差不多,唯一的区别就是它是个循 ...
最新文章
- 标称变量(Categorical Features)或者分类变量(Categorical Features​​​​​​​)编码为数值变量(Continuous Features​​​​​​​)
- H5与Native交互之JSBridge技术
- python视频处理为卡通风格_使用python代码将照片变成卡通图片
- 程序员修仙之路-数据结构之 CXO让我做一个计算器
- 如何创建一个简单 APT 仓库
- tomcat无法正常shutdown
- CCNA的计分方法(转)
- 质数的后代c语言,GRE机经:2014数学sub回忆题(造福后人)
- 极域电子教室64位破解版|极域电子教室软件64位破解版下载v6.0
- mysql数据库置疑_SQL数据库置疑 823 824 错误修复 无法附加处理
- 你熟悉的新华书店,已经变样了 | 数字化案例
- 网络协议和标准——IEEE802
- 在esp32开发板上实现的web_radio,基于wm8978 codec芯片
- 数据分析师面试题目_数据分析师面试的77个常见问题,你准备好了吗?
- “迅速、坚决、果断”
- Flash制作卷轴水墨画展开动画效果
- “大自然的印钞机”农夫山泉如何借数藏冲破自己的“天花板”?
- [网络安全自学篇] 七十一.深信服分享之外部威胁防护和勒索病毒对抗
- COSO企业风险管理综合框架主要关注8大层面的企业风险
- 二维码怎么知道自己被扫描 ()==> java 篇 带一点点(Android)
热门文章
- 图形化渗透测试工具 -- GUI_Tools
- ros操作系统打开rviz,没有显示joint state publisher插件的两种情况(古月)
- opencv 全景 android,基于OpenCV的Android手机全景图像拼接技术研究
- iText7使用IExternalSignatureContainer进行签名和验签
- imagemagick和gm报错{ Error: Command failed: ��Ч���� - -resize
- DW CS3 快捷键
- 2021公司年终总结及明年工作计划 用便签更科学
- 三大运营商物联网卡有哪些优势?物联卡为何如此受欢迎?
- 基于stm32单片机智能导盲拐杖源程序Proteus仿真设计
- Item 28: Understand reference collapsing.