厦门理工数据结构实验3
厦门理工 数据结构课程设计报告

《数据结构与算法》课程设计报告(2012— 2013学年第 1 学期)专业:网络工程班级:11网络工程姓名学号:1107022144指导教师:林仙丽成绩:计算机科学与技术系2013 年01 月11 日目录一.课程设计目的与要求 (1)1.设计目的 (1)2.设计任务及要求 (1)二 .方案实现与调试 (1)1.停车场管理系统 (1)1.1算法描述及实验步骤 (2)1.2调试过程及实验结果 (3)2.字符串操作 (4)2.1算法描述及实验步骤 (5)2.2调试过程及实验结果 (6)3.找祖先 (8)3.1算法描述及实验步骤 (9)3.2调试过程及实验结果 (10)4.二叉树运算2 (8)4.1算法描述及实验步骤 (9)4.2调试过程及实验结果 (1)三.课程设计分析与总结 (10)四.源程序清单 (11)1.停车场管理系统 (11)2.字符串操作 (19)3.找祖先 (22)4.二叉树运算2 (25)五.设计日志 (31)六.指导教师评语 (32)2一. 课程设计的目的与要求(含设计指标)1、设计目的(1)培养学生运用算法与数据结构的基本知识解决实际编程中的数据结构设计和算法设计问题。
(2)培养学生独立设计程序与解决问题的能力,培养学生团队协作集成程序模块及调试能力。
(3)培养学生初步的软件设计及软件测试的能力。
2、设计任务及要求基本要求:学生必须仔细阅读《数据结构》课程设计指导书,认真主动完成课程设计的要求。
有问题及时主动通过各种方式与教师联系沟通。
学生要发挥自主学习的能力,充分利用时间,安排好课设的时间计划,并在课设过程中不断检测自己的计划完成情况,及时的向教师汇报。
课程设计按照教学要求需要一周时间完成,一周中每天(按每周5天)至少要上3-4小时的机来调试C语言设计的程序,总共至少要上机调试程序15小时。
根据设计报告要求编写设计报告,主要内容包括目的、意义、原理和实现方法简介、过程分析及说明、实验结果情况说明、结论。
厦门理工学院数据结构实验

《数据结构》实验报告实验序号:6 实验项目名称:树和二叉树的操作前序:-*ab++c*d/efg中序:a*b-c+d*e/f+g后序:ab*cdef/*+g+-2. 链式表表示和实现二叉树如下:#include <stdio.h>#include <stdlib.h>#define max 50root=NULL; /*千万别忘了赋初值给root!*/do{printf("please input data%d:",i);i++;scanf("%d",&x); /*从键盘采集数据,以-9999表示输入结束*/if(x==-9999){printf("\nNow output data value:\n");}elseinsert_data(x); /*调用插入数据元素的函数*/}while(x!=-9999);}改写以上程序,实现功能如下(任选两题):1.编写函数实现前序、中序和后序遍历。
运行结果截图:2.编写函数实现计算叶节点个数。
运行结果截图:四、分析与讨论代码是网上查找的,但是在理解的情况下引用的,修改调试后完成了。
成绩五、教师评语签名:日期:#include <stdio.h>#include <stdlib.h>#define max 50typedef struct liuyu{int data;struct liuyu *lchild,*rchild;}test;liuyu *root,*p,*q[max];int sum=0;int m=sizeof(test);void insert_data(int x) /*生成二叉排序树*/{liuyu *p,*q,*s;s=(test*)malloc(m);s->data=x;s->lchild=NULL;s->rchild=NULL;if(!root){root=s;}p=root;while(p) /*如何接入二叉排序树的适当位置*/ {q=p;if(p->data==x){printf("data already exist! \n");return;}else if(x<p->data)p=p->lchild;elsep=p->rchild;}if(x<q->data)q->lchild=s;elseq->rchild=s;}void Preorder(liuyu *bt) //先序遍历输出{if(bt){printf("%d ",bt->data);Preorder(bt->lchild);Preorder(bt->rchild);}}void Inorder(liuyu *bt) //中序遍历输出{if(bt){Inorder(bt->lchild);printf("%d ",bt->data);Inorder(bt->rchild);}}void Postorder(liuyu *bt) //后序遍历输出{if(bt){Postorder(bt->lchild);Postorder(bt->rchild);printf("%d ",bt->data);}}int Leafnum(liuyu *bt){int i=0,j,k;if(bt==NULL) return 0;if(bt->lchild==NULL&&bt->rchild==NULL) i++;j=Leafnum(bt->lchild);k=Leafnum(bt->rchild);return i+j+k;}void main() /*先生成二叉排序树*/{int i,x;i=1;root=NULL; /*千万别忘了赋初值给root!*/do{printf("please input data%d:",i);i++;scanf("%d",&x); /*从键盘采集数据,以-9999表示输入结束*/if(x==-9999){printf("\nNow output data value:\n");}elseinsert_data(x); /*调用插入数据元素的函数*/}while(x!=-9999);printf("先序遍历输出:");Preorder(root);printf("\n中序遍历输出:");Inorder(root);printf("\n后序遍历输出:");Postorder(root);printf("\n叶子总数为:");printf("%d\n",Leafnum(root)); }。
数据结构实验实训报告范文

一、实验目的1. 理解并掌握数据结构的基本概念和常用算法。
2. 学会使用C语言实现线性表、栈、队列、树和图等基本数据结构。
3. 培养动手实践能力,提高编程水平。
二、实验内容1. 线性表(1)顺序表(2)链表2. 栈(1)顺序栈(2)链栈3. 队列(1)顺序队列(2)链队列4. 树(1)二叉树(2)二叉搜索树5. 图(1)邻接矩阵表示法(2)邻接表表示法三、实验环境1. 操作系统:Windows 102. 编程语言:C语言3. 编译器:Visual Studio 20194. 实验软件:C语言开发环境四、实验步骤1. 线性表(1)顺序表1)定义顺序表结构体2)实现顺序表的初始化、插入、删除、查找等基本操作3)编写测试程序,验证顺序表的基本操作(2)链表1)定义链表结构体2)实现链表的创建、插入、删除、查找等基本操作3)编写测试程序,验证链表的基本操作2. 栈(1)顺序栈1)定义顺序栈结构体2)实现顺序栈的初始化、入栈、出栈、判空等基本操作3)编写测试程序,验证顺序栈的基本操作(2)链栈1)定义链栈结构体2)实现链栈的初始化、入栈、出栈、判空等基本操作3)编写测试程序,验证链栈的基本操作3. 队列(1)顺序队列1)定义顺序队列结构体2)实现顺序队列的初始化、入队、出队、判空等基本操作3)编写测试程序,验证顺序队列的基本操作(2)链队列1)定义链队列结构体2)实现链队列的初始化、入队、出队、判空等基本操作3)编写测试程序,验证链队列的基本操作4. 树(1)二叉树1)定义二叉树结构体2)实现二叉树的创建、遍历、查找等基本操作3)编写测试程序,验证二叉树的基本操作(2)二叉搜索树1)定义二叉搜索树结构体2)实现二叉搜索树的创建、遍历、查找等基本操作3)编写测试程序,验证二叉搜索树的基本操作5. 图(1)邻接矩阵表示法1)定义邻接矩阵结构体2)实现图的创建、添加边、删除边、遍历等基本操作3)编写测试程序,验证邻接矩阵表示法的基本操作(2)邻接表表示法1)定义邻接表结构体2)实现图的创建、添加边、删除边、遍历等基本操作3)编写测试程序,验证邻接表表示法的基本操作五、实验结果与分析1. 线性表(1)顺序表实验结果表明,顺序表的基本操作实现正确,测试程序运行稳定。
数据结构 实验3讲课讲稿

数据结构实验3《数据结构》实验报告年级_2012级__ 学号_ 姓名 _ 成绩______专业_计算机科学与技术实验地点__指导教师_实验项目:实验三队列实验性质设计性实验日期:一、实验目的:1、掌握队列及其基本操作的实现。
2、进一步掌握实现数据结构的编程方法。
二、实验内容与要求:1、实验题目一:队列的定义及其相关操作算法的实现要求:编程实现队列的类型定义及其初始化操作、入队操作、出队操作、取队头操作、输出操作等,并对其进行验证。
2、实验题目二:病人看病模拟要求:利用题目一所定义的队列(顺序队或链队)实现病人看病模拟程序,并进行验证给出结果。
三、实验问题描述编写一个程序,反映病人到医院看病,排队看医生的情况。
在病人排队过程中,主要重复两件事:(1)病人到达诊室,将病历本交给护士,拍到等待队列中候诊。
(2)护士从等待队列中取出下一位病人的兵力,该病人进入诊室就诊。
要求模拟病人等待就诊这一过程,程序采用菜单方式,其选项及功能说明如下:(1)排队————输入排队病人的病历号,加入到病人排队队列中。
(2)就诊————病人排队队列中最前面的病人就诊,并将其从队列中删除。
(3)查看排队————从队首到队尾列出所有的排队病人的病历号。
(4)不再排队,余下依次就诊————从队首到队尾列出所有的排队病人的病历号,并退出运行。
(5)下班————退出运行。
四、实验步骤1.实验问题分析此程序采用队列数据结构,存储结构为单链表,采用此种结构一方面可以减少数据复杂程度,增加系统稳定性也利用动态分配内存的方法,便于内存管理,充分利用内存空间2.功能(函数)设计void SeeDoctor(){ int sel,flag=1,find,no;QuType *qu;QNode *p;qu=(QuType *)malloc(sizeof(QuType));qu->front=qu->rear=NULL;}五、实验结果(程序)及分析#include<stdio.h>#include<malloc.h>typedef struct qnode{int data;struct qnode *next;}QNode;typedef struct {QNode *front,*rear;}QuType;void SeeDoctor(){int sel,flag=1,find,no;QuType *qu;QNode *p;qu=(QuType *)malloc(sizeof(QuType));qu->front=qu->rear=NULL;while(flag==1){printf("1:排队 2:就诊 3:查看排队 4:不再排队,余下依次就诊 5:下班请选择:");scanf("%d",&sel);switch(sel){case 1:printf(" >>输入病历号:");do{scanf("%d",&no);find=0;p=qu->front;while(p!=NULL && !find)if(p->data==no)find=1;elsep=p->next;if(find)printf(" >> 输入的病历号重复,重新输入:");}while(find==1);p=(QNode *)malloc(sizeof(QNode));p->data=no;p->next=NULL;if(qu->rear==NULL)qu->front=qu->rear=p;else{qu->rear->next=p;qu->rear=p;}break;case 2:if(qu->front==NULL)printf(" >>没有排队的病人!\n");else{p=qu->front;printf(" >>病人%d就诊\n",p->data);if(qu->rear==p)qu->front=qu->rear=NULL;elsequ->front=p->next;free(p);}break;case 3:if(qu->front == NULL)printf(" >>没有排队的病人!\n");else{p=qu->front;printf(" >>排队病人:");while(p!=NULL){printf("%d",p->data);p=p->next;}printf("\n");}break;case 4:if(qu->front==NULL)printf(" >>没有排队的病人!\n");else{p=qu->front;printf(" >>病人按以下顺序就诊:");while(p!=NULL){printf("%d",p->data);p=p->next;}printf("\n");}flag=0;break;case 5:if(qu->front!=NULL)printf(" >>请排队的病人明天就医!\n"); flag=0;break;}}}int main(){SeeDoctor();return 0;}六、结论与分析在本次试验中进一步理解队列的基本运算的实现,掌握队列的定义及其基本操作,掌握队列的存储结构及基本运算的实现和掌握队列的操作和应用,差不多也提高使用理论知识指导解决实际问题的能力。
《数据结构》实验三报告13网二吴睿

江西师范大学计算机信息工程学院学生实验报告专业_网络工程2班姓名_吴睿_ 学号1308093095 日期__2014.10.303、实验步骤在visual C++ 6.0中进行编程,调试,完成实验。
4、程序及运行结果(或实验数据记录及分析)实验1:linklist delx(linklist head,datatype x){linklist p=head->next,pre=head,q;int i=0;while(p!=NULL&&i==0){if(p->info==x){q=p;p=p->next;pre->next=p;free(q);i=1;}else{pre=p;p=p->next;i=0;}}return head;}linklist reverse(linklist head) {linklist p,q;p=head->next;head->next=NULL;while(p!=NULL){q=p->next;p->next=head->next;head->next=p;p=q;}return head;}linklist insert(linklist head ,datatype x) {linklist p,q;q=head;p=(linklist)malloc(sizeof(node));p->info=x;while(q->next->info<x&&q->next!=NULL){ q=q->next;}p->next=q->next;q->next=p;return head;}:linklist delallx(linklist head,int x) {linklist p=head->next,pre=head,q;while(p!=NULL){if(p->info==x){q=p;p=p->next;pre->next=p;free(q);}else{pre=p;p=p->next;}}return head;}{linklist head,tmp=NULL;linklist head1=L1,head2=L2;head=(linklist)malloc(sizeof(node));head->next=NULL;if (L1->next->info>L2->next->info)//哪个链表第一个节点值小,则把它的头指针作为合并后的头指针{head1 = L2;head2 = L1;}head->next=head1->next;while (head2!= NULL){while ( (head1->next->info < head2->info) && head1->next!=NULL) {head1 = head1->next;}tmp = head2;head2 = head2->next;tmp->next = head1->next;head1->next = tmp;}return head;}{linklist p1,p2,p3,L3,r;L3=r=(linklist)malloc(sizeof(node));L3->next=NULL;p1=L1->next;while(p1!=NULL){ p2=L2->next;while((p2!=NULL)&&(p2->info!=p1->info)) p2=p2->next;if((p2!=NULL)&&(p2->info==p1->info)) { p3=(linklist)malloc(sizeof(node));//L3=L3->next;p3->info=p1->info;r->next=p3;r=p3;}p1=p1->next;}// print(L3);r->next=NULL;return L3;}void partion(linklist head) {linklist p,s,pre;pre=head;p=head->next;while(p){if(p->info%2==0){pre=p;p=p->next;}else{s=p;pre->next=p->next;p=pre->next;s->next=NULL;s->next=head->next;head->next=s;}}}linklist search(linklist head,int k) {int num=0,i=0;linklist p=head;if(head==NULL)return NULL;while(p->next!=NULL){p=p->next;num++;}if(num<k)return NULL;p=head;for(i=0;i<num-k;i++)p=p->next;return p;}。
c语言 数据结构实验4_厦门理工

《数据结构》实验报告实验序号:4 实验项目名称:栈的操作1.#include <iostream>#define MaxSize 100using namespace std;typedef int ElemType;typedef struct{ElemType data[MaxSize];int top;}SqStack;void InitStack(SqStack *st) //初始化栈{st->top=-1;}int StackEmpty(SqStack *st) //判断栈为空{return (st->top==-1);}void Push(SqStack *st,ElemType * x,int k) //元素进栈{int i;for(i=1;i<k;i++){if(st->top==MaxSize-1){printf("栈上溢出!\n");}else{st->top++; //移动栈顶位置st->data[st->top]=x[i-1]; //数组进栈printf("%d\n",st->data[st->top]);}}}void Pop(SqStack *st,ElemType &e,int k) //出栈{int i;for(i=1;i<k;i++){if(st->top==-1){printf("栈下溢出\n");}else{e=st->data[st->top]; //元素出栈printf("%d \n",e);st->top--; //移动栈顶位置}}}int main(){SqStack L;SqStack *st=&L;ElemType e;ElemType num [9]={1,2,3,4,5,6,7,8,9};InitStack(st);printf("入栈元素是:\n");Push(st,num,10);printf("出栈元素是:\n");Pop(st,e,10);return 0;}2.#include<stdio.h>#include<stack> //引入栈using namespace std;int main(void){int temp=1;char ch;stack<char>s;s.push('#');printf("请输入一个算法表达式,以# 结束!\n");ch=getchar();while(ch!='#'&&temp==1){if(ch=='(')s.push(ch);else if(ch==')'){if(s.top()=='#') //右括号多于左括号temp=0;elses.pop();}ch=getchar();}if(s.top()!='#') //左括号多于右括号temp=0;if(temp==0)printf("圆括号匹配错误!\n",temp);else if(temp==1)printf("圆括号匹配正确!\n",temp);return 0;}。
数据结构实验报告2篇

数据结构实验报告数据结构实验报告精选2篇(一)实验目的:1. 熟悉数据结构的基本概念和基本操作;2. 掌握线性表、栈、队列、链表等经典数据结构的实现方法;3. 掌握数据结构在实际问题中的应用。
实验内容:本次实验主要包括以下几个部分:1. 线性表的实现方法,包括顺序表和链表,分别使用数组和链表来实现线性表的基本操作;2. 栈的实现方法,包括顺序栈和链式栈,分别使用数组和链表来实现栈的基本操作;3. 队列的实现方法,包括顺序队列和链式队列,分别使用数组和链表来实现队列的基本操作;4. 链表的实现方法,包括单链表、双链表和循环链表,分别使用指针链、双向链和循环链来实现链表的基本操作;5. 综合应用,使用各种数据结构来解决实际问题,例如使用栈来实现括号匹配、使用队列来实现马铃薯游戏等。
实验步骤及结果:1. 线性表的实现方法:a) 顺序表的基本操作:创建表、插入元素、删除元素、查找元素等;b) 链表的基本操作:插入节点、删除节点、查找节点等;c) 比较顺序表和链表的优缺点,分析适用场景。
结果:通过实验,确认了顺序表适用于频繁查找元素的情况,而链表适用于频繁插入和删除节点的情况。
2. 栈的实现方法:a) 顺序栈的基本操作:进栈、出栈、判空、判满等;b) 链式栈的基本操作:进栈、出栈、判空、判满等。
结果:通过实验,掌握了栈的基本操作,并了解了栈的特性和应用场景,例如括号匹配。
3. 队列的实现方法:a) 顺序队列的基本操作:入队、出队、判空、判满等;b) 链式队列的基本操作:入队、出队、判空、判满等。
结果:通过实验,掌握了队列的基本操作,并了解了队列的特性和应用场景,例如马铃薯游戏。
4. 链表的实现方法:a) 单链表的基本操作:插入节点、删除节点、查找节点等;b) 双链表的基本操作:插入节点、删除节点、查找节点等;c) 循环链表的基本操作:插入节点、删除节点、查找节点等。
结果:通过实验,掌握了链表的基本操作,并了解了链表的特性和应用场景。
厦门理工学院数字电路实验报告三

《数字逻辑》实验报告
实验序号:3 实验项目名称:逻辑电路的转换与化简
图1.1:“不一致电路”连接图
(4)流程分析:通过列出真值表,我们可以得到该逻辑电路的逻辑表达式,对其进行化简后得到新的逻辑表达式,再根据新的逻辑表达式我们可以设计出相应的
图2.1:裁判器电路未化简连接图
图2.2:裁判器电路化简连接图
)分析电路:图1为L=A—BC+AB—C+ABC—+ABC的接法,图2为L=AB+BC+AC
由图我们可以很明显的看出当我们对逻辑表达式进行化简之后可以一定程度上对逻辑电路设计进行简化,图1使用了八个逻辑门,而图二只使用了四个逻辑门,
图3.1:全加器连接图
的结果可由两个异或门得出,而C可由三个与非门与一个异或(4)电路分析:S
i。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构》实验报告实验序号:3 实验项目名称:链式表的操作int n,i,a;//n为节点数,i为插入元素的位置,a为插入元素的值LinkList L;printf("请输入链式表的节点数:");scanf("%d",&n);CreateList_L ( L, n ); //初始化链表节点个数为nprintf("请输入要插入的位置:");scanf("%d",&i);printf("请输入要插入的值:");scanf("%d",&a);ListInsert_L(L,i,a); //在第i个位置插入元素aShowList_L(L); //输出链表L中的所有元素}运行以上程序,根据要求完成下列题目:1.参考P30页中的例题2.10实现ListDelete_L函数,并在主函数中测试;2.编写一个函数计算值为3的结点个数,并在主函数中测试;以下题目任选一题:3.编写一个删除链表中值为3的结点的直接前趋结点的算法,若有多个值为3的结点,则删除第一个值为3的直接前趋结点;4.改写CreateList_L函数,使得链表创建时为非降序排列;5.改写ListInsert_L函数,忽略位置参数,在上述非降序排列链表中插入一个元素,使得链表依然保持非降序;6.写一个对单循环链表进行逆序遍历(打印每个结点的值)的算法;7.编写一个函数,将单链表中值重复的结点删除,使所得的结果表中各结点值双联表牛13,双链表牛13,牛13第一张图第一个数据是59,截图接没了;8. 改写CreateList_L函数,采用尾插法创建带有头节点的单链表。
四、实验结果与数据处理详细记录程序在调试过程中出现的问题及解决方法。
记录程序执行的结果(贴图)。
五、分析与讨论对上机实践结果进行分析,上机的心得体会。
六、教师评语成绩附源程序清单:1只写改的和后添加的代码Status ListDelete_L(LinkList &L, int i,ElemType &e){LinkList p,q;int j;p=L;j=0;while((p->next)&&(j<i-1)){p=p->next;++j;}if(!(p=p->next)||j>i-1)return ERROR;q=p->next;p->next=q->next;e=q->data;free(q);return OK;}void main(){int n,i,a;//n为节点数,i为插入元素的位置,a删除相应元素后的显示质LinkList L;printf("请输入链式表的节点数:");scanf("%d",&n);CreateList_L ( L, n ); //初始化链表节点个数为nprintf("请输入要删除的位置:");scanf("%d",&i);ListDelete_L(L,--i,a); //在第i个位置删除元素ShowList_L(L); //输出链表L中的所有元素}2# include <stdlib.h># include <stdio.h># define ERROR 1# define OK 0# define OVERFLOW 1typedef int ElemType;//给int一个别名ElemTypetypedef int Status;//给int一个别名Statustypedef struct LNode{ElemType data;struct LNode *next;} LNode, *LinkList;void CreateList_L ( LinkList &L, int n ){// 输入n 个数据元素的值,建立带头结点的单链表Lprintf("请输入插入链表的节点值:\n");LinkList p;int i;L = ( LinkList ) malloc ( sizeof ( LNode ) );L->next = NULL; // 先建立一个带头结点的空链表for ( i = n; i > 0; i-- ){p = ( LinkList ) malloc ( sizeof ( LNode ) );scanf ("%d" ,&p->data );p->next = L->next;L->next = p;}}Status ListInsert_L ( LinkList &L, int i, ElemType e ){// 带头结点的单链表L中第i 个位置之前插入元素eLinkList p,s;int j; //j为计数器p = L; //p指向L的头节点j = 0;while ( p && j<i-1 ) //顺指针向后查,直到p指向第i个元素之前{p = p->next; ++j;}if ( ! p || j >i-1 )return ERROR;s = ( LinkList ) malloc ( sizeof ( LNode ) ); // 生成新结点s->data = e; // 使新结点数据域的值为es->next = p->next; // 将新结点插入到单链表L 中p->next = s; // 修改第i-1 个结点指针return OK;}void ShowList_L ( LinkList L ){// 输出链表L中的所有元素LinkList p;printf("链表中的元素为:\n");p=L->next; //跳过头结点while(p){printf(" %d ",p->data);p=p->next;}}int function(LinkList &L,int i){LinkList p,q;p=L;int j=0;while(p){if(p->data==i)j++;p=p->next;}return j;}void main(){int n,i,a;//n为节点数,i为插入元素的位置,a为查找后总计数LinkList L;printf("请输入链式表的节点数:");scanf("%d",&n);CreateList_L ( L, n ); //初始化链表节点个数为nprintf("输入要查找的元素\n");scanf("%d",&i);a=function(L,i);printf("%d\n",a);}7#include<stdio.h>#include<stdlib.h>#define ERROR 0#define OK 1#define VERFLOW 1int a[100]={0};typedef int ElemType;typedef int Status;typedef struct LNode{ElemType data;struct LNode *pre,*next;}LNode,*LinkList;void createlist(LinkList &L,int n){printf("输入插入链表的值\n");LinkList p,q;int i;L=(LinkList)malloc(sizeof(LNode));q=L;L->next=NULL;L->pre=NULL;for(i=0;i<n;i++){p=(LinkList)malloc(sizeof(LNode));scanf("%d",&p->data);q->next=p;p->pre=q;q=p;}q->next=NULL;}Status ListDelete_L(LinkList &L, int c,int n)//删除相同的值的位置,c是要删除的数字{LinkList p;int j,k;p=L->next;for(j=0;j<n;j++){k=p->data;if(k==c)break;p=p->next;}p->pre->next=p->next;p->next->pre=p->pre;free(p);return OK;}void find(LinkList &L,int n)//发现链表中重复数字的函数用全局变量数组a记录出现次数,a 【i】中i为记录重复数字{LinkList p;p=L->next;int i,v,j;for(i=0;i<n;i++){v=p->data;for(j=0;j<100;j++){if(v==j){a[j]=a[j]+1;}}p=p->next;}}void chazhao(LinkList &L,int x,int n,int b)//b是链表中多余的数字,n是链表长度,x是出现此数,chazhao是进行删除操作的主函数{int j;LinkList p;p=L->next;for(j=0;j<(x-1);j++){ListDelete_L(L, b, n);//b是需要杀出的节点}}void start(LinkList &L,int n){//进行查找删除的主函数int i,x,b;for(i=0;i<100;i++){if(a[i]>=2){x=a[i];b=i;chazhao(L,x,n,b);}}}void ShowList_L ( LinkList L ){// 输出链表L中的所有元素LinkList p;printf("链表中的元素为:\n");p=L->next; //跳过头结点while(p){printf(" %d ",p->data);p=p->next;}}void main(){int n;LinkList L;printf("请输入链式表的节点数:");scanf("%d",&n);createlist ( L, n );find (L,n);start(L,n);ShowList_L ( L );}8void CreateList_L ( LinkList &L, int n ){// 输入n 个数据元素的值,建立带头结点的单链表L printf("请输入插入链表的节点值:\n");LinkList p,r;int i;L = ( LinkList ) malloc ( sizeof ( LNode ) );r=L;for ( i = 0; i < n ; i++ ){p = ( LinkList ) malloc ( sizeof ( LNode ) ); //尾插法:新生成节点p储存链表的元素,然后让他的前一个节点(当前链表的尾节点)指向他;头插法:新生成借点储存当前链表元素,然后让当前链表的头结点指向新生成节点scanf ("%d" ,&p->data ); // p->next=l->next;新生成节点指向链表的下一个节点r->next=p; // l->next=p;r=p;}r->next=NULL;}。