双链表的建立查找插入删除算法的实现课程设计
链表c语言课程设计

链表c语言课程设计一、教学目标本章节的教学目标是使学生掌握链表的基本概念、原理和操作方法,能够运用链表解决实际问题。
具体目标如下:1.知识目标:•了解链表的定义、特点和基本操作;•掌握单链表、双向链表和循环链表的概念及其应用;•理解链表的优缺点和适用场景。
2.技能目标:•能够使用C语言实现链表的基本操作,如创建、插入、删除和遍历;•能够根据实际需求设计和实现链表的扩展功能,如排序、查找等;•能够运用链表解决实际问题,如数据存储和传输等。
3.情感态度价值观目标:•培养学生对计算机科学的兴趣和热情,提高他们对编程和数据结构的学习积极性;•培养学生团队合作意识和沟通能力,鼓励他们积极参与讨论和合作解决问题;•培养学生勇于尝试和探索的精神,鼓励他们在遇到困难和挫折时坚持不懈。
二、教学内容本章节的教学内容主要包括链表的基本概念、原理和操作方法。
具体内容包括以下几个方面:1.链表的定义和特点:介绍链表的定义、特点和基本术语,如节点、链表、单链表、双向链表等。
2.链表的基本操作:讲解链表的基本操作,如创建、插入、删除和遍历,并给出相应的C语言实现代码示例。
3.单链表的应用:介绍单链表在实际问题中的应用,如链表排序、链表查找等,并给出相应的代码示例。
4.双向链表和循环链表:讲解双向链表和循环链表的概念及其应用,并给出相应的代码示例。
5.链表的优缺点和适用场景:分析链表的优缺点和适用场景,让学生了解链表在实际编程中的应用和限制。
三、教学方法为了激发学生的学习兴趣和主动性,本章节将采用多种教学方法相结合的方式进行教学。
具体方法如下:1.讲授法:通过讲解和演示链表的基本概念、原理和操作方法,使学生掌握链表的基础知识。
2.案例分析法:通过分析实际问题中的应用案例,使学生了解链表在实际编程中的作用和应用。
3.实验法:让学生通过动手实践,自己编写代码实现链表的基本操作,提高他们的编程能力和实际问题解决能力。
4.讨论法:学生进行小组讨论,鼓励他们积极参与交流和合作解决问题,培养他们的团队合作意识和沟通能力。
课程设计--链表存储方式下的数据的插入,删除和搜索

数据结构课程设计报告一·课程设计题目:链表存储方式下的数据的插入,删除和搜索。
二·课程设计内容描述:需求以动态演示的形式向用户展示在链表存储方式下的数据记性插入,删除和搜索的实现方法和内部过程。
输入以系统自动生成的方式新建链表,可以选择有序或无序生成,在面板显示出链表,链结点以箭头连接,以带色的方框内的数字为数据,需要生成特定链表可选择数据插入在链表首。
输出在面板显示及显示三种操作(插入,查找和删除)的具体方法和流程,显示方式以指示箭头来表示对链表内容或位置的查询。
插入或删除操作则在图中画出节点增加或者减少的过程。
功能该程序可实现单向链表的插入删除和查找过程的演示,以动态的显示展示其操作过程。
测试通过输入框中用户输入的数据和七个按钮的操作选择相应的功能,可实现动态演示。
三·思想和算法:对于演示可分为用户界面和动画演示两个部分在用户界面添加按钮,输入框,单项选择和演示区域,演示区域将使用动画演示进行展示。
在用户界面分别给按钮及输入框等添加监听器,通过调用动画演示方法以实现按钮功能。
动画演示通过创建show类实现链结点和创建showgroup类实现链结点的的动态显示。
其内部引用awt.Graphics类实现画线等功能。
对于三种操作来说,插入和删除的实现都必须依靠查找的功能,因此,在代码中有很大一部分是可以通用的,实现查找功能可分为两种:按用户输入的数据查找和按用户输入的位置查找,判定条件分别是show类中的值和showgroup中的curIn值。
插入操作需要在已建好的链表中增加一个节点,这就需要插入点以后的节点向后移动一个位置,将插入的节点放在该位置上,而删除是将插入点以后的节点向前移动一个位置。
在showgroup类中,定义链表数据的数组以存储数据,将数组内的数据分别赋给各个节点,通过创建链表的方法创建链表。
四·使用说明1·运行打开eclipse,导入工程,运行后,将显示如下界面界面中有七个按钮,一个单选项和两个输入框连续单击“新建”,按提示操作选择无序,出现以下界面或者选择有序则出现以下界面当输入有误时,则会有提示新建功能完成位置查找功能连续单击“数据查找”,按提示操作数据查找功能输入位置或数据不存在时删除操作按位置删除其他操作不再赘述。
教学设计双向链表

