厦门理工数据结构实验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讲课讲稿

数据结构实验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网二吴睿

《数据结构》实验三报告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_厦门理工

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篇

数据结构实验报告数据结构实验报告精选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。

厦门理工学院 c语言数据结构 级数据结构期末试卷_A

厦门理工学院 c语言数据结构 级数据结构期末试卷_A


专业 系 装
10
级 班级


第 3 页 共 7 页
三、程序填空题(本题共 5 空,每空 2 分, 共 10 分)
链式表表示和实现线性表的部分程序如下,请在 程序空白处填上适当的语句: //线性表的单链表存储结构 typedef struct LNode{ ElemType data; struct LNode *next; } LNode, *LinkList; } 中
①p->next(2 分) ②malloc(2 分) ③data(2 分) ④s->next = p->next(2 分) ⑤p->next = s(2 分) ②
a
7
(2 分)
b
WPL = 7*3 + 5*3 + 4*2 + 2*1 = 46
(2 分)
四、算法设计题(本题共 1 小题,每题 14 分,共 14 分)
(10) 循环队列用数组 V[0..m-1]存放其元素值,已知其头、尾指针分别是 f 和 r,则当前队列中的元素 个数是( A ) A. (r-f+m)%m B. (r-f+1) C. (r-f+m+1)%m D. (r-f+m-1)%m (11) 单循环链表表示的队列长度为 n,若只设头指针,则进队的时间复杂度为( A. O(n) B. O(1) C. O(n2) D. O(nlogn) )
学号 栏 线
图 1
姓名
图 2
(3) 算术表达式如下:a*(b+c)-d。 ① 用二叉树表示算术表达式 ② 写出后序(后缀)表达式


(4) 请写出无向图图 2 中顶点 a-f 的度。 (5) 给定元素序列: (50,25,80,20,76,93) ,画出按照该序列构造的二叉 排序树(必须画出二叉排序树的建树过程)。 (6) 下面的邻接表表示一个给定的无向图 ① 请根据邻接表画出无向图 ② 给出从顶点 v1 开始, 根据邻接表对图用深度优先搜索法进行遍历时的顶 点序列; ③ 给出从顶点 v1 开始, 根据邻接表对图用广度优先搜索法进行遍历时的顶 点序列。

厦门理工学院操作系统实验3

厦门理工学院操作系统实验3

《操作系统》实验报告实验序号:3 实验项目名称:进程管理四、实验结果与数据处理1.进程的创建一(1)实验结果:图1:进程的创建一代码图2:程序运行结果(2)结果分析:运行结果:我们由图可以得知输出结果为bca或者abc的任意排列。

结果分析:我们从进程执行并发的角度来思考,不管输出abc的任意排列都是有可能的。

原因:fork函数的原理是:一个现有进程可以调用fork函数创建一个新进程。

由fork创建的新进程被称为子进程(child process)。

fork函数被调用一次但返回两次。

两次返回的唯一区别是子进程中返回0值而父进程中返回子进程ID。

在fork函数执行完毕后,如果创建新进程成功,则出现两个进程,一个是子进程,一个是父进程。

在子进程中,fork函数返回0,在父进程中,fork返回新创建子进程的进程ID。

我们可以通过fork返回的值来判断当前进程是子进程还是父进程。

而fork()创建进程所需的时间虽然可能多于输出一个字符的时间,但各个进程的时间片的获得却不是一定是顺序的,所以输出abc的排列都是有可能的。

(3)程序修改:1.如果想让子进程先执行,父进程后执行,利用wait()/waitpid()函数怎样修改程序实现。

2.如果让多个进程不并发执行,而是按规定的顺序执行,请利用sleep()函数怎样修改程序实现。

图3:修改后的代码图4:修改后的代码运行结果从代码修改后的运行结果和网上查阅的资料我们可以知道wait()/waitpid()和sleep()函数都可以控制进程执行的先后顺序,而我们也可以深入了解一下wait()和waitpid()的区别:a. wait()函数用于使父进程(也就是调用wait()的进程)阻塞,直到一个子进程结束或者该进程接收到了一个指定的信号为止。

如果该父进程没有子进程或者它的子进程已经结束,则wait()函数就会立即返回。

b. waitpid()的作用和wait()一样,但它并不一定要等待第一个终止的子进程(它可以指定需要等待终止的子进程),它还有若干选项,如可提供一个非阻塞版本的wait()功能,也能支持作业控制。

实验一实验三报告实验报告二厦门理工学院C语言选修课上机实验实验循环结构

实验一实验三报告实验报告二厦门理工学院C语言选修课上机实验实验循环结构
《高级语言程序设计》实验报告
实验序号:1实验项目:初识C语言与C编程环境
学 号
0908012232
姓 名
叶志伟
专业、班级
09机制2
实验地点
1-511
指导教师
胡亮
实验时间
0301
一、实验目的及要求
1.掌握Visual C 6.0程序设计集成环境的使用。
2.学会简单程序的调试。
二、实验设备(环境)及要求
程序:#include<math.h>
main ( )
{
float x;
x=sin(0.45456);
printf("%f \n",x);
}
运行结果截图:
可知语句float x;的作用是:
定义X为单精度的浮点型
可知sin的作用是:三角函数名
5.模仿教材中的例题,编写一个求两数之差的程序。编辑、编译、连接和运行。运行结果是什么?
打造全网一站式需求
欢迎您的下载,资料仅供参考
}
运行结果截图:
3.输入下列源程序,进行修改、编译、连接和运行。运行的结果是什么?
程序:main ( )
{
printf("Programming \n");
printf("is Fun.\n");
}
运行结果截图:
可知\n的作用是:
使输出数据另起一行
4.输入下列源程序,进行修改、编译、连接和运行。运行的结果是什么?
运行结果截图:
【思考题】
1.什么是源程序?什么是编译程序?C语言源程序结构是怎样的?
2.对照课本源程序,举例说明程序中哪些是注释、预处理命令、声明语句、可执行语句、函数定义、函数调用、关键词、main()函数等。

数据结构第三次试验

数据结构第三次试验

对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,通系电1,力过根保管据护线生高0不产中仅工资2艺料22高试2可中卷以资配解料置决试技吊卷术顶要是层求指配,机置对组不电在规气进范设行高备继中进电资行保料空护试载高卷与中问带资题负料2荷试2,下卷而高总且中体可资配保料置障试时2卷,32调需3各控要类试在管验最路;大习对限题设度到备内位进来。行确在调保管整机路使组敷其高设在中过正资程常料1工试中况卷,下安要与全加过,强度并看工且25作尽52下可22都能护可地1关以缩于正小管常故路工障高作高中;中资对资料于料试继试卷电卷连保破接护坏管进范口行围处整,理核或高对者中定对资值某料,些试审异卷核常弯与高扁校中度对资固图料定纸试盒,卷位编工置写况.复进保杂行护设自层备动防与处腐装理跨置,接高尤地中其线资要弯料避曲试免半卷错径调误标试高方中等案资,,料要编试求5写、卷技重电保术要气护交设设装底备备置。4高调、动管中试电作线资高气,敷料中课并设3试资件且、技卷料中拒管术试试调绝路中验卷试动敷包方技作设含案术,技线以来术槽及避、系免管统不架启必等动要多方高项案中方;资式对料,整试为套卷解启突决动然高过停中程机语中。文高因电中此气资,课料电件试力中卷高管电中壁气资薄设料、备试接进卷口行保不调护严试装等工置问作调题并试,且技合进术理行,利过要用关求管运电线行力敷高保设中护技资装术料置。试做线卷到缆技准敷术确设指灵原导活则。。:对对在于于分调差线试动盒过保处程护,中装当高置不中高同资中电料资压试料回卷试路技卷交术调叉问试时题技,,术应作是采为指用调发金试电属人机隔员一板,变进需压行要器隔在组开事在处前发理掌生;握内同图部一纸故线资障槽料时内、,设需强备要电制进回造行路厂外须家部同出电时具源切高高断中中习资资题料料电试试源卷卷,试切线验除缆报从敷告而设与采完相用毕关高,技中要术资进资料行料试检,卷查并主和且要检了保测解护处现装理场置。设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。

《数据结构实验与实训教程(第3版)》课件

《数据结构实验与实训教程(第3版)》课件

目录第一部分预备知识 (1)预备知识 (1)预备知识实验 (2)第二部分基础实验 (4)实验1 线性表的基本操作 (4)实验2 链表的基本操作 (9)实验3 栈的基本操作 (15)实验4 队列的基本操作 (22)实验5 数组的基本操作 (32)实验6 字符串的基本操作 (36)实验7 二叉树的基本操作 (41)实验8 树的遍历和哈夫曼树 (46)实验9 图的基本操作 (53)实验10 排序 (59)实验11 查找 (64)第三部分课程设计实验 (69)实验1 航空客运订票系统 (69)实验2 汉诺塔游戏程序 (75)实验3 全屏幕编辑程序设计 (79)实验4 旅游路线安排模拟系统 (90)实验6 最小生成树kruskal算法 (93)第一部分预备知识预备知识例1.1#include <stdio.h>int sumabc(int a, int b, int c) /* 求三个整数之和*/{ int s;a=b+c;s=a+b+c;return s;}void displayLine(void){ printf(”----------------------\n“);}void main( ){ int x,y, z ,sabc;x=y=z=8;display(); /* 画一条线*/printf(“\n sum=%d”,sumabc(x,y,z)); /* 在输出语句中直接调用函数sumabc( ) */ printf(“\n %6d%6d%6d”,x,y,z);display();/* 画一条线*/x=2; y=4; z=6;sabc =sumabc(x, y, z); /* 在赋值语句中调用函数sumabc( ) */printf(“\n “ sum=%d”, sabc);printf(“\n %6d%6d%6d”,x,y,z);display();/* 画一条线*/}例1.2int sumabc(int *a, int b, int c){int s;*a=b+c;s=*a+b+c;return s;}预备知识实验int main(){ //在main函数中调用上述声明的函数int n; //记录个数STUDENT stu[MAXSIZE;// 顺序存储结构,方法一静态一维数组。

厦门理工学院数据结构实验2

厦门理工学院数据结构实验2

《数据结构》实验报告实验序号:2 实验项目名称:顺序表的操作学号姓名专业、班级实验地点实1#514 指导教师林仙丽实验时间2013-10-18一、实验目的及要求1.掌握线性表的顺序存储类型;2.熟练掌握顺序表的基本操作和具体的函数实现。

二、实验设备(环境)及要求微型计算机;windows 操作系统;Microsoft Visual Studio 6.0集成开发环境。

三、实验内容与步骤1.设A、B均为用数组实现的List类型的顺序表,试设计一个函数Alternate (A,B),从表A中第1个元素开始,交替地用表A和表B中元素组成一个新表。

运行结果截图:运行结果截图:四、分析与讨论刚开始敲主函数时,由于一直没有给结构体指针*m初始化,导致运行一直出错,找了一个多小时的bug,还是没找着。

最后在大神杨靖钰的帮助下,先定义了一个结构体list,再用指针m指向list,即m=*list。

之后一切都变简单了。

五、教师评语成绩签名:日期:附源程序清单:1.#include<stdio.h>#include<stdlib.h>#define LIST_INIT_SIZE 10#define LISTINCREMENT 5typedef int ElemType;typedef struct{ElemType *elem;int length ;int ListSize;} sqlist;int InitList_sq(sqlist *l) /*initial the list l*/{l->elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));if (!l->elem){printf("无法分配空间!");return 1;}else{l->length=0;l->ListSize=LIST_INIT_SIZE;printf("ok\n");return 0;}}void Alternate(sqlist *A,sqlist*B){ElemType i;sqlist list;sqlist *C;C=&list;InitList_sq(C);C->length=A->length+B->length;while(i){if(C->length>=C->ListSize){ElemType *newbase;newbase=( ElemType *)realloc(C->elem, (C->ListSize+LISTINCREMENT)*sizeof(ElemType));C->elem=newbase;C->ListSize+=LISTINCREMENT;}else break;}for(i=0;i<C->length;i++){C->elem[2*i]=A->elem[i];C->elem[2*i+1]=B->elem[i];}for(i=0;i<C->length;i++)printf("%d ",C->elem[i]);}void main(){ElemType i;sqlist list1,list2,*A,*B;A=&list1;B=&list2;InitList_sq(A);InitList_sq(B);printf("请输入A指向的5个整数:\n");for(i=0;i<5;i++)scanf("%d",&A->elem[i]);A->length=i;printf("请输入B指向的5个整数:\n");for(i=0;i<5;i++)scanf("%d",&B->elem[i]);B->length=i;Alternate(A,B);printf("\n");}2.#include<stdio.h>#include<stdlib.h># define LIST_INIT_SIZE 10 //线性表存储空间的初始分配量# define LISTINCREMENT 5 //线性表存储空间的分配增量typedef int ElemType;typedef struct{int *elem;int length ; //当前长度int ListSize; //当前分配的存储容量} sqlist;int InitList_sq(sqlist *l) /*initial the list l*/{l->elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));if (!l->elem){printf("无法分配空间!");return 1;}else{l->length=0;l->ListSize=LIST_INIT_SIZE;printf("ok\n");return 0;}}int ListInsert_Sq(sqlist *L,int i, int e){int *q,*p;if(i<1 || i>L->length+1)return 1;if(L->length>=L->ListSize){int *newbase;newbase=( ElemType *)realloc(L->elem, (L->ListSize+LISTINCREMENT)*sizeof(ElemType));if(!newbase)return 1;L->elem=newbase;L->ListSize+=LISTINCREMENT;}q=&(L->elem[i-1]);for(p=&(L->elem [L->length-1]);p>=q;--p)*(p+1)=*p;*q=e;++L->length;return 0;}void main(){int i,j,k,b;int a1[LIST_INIT_SIZE],a2[100];sqlist list,*m;m=&list;b=InitList_sq(m);printf("请输入10个整数:\n");for(j=0;j<LIST_INIT_SIZE;j++)scanf("%d",&m->elem[j]);m->length=j;printf("请输入i和k的值:\n");scanf("%d%d",&i,&k);printf("请输入要插入%d个数:\n",k);for(j=0;j<k;j++)scanf("%d",&a2[j]);for(j=0;j<k;j++){b=ListInsert_Sq(m,i+j,a2[j]);}for(j=0;j<m->length;j++)printf("%d ",m->elem[j]);printf("\n");}。

数据结构实验实训报告单

数据结构实验实训报告单

一、实验名称:数据结构实验实训二、实验时间:2023年10月25日三、实验地点:计算机实验室四、实验目的:1. 理解并掌握数据结构的基本概念和常用算法;2. 学会使用C++语言实现数据结构的操作;3. 提高编程能力和问题解决能力;4. 加深对数据结构在实际应用中的理解。

五、实验内容:1. 实验一:线性表(1)实验内容:实现线性表的基本操作,如插入、删除、查找、排序等。

(2)实验步骤:a. 定义线性表的数据结构;b. 实现线性表的插入、删除、查找、排序等操作;c. 编写测试程序,验证实验结果。

2. 实验二:栈与队列(1)实验内容:实现栈和队列的基本操作,并分析其时间复杂度和空间复杂度。

(2)实验步骤:a. 定义栈和队列的数据结构;b. 实现栈和队列的入栈、出栈、入队、出队等操作;c. 分析栈和队列的时间复杂度和空间复杂度;d. 编写测试程序,验证实验结果。

3. 实验三:链表(1)实验内容:实现链表的基本操作,如插入、删除、查找、排序等。

(2)实验步骤:a. 定义链表的数据结构;b. 实现链表的插入、删除、查找、排序等操作;c. 编写测试程序,验证实验结果。

4. 实验四:树与二叉树(1)实验内容:实现二叉树的基本操作,如插入、删除、查找、遍历等。

(2)实验步骤:a. 定义二叉树的数据结构;b. 实现二叉树的插入、删除、查找、遍历等操作;c. 编写测试程序,验证实验结果。

5. 实验五:图(1)实验内容:实现图的基本操作,如图的创建、添加边、查找路径等。

(2)实验步骤:a. 定义图的数据结构;b. 实现图的创建、添加边、查找路径等操作;c. 编写测试程序,验证实验结果。

六、实验心得:1. 通过本次实验,我对数据结构的基本概念和常用算法有了更深入的理解,为今后的学习和工作打下了坚实的基础。

2. 在实验过程中,我学会了使用C++语言实现数据结构的操作,提高了自己的编程能力。

3. 通过对数据结构在实际应用中的分析,我认识到数据结构在计算机科学中的重要地位,为今后的职业发展指明了方向。

最新数据结构实验3精品版

最新数据结构实验3精品版

2020年数据结构实验3精品版《数据结构》实验报告void main(){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.编写一个函数计算值域为x的结点个数,并在主函数中测试;以下题目任选一题:3.编写一个删除链表中值为x的结点的直接前趋结点的算法,若有多个值为x的结点,则删除第一个x的直接前趋结点;4.改写CreateList_L函数,使得链表创建时为非降序排列;5.改写ListInsert_L函数,忽略位置参数,在上述非降序排列链表中插入一个元素,使得链表依然保持非降序;附源程序清单:1# include <stdlib.h># include <stdio.h># define ERROR 1# define OK 0# define OVERFLOW 1typedef int ElemType;//给int一个别名ElemType typedef int Status;//给int一个别名Status typedef 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;}}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->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,x;//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中的所有元素printf("请输入要删除的位置:");scanf("%d",&x);ListDelete_L(L,x,i);ShowList_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;}}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->next)||j>i-1)return ERROR;q=p->next;p->next=q->next;e=q->data; free(q);return OK;}Status Mycompara_L(LinkList &L,ElemType y ){LinkList p;int i=0;p=L->next;while(p){if(p->data==y) i++;p=p->next;}printf("链表中一共有%d个要查找的结点:\n",i);return 0;}void main(){int n,i,a;//n为节点数,i为插入元素的位置,a为插入元素的值LinkList L;ElemType x;printf("请输入链式表的节点数:");scanf("%d",&n);CreateList_L ( L, n ); //初始化链表节点个数为n printf("请输入需要查找的节点值:\n");scanf("%d",&x);Mycompara_L(L,x);}p=L;j=0;while(p->next&&j<i-1){p=p->next;++j;}if(!(p->next)||j>i-1)return ERROR;q=p->next;p->next=q->next;e=q->data; free(q);return OK;}Status Mycompara_L(LinkList &L,ElemType y ){LinkList p;int i=0;p=L->next;while(p){if(p->data==y) i++;p=p->next;}printf("链表中一共有%d个要查找的结点:\n",i);return 0;}Status mycompara_delete(LinkList &L){LinkList p,q,s;p=L->next;while(p&&p->next){s=p;q=p->next;while (q){if(q->data==p->data){ s->next=q->next;free(q);q=s->next;}else{ s=q;q=q->next;}}p=p->next;}return 0;}void main(){int n;//n为节点数,i为插入元素的位置,a为插入元素的值LinkList L;printf("请输入链式表的节点数:");scanf("%d",&n);CreateList_L ( L, n ); //初始化链表节点个数为nmycompara_delete(L);ShowList_L(L);}。

数据结构实验三

数据结构实验三

数据结构实验三以下是为您起草的一份关于“数据结构实验三”的协议:合同主体:甲方:____________________________乙方:____________________________合同标的:1、本次协议的标的为“数据结构实验三”项目的相关合作事宜。

2、甲方和乙方将共同参与并完成“数据结构实验三”的任务,包括但不限于设计数据结构、编写代码、进行测试和优化等工作。

权利义务:11 甲方的权利义务111 甲方有权按照约定的分工和计划参与“数据结构实验三”的工作。

112 甲方有义务按时、按质量要求完成所承担的任务部分。

113 甲方应保守在实验过程中知悉的相关技术和业务秘密。

12 乙方的权利义务121 乙方有权对甲方的工作进行监督和检查。

122 乙方有义务向甲方提供必要的技术支持和协助。

123 乙方应按照约定的时间和方式与甲方进行沟通和协调。

违约责任:1、若甲方未能按时、按质量完成任务,应承担相应的责任,包括但不限于重新完成任务、采取补救措施,并可能承担因延误给乙方造成的损失。

2、若乙方未按约定提供技术支持和协助,导致实验任务受到影响,乙方应负责弥补损失,并采取措施改进。

3、若双方违反保密义务,泄露相关技术和业务秘密,应承担法律责任,并赔偿对方因此遭受的损失。

争议解决方式:1、本协议在履行过程中如发生争议,双方应首先友好协商解决。

2、若协商不成,任何一方均有权向有管辖权的人民法院提起诉讼。

本协议自双方签字(或盖章)之日起生效,有效期至“数据结构实验三”项目完成并验收合格之日止。

本协议一式两份,双方各执一份,具有同等法律效力。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;}。

相关文档
最新文档