教学设计双向链表
本教学设计主要介绍双向链表的概念、结构、操作及其相关应用。
通过教学,学生将能够掌握如下知识点:
1. 双向链表的定义及其优缺点;
2. 双向链表的结构表示及操作方法;
3. 双向链表的插入、删除、查找、排序等操作;
4. 双向链表在实际应用中的应用,如LRU缓存算法等。
教学过程中,将采用理论课和实验课相结合的方式,通过概念讲解、示例演示、实验操作等环节,使学生深入了解双向链表的相关知识点,并能够运用所学知识解决实际问题。
注:本教学设计适用于计算机科学相关专业的本科生。
- 1 -。
双链表的建立查找插入删除算法的实现课程设计

数据结构课程设计设计说明书双链表的建立查找插入删除算法的实现学生姓名田园学号1221024050班级信管1202成绩指导教师申静数学与计算机科学学院2014年3月7日课程设计任务书2013—2014学年第二学期课程设计名称:数据结构课程设计课程设计题目:双链表的建立查找插入删除算法的实现完成期限:自2014年2月24日至2014年3月7 日共2 周设计内容:1.任务说明(1)任意输入一组数据,能得到一个带头结点的双向链表;(2)查找数据域为一特定值的某个结点时,从表头结点往后依次比较各结点数据域的值,若正是该特定值,则返回指向结点的指针,否则继续往后查,直到表尾;(3)可以随意地在某已知结点p前或者p后插入一个新的结点;(4)删除某个结点,即插入某个结点的逆操作2.要求1)问题分析和任务定义:根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么?2)逻辑设计:写出抽象数据类型的定义,各个主要模块的算法,并画出模块之间的调用关系图;3)详细设计:定义相应的存储结构并写出各函数的伪码算法。
4)程序编码:把详细设计的结果进一步求精为程序设计语言程序。
5)程序调试与测试:采用自底向上,分模块进行,即先调试低层函数。
6)结果分析:程序运行结果包括正确的输入及其输出结果和含有错误的输入及其输出结果。
算法的时间、空间复杂性分析;7)编写课程设计报告;3.参考资料指导教师:申静教研室负责人:申静课程设计评阅摘要设计了一个程序,实现了双链表的建立查找插入删除。
双链表的每个数据结点都有两个指针,一个指向直接后继,另一个指向直接前驱。
所以从双向链表的任意一个结点开始,都可以很方便的访问它的前驱结点和后继结点。
并方便的实现查找、插入、删除运算。
关键词:双链表;前驱结点;后继结点目录1 课题描述 (2)2需求分析 (3)3 程序流程图 (4)4 概要设计 (10)创建链表 (10)插入函数 (11)删除函数 (12)查找函数 (12)5 调试分析以及设计体会 (14)6 源程序代码 (15)7运行结果 (22)8 总结 (27)参考文献 (28)1 课题描述双链表中有两条不同的方向链,即结点中有两个指针域,既可以顺指针往后寻查其他结点,也可以寻查结点的直接前驱。
双向链表上的插入和删除算法

编写程序,演示在双向链表上的插入和删除算法。
问题分析:1、在双向链表上操作首先要生成一个双向链表:1>节点定义struct DuLNode{ElemType data;DuLNode *prior;DuLNode *next;};2.> 创建双列表L=(DuLinkList)malloc(sizeof(DuLNode));L->next=L->prior=L;3>输入链表数据;2、3、对向链表进行插入操作算法:在节点p的前面加入一个新的节点q:q=(DuLinkList)malloc(sizeof(DuLNode));q->data=e;q->prior=p->prior;q->next=p;p->prior->next=q;p->prior=q;4、对双向链表进行删除操作算法删除给定节点p得到的代码如下:#include<iostream>#include<malloc.h>#define OK 1#define ERROR 0using namespace std;typedef int ElemType;typedef int status;struct DuLNode{ ElemType data;DuLNode *prior;DuLNode *next;};typedef DuLNode *DuLinkList;status DuListInsert_L(DuLinkList L,int i , ElemType e)//插入函数{DuLinkList p=L; //定义两个指向头节点的指针DuLinkList q=L;int j=0;while(p->next!=L&&j<i) //判断p是否到最后一个数据{p=p->next;j++;}if(p->next==L||j<i) //如果p是最后一个节点或者插入位置大于链表节点数{printf("无效的插入位置!\n");return ERROR;}//创建新节点q,数据为e,指针为nullq=(DuLinkList)malloc(sizeof(DuLNode));q->data=e;q->prior=p->prior;q->next=p;p->prior->next=q;p->prior=q;return OK;}status DuListDelete_L(DuLinkList L,int i , ElemType &e)//删除{DuLinkList p=L;int j=0;while(p->next!=L&&j<i){p=p->next;j++;}if(p->next==L||j<i){return ERROR;}p->prior->next=p->next;p->next->prior=p->prior;e=p->data;free(p);return OK;}int main(){ //初始化双向循环链表LDuLinkList L;L=(DuLinkList)malloc(sizeof(DuLNode)); //创建空双列表头结点L->next=L->prior=L;DuLNode *p,*q;ElemType e;//给L赋初始值p=L;q=L;while(cin>>e){p->next=(DuLNode*)malloc(sizeof(DuLNode));//分配新的节点q=p;p=p->next; //p指向新的节点p->data=e; //新结点的数据域为刚输入的ep->next=L; //新结点的指针域为头结点,表示这是单链表的最后一个结点p->prior=q;L->prior=p;}//p指向头指针,逐一输出链表的每个结点的值p=L;while(p->next!=L) //输出原列表{cout<<p->next->data<<' ';p=p->next;}cin.clear(); //清除上一个cin的错误信息cin.ignore(); //清空输入流int i;cout<<"输入待插入的元素e:";cin>>e;cout<<"输入待插入的位置i:";cin>>i;if(DuListInsert_L(L,i,e)){cout<<"插入后的双链为:";p=L;while(p->next!=L){cout<<p->next->data<<' ';p=p->next;}}printf("\n");p=L;while(p->next!=L) //输出列表{cout<<p->next->data<<' ';p=p->next;}int k;cin.clear(); //清除上一个cin的错误信息cin.ignore(); //清空输入流cout<<"要删除第几个节点k :";cin>>k;if(DuListDelete_L(L,k,e)){cout<<"被删除的元素为:"<<e<<endl;cout<<"删除后的元素为:";p=L;while(p->next!=L) //输出删除后的列表{cout<<p->next->data<<' ';p=p->next;}}elsecout<<"删除出错";return 0;}得到的结果如图罗达明电科一班学号2010301510028 2013、3、17。
双向链表的算法设计与实现实验报告

数学与计算科学学院实验报告
实验项目名称双向链表的算法设计与实现
所属课程名称__数据结构A
实验类型设计型
实验日期__
班级信计1402
学号201453100214
姓名俞凯烨
成绩
【实验小结】(收获体会)
附录1:源程序
附录2:实验报告填写说明
1.实验项目名称:要求与实验教学大纲一致。
2.实验目的:目的要明确,要抓住重点,符合实验教学大纲要求。
3.实验原理:简要说明本实验项目所涉及的理论知识。
4.实验环境:实验用的软、硬件环境。
5.实验方案(思路、步骤和方法等):这是实验报告极其重要的内容。
概括整个实验过程。
对于验证性实验,要写明依据何种原理、操作方法进行实验,要写明需要经过哪几个步骤来实现其操作。
对于设计性和综合性实验,在上述内容基础上还应该画出流程图、设计思路和设计方法,再配以相应的文字说明。
对于创新性实验,还应注明其创新点、特色。
6.实验过程(实验中涉及的记录、数据、分析):写明具体实验方案的具体实施步骤,包括实验过程中的记录、数据和相应的分析。
7.实验结论(结果):根据实验过程中得到的结果,做出结论。
8.实验小结:本次实验心得体会、思考和建议。
9.指导教师评语及成绩:指导教师依据学生的实际报告内容,给出本次实验报告的评价。
数据结构中的双向链表插入删除与查找的优化策略

数据结构中的双向链表插入删除与查找的优化策略在数据结构中,双向链表是一种常见且实用的数据结构,它具有节点中既包含前驱节点指针(prev),也包含后继节点指针(next)的特点。
双向链表的插入、删除和查找操作是常见的基本操作,为了提高这些操作的效率,我们可以采用一些优化策略。
本文将讨论双向链表插入、删除和查找操作的优化方法。
一、双向链表的插入优化策略双向链表的插入操作是将一个新节点插入到链表中的某个位置,一般情况下,我们可以通过以下步骤进行插入操作:1. 找到插入位置的前驱节点;2. 创建新节点,并将新节点的prev指针指向前驱节点,next指针指向前驱节点的后继节点;3. 将前驱节点的next指针指向新节点,后继节点的prev指针指向新节点。
然而,在实际应用中,我们可以通过一些优化策略来减少插入操作的时间复杂度。
1. 将链表按照特定顺序进行排序:通过维护一个有序的双向链表,可以使插入操作更加高效。
当需要插入新节点时,只需要遍历链表找到合适的位置进行插入,而不需要像无序链表那样遍历整个链表。
2. 使用“哨兵”节点:在链表头和尾部分别设置一个“哨兵”节点,可以简化插入操作。
当插入新节点时,不需要再对头节点和尾节点进行特殊处理,直接按照一般插入操作即可。
二、双向链表的删除优化策略双向链表的删除操作是将链表中的某个节点删除,一般情况下,我们可以通过以下步骤进行删除操作:1. 找到待删除的节点;2. 将待删除节点的前驱节点的next指针指向待删除节点的后继节点;3. 将待删除节点的后继节点的prev指针指向待删除节点的前驱节点;4. 删除待删除节点。
同样地,我们可以通过一些优化策略来提高删除操作的效率。
1. 使用“快速删除”策略:在实际应用中,我们可能需要经常删除某个特定值的节点。
为了提高删除效率,可以使用一个哈希表来存储节点的值和对应的指针,可以将删除操作的时间复杂度从O(n)降低到O(1)。
2. 批量删除操作:如果需要删除多个节点,可以先将待删除的节点标记,并在删除操作时一次性删除所有标记的节点。
C课程设计双向链表

C 课程设计双向链表一、课程目标知识目标:1. 学生能够理解双向链表的概念与结构,掌握双向链表的基本原理。
2. 学生能够掌握双向链表的插入、删除、查找等基本操作。
3. 学生能够了解双向链表在实际应用中的优势。
技能目标:1. 学生能够运用所学知识,独立编写双向链表的基本操作代码。
2. 学生能够通过分析问题,选择合适的链表结构进行数据存储与处理。
3. 学生能够运用双向链表解决实际问题,提高编程能力。
情感态度价值观目标:1. 学生培养对数据结构与算法的兴趣,激发主动学习的热情。
2. 学生通过团队合作,培养沟通与协作能力,增强团队意识。
3. 学生在学习过程中,培养勇于尝试、克服困难的精神,提高解决问题的自信心。
课程性质:本课程为计算机科学领域的数据结构与算法课程,旨在帮助学生掌握双向链表这一基本数据结构。
学生特点:学生为高中一年级计算机兴趣小组,具备一定的编程基础,对数据结构有一定了解。
教学要求:结合学生特点,注重理论与实践相结合,通过案例教学,引导学生主动探索、实践,达到学以致用的目的。
在教学过程中,关注学生的个体差异,给予个性化指导,确保每个学生都能掌握双向链表的知识。
同时,注重培养学生的团队合作能力和解决问题的能力。
二、教学内容1. 双向链表基本概念:介绍双向链表的定义、结构与特点,以及与单向链表的对比。
- 教材章节:第二章第二节“双向链表的基本概念”2. 双向链表的操作:讲解双向链表的插入、删除、查找等基本操作,并通过实例演示。
- 教材章节:第二章第三节“双向链表的操作”3. 双向链表的应用:介绍双向链表在实际编程中的应用场景,如双向链表实现的队列、栈等。
- 教材章节:第二章第四节“双向链表的应用”4. 编程实践:布置相关编程任务,让学生动手实践双向链表的创建、操作和应用。
- 教材章节:第二章练习题“双向链表编程实践”教学内容安排与进度:1. 课时1:双向链表基本概念2. 课时2:双向链表的操作(上)3. 课时3:双向链表的操作(下)4. 课时4:双向链表的应用5. 课时5:编程实践与讨论在教学过程中,确保学生充分理解每个知识点,注重理论与实践相结合,逐步引导学生掌握双向链表的相关知识。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构课程设计设计说明书双链表的建立查找插入删除算法的实现学生姓名田园学号1221024050班级信管1202成绩指导教师申静数学与计算机科学学院2014年3月7日课程设计任务书2013—2014学年第二学期课程设计名称:数据结构课程设计课程设计题目:双链表的建立查找插入删除算法的实现完成期限:自2014年2月24日至2014年3月7 日共2 周设计内容:1.任务说明(1)任意输入一组数据,能得到一个带头结点的双向链表;(2)查找数据域为一特定值的某个结点时,从表头结点往后依次比较各结点数据域的值,若正是该特定值,则返回指向结点的指针,否则继续往后查,直到表尾;(3)可以随意地在某已知结点p前或者p后插入一个新的结点;(4)删除某个结点,即插入某个结点的逆操作2.要求1)问题分析和任务定义:根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么?2)逻辑设计:写出抽象数据类型的定义,各个主要模块的算法,并画出模块之间的调用关系图;3)详细设计:定义相应的存储结构并写出各函数的伪码算法。
4)程序编码:把详细设计的结果进一步求精为程序设计语言程序。
5)程序调试与测试:采用自底向上,分模块进行,即先调试低层函数。
6)结果分析:程序运行结果包括正确的输入及其输出结果和含有错误的输入及其输出结果。
算法的时间、空间复杂性分析;7)编写课程设计报告;3.参考资料指导教师:申静教研室负责人:申静课程设计评阅摘要设计了一个程序,实现了双链表的建立查找插入删除。
双链表的每个数据结点都有两个指针,一个指向直接后继,另一个指向直接前驱。
所以从双向链表的任意一个结点开始,都可以很方便的访问它的前驱结点和后继结点。
并方便的实现查找、插入、删除运算。
关键词:双链表;前驱结点;后继结点目录1 课题描述 (2)2需求分析 (3)3 程序流程图 (4)4 概要设计 (10)创建链表 (10)插入函数 (11)删除函数 (12)查找函数 (12)5 调试分析以及设计体会 (14)6 源程序代码 (15)7运行结果 (22)8 总结 (27)参考文献 (28)1 课题描述双链表中有两条不同的方向链,即结点中有两个指针域,既可以顺指针往后寻查其他结点,也可以寻查结点的直接前驱。
克服了单链表的单向性,更加方便快捷。
2需求分析链表是线性表的链式表示,双链表是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前趋。
所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。
由于它不要求逻辑上相邻的元素在物理位置上也相邻,所以它没有顺序存储结构在做插入删除操作时需要移动大量元素的弱点。
在单链表存储结构结点中只有一个指示直接后继的指针域,由此,从某个结点出发只能顺指针往后寻查其他结点。
若要寻查结点的直接前趋,则需从表头指针出发。
而在双链表结点中有两个指针域,其一指向直接后继,另一指向直接前趋。
3 程序流程图图3—1主函数流程图图3—2创建一个双链表流程图图3—3插入元素流程图图3—4删除结点流程图图3—5查找元素图3—6显示链表示意图4 概要设计创建链表int data;struct DoubleList *prior,*next;}DoubleList;struct DoubleList * InitList(){struct DoubleList *head,*p,*q;int d,k;printf("\n创建一个链表:\n\n");head=(struct DoubleList *)malloc(sizeof(struct DoubleList)); head->next=null;head->prior=null;p=head;do{scanf("%d",&d);if(d<=0){printf("\n您所输入的数据有误,请重新输入\n\n");scanf("%d",&d);}else{q=(struct DoubleList *)malloc(sizeof(struct DoubleList));q->next=null;q->data=d;q->prior=p;p->next=q;p=p->next;length++;}printf("是否继续输入(是(1)否(2)):");scanf("%d",&k);}while(k!=2);return head;}插入函数void ListInsert(struct DoubleList *head,int i,int e){struct DoubleList *p,*q;int j=1;if(i>0&&i<=length+1){p=head;while(j<i){p=p->next;j++;}q=(struct DoubleList *)malloc(sizeof(struct DoubleList));q->data=e;q->next=p->next;if(p->next)p->next->prior=q;q->prior=p;p->next=q;}elseprintf("对不起您所输入的节点位置出错,数据插入失败!\n"); }删除函数int ListDelete(struct DoubleList *head,int i) {struct DoubleList *p;int e,j=0;p=head;while(j<i){p=p->next;j++;}e=p->data;p->prior->next=p->next;if(p->next)p->next->prior=p->prior;free(p);return e;}查找函数void search(struct DoubleList *head,int n) {struct DoubleList *p;int i=1;p=head;do{p=p->next;if(p->data==n){printf("查找的元素在链表中第%d位\n",i); break;}i++;}while(p->next!=null);if(i==length+1){ printf("查找的元素不在链表中\n");} }5 调试分析以及设计体会程序调试中遇到的问题以及解决问题的方法。
主要是在结点插入判断方面有难度,一开始不能准确的进行结点的判断和插入,然后就是插入结点的过程中位置不对,后来通过同学的帮助解决了这个问题。
还有就是在显示指针变化方面有问题,经过查询资料,解决结点插入方面的问题,用画箭头的方式来表现指针的变化。
在运行程序时发现程序不能对不合法的位置进行判断,最后通过修改加上一个计数的变量解决了这个问题。
6 源程序代码#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define null 0#define error -1#define z 1000int length=0;struct DoubleList{int data;struct DoubleList *prior,*next;}DoubleList;struct DoubleList * InitList(){struct DoubleList *head,*p,*q;int d,k;printf("\n创建一个链表:\n\n");head=(struct DoubleList *)malloc(sizeof(struct DoubleList)); head->next=null;head->prior=null;p=head;do{scanf("%d",&d);if(d<=0){printf("\n您所输入的数据有误,请重新输入\n\n");scanf("%d",&d);}else{q=(struct DoubleList *)malloc(sizeof(struct DoubleList));q->next=null;q->data=d;q->prior=p;p->next=q;p=p->next;length++;}printf("是否继续输入(是(1)否(2)):");scanf("%d",&k);}while(k!=2);return head;}void ListInsert(struct DoubleList *head,int i,int e){struct DoubleList *p,*q;int j=1;if(i>0&&i<=length+1){p=head;while(j<i){p=p->next;j++;}q=(struct DoubleList *)malloc(sizeof(struct DoubleList));q->data=e;q->next=p->next;if(p->next)p->next->prior=q;q->prior=p;p->next=q;}elseprintf("对不起您所输入的节点位置出错,数据插入失败!\n"); }int ListDelete(struct DoubleList *head,int i){struct DoubleList *p;int e,j=0;p=head;while(j<i){p=p->next;j++;}e=p->data;p->prior->next=p->next;if(p->next)p->next->prior=p->prior;free(p);return e;}void search(struct DoubleList *head,int n){struct DoubleList *p;int i=1;p=head;do{p=p->next;if(p->data==n){printf("查找的元素在链表中第%d位\n",i);break;}i++;}while(p->next!=null);if(i==length+1){ printf("查找的元素不在链表中\n");} }void print(struct DoubleList *head) {struct DoubleList *p,*q;if(head){p=head->next;printf("正向:\n\n");while(p){printf("%5d ",p->data);q=p;p=p->next;}printf("\n\n逆向:\n\n");while(q->prior){printf("%5d ",q->data);q=q->prior;}printf("\n");}}void main(){struct DoubleList *head;int i,e,n;head=null;do{system("cls");printf("\n\n 双向链表的相关操作\n\n\n"); printf(" 1. 创建一个新链表。