厦门理工 c语言数据结构 实验6
- 格式:doc
- 大小:1.67 MB
- 文档页数:8
《数据结构》实验报告姓名:**学号:*********成绩:_____目录实验一,线性表的应用 (3)实验二,栈和队列的应用 (8)实验三,数组的应用 (13)实验四,树和二叉树的应用 (19)实验五,图的应用 (24)实验六,查找表的应用 (32)实验七,排序算法的应用 (44)实验一线性表的应用【实验目的】1.熟练掌握线性表的基本操作在顺序存储和链式存储上的实现;2.以线性表的各种操作(建立、插入、删除、遍历等)的实现为重点;3.掌握线性表的动态分配顺序存储结构的定义和基本实现;4.通过对本章实验帮助学生加深对C语言的使用(特别是函数参数调用、指针类型的应用和链表的建立等各种基本操作)。
【实验内容】约瑟夫问题的实现:n只猴子要选猴王,所有猴子按1,2,…,n编号围坐一圈,从第1只开始按1,2,…,m报数,凡报到m号的猴子退出圈外,如此循环报数,直到圈内省剩下一只猴子时,这个猴子就是猴王。
编写一个程序实现上述过程,n和m由键盘输入。
【实验要求】1.要求用顺序表和链表分别实现约瑟夫问题;2.独立完成,严禁抄袭;3.上交的实验报告由如下部分组成:①实验名称②实验目的③实验内容(问题描述,算法描述,程序清单,测试结果,算法分析)。
实验结果:一,源程序:#include<stdio.h> #include<stdlib.h>#define Maxsize 80struct SeqList{int data[Maxsize];int len;};typedef struct SeqList SeqList;void InitList(SeqList *L){L=(SeqList *)malloc(sizeof(SeqList)); L->len=0;}void MadeList(SeqList *L){int i;int people;printf("请输入参选的总数:\n"); scanf("%d",&people);for (i=0;i<people;i++){L->data[i]=i+1;printf(" %d ",L->data[i]); }printf("\n");L->len=people;}void WentList(SeqList *L){int m,i,j;int k=0;printf("请输入出列数:\n"); scanf("%d",&m);for (i=L->len;i>0;i--){k=(k+m-1)%i;printf(" %d ",L->data[k]); for (j=k;j<i-1;j++){L->data[j]=L->data[j+1]; }L->len=L->len-1;}printf("\n");}void main(){SeqList *L;InitList(L);MadeList(L);WentList(L);}二,运行结果及截屏视图:实验二栈和列队的应用【实验目的】1.熟练掌握栈和列队的结构,以及这两种数据结构的特点;2.能够在两种存储结构上实现栈的基本运算,特别注意栈满和栈空时的判断条件和描述方法;3.熟练掌握链队列和循环列表的基本运算,特别注意队列满和队列空时的判断条件和描述方法。
数据结构(C语言版) 实验报告学院计算机科学与技术专业计算机大类强化学号xxx班级xxx姓名xxx指导教师xxx实验1实验题目:单链表的插入和删除实验目的:了解和掌握线性表的逻辑结构和链式存储结构,掌握单链表的基本算法及相关的时间性能分析。
实验要求:建立一个数据域定义为字符串的单链表,在链表中不允许有重复的字符串;根据输入的字符串,先找到相应的结点,后删除之。
实验主要步骤:1、分析、理解给出的示例程序。
2、调试程序,并设计输入数据(如:bat,cat,eat,fat,hat,jat,lat,mat,#),测试程序的如下功能:不允许重复字符串的插入;根据输入的字符串,找到相应的结点并删除。
3、修改程序:(1)增加插入结点的功能。
(2)将建立链表的方法改为头插入法。
程序代码:#include"stdio.h"#include"string.h"#include"stdlib.h"#include"ctype.h"typedef struct node //定义结点{char data[10]; //结点的数据域为字符串struct node *next; //结点的指针域}ListNode;typedef ListNode * LinkList; // 自定义LinkList单链表类型LinkList CreatListR1(); //函数,用尾插入法建立带头结点的单链表LinkList CreatList(void); //函数,用头插入法建立带头结点的单链表ListNode *LocateNode(); //函数,按值查找结点void DeleteList(); //函数,删除指定值的结点void printlist(); //函数,打印链表中的所有值void DeleteAll(); //函数,删除所有结点,释放内存ListNode * AddNode(); //修改程序:增加节点。
c 与数据结构实验报告C语言与数据结构实验报告引言:C语言作为一种高级编程语言,被广泛应用于软件开发和系统编程领域。
在计算机科学的学习过程中,数据结构是一门重要的课程,它涉及到如何组织和存储数据以便于有效地访问和操作。
本实验报告将探讨C语言与数据结构的关系,并介绍在实验中所学到的内容。
一、C语言的特点和应用C语言作为一种通用的高级编程语言,具有许多特点和优势。
首先,C语言具有高效性和可移植性。
它的语法简洁,执行效率高,可以在不同的操作系统上运行。
其次,C语言具有丰富的库函数支持,使得开发者可以方便地调用各种功能。
此外,C语言还支持指针操作,使得程序更加灵活和高效。
C语言在软件开发领域有广泛的应用。
例如,操作系统的开发离不开C语言,因为它能够直接访问硬件设备并进行底层编程。
此外,C语言还被广泛应用于嵌入式系统、游戏开发、网络编程等领域。
因此,掌握C语言对于计算机科学专业的学生来说是非常重要的。
二、数据结构的概念和分类数据结构是计算机科学中研究数据组织和存储方式的一门学科。
它涉及到如何将数据以某种特定的方式组织起来,以便于高效地访问和操作。
数据结构可以分为线性结构、树形结构和图形结构三大类。
1. 线性结构线性结构是最简单的数据结构之一,它的特点是数据元素之间存在一对一的关系。
常见的线性结构有数组、链表和栈等。
其中,数组是一种连续存储的数据结构,具有随机访问的特点;链表是一种离散存储的数据结构,通过指针将各个节点连接起来;栈是一种特殊的线性结构,具有后进先出(LIFO)的特点。
2. 树形结构树形结构是一种非线性的数据结构,它的特点是数据元素之间存在一对多的关系。
常见的树形结构有二叉树、堆和哈夫曼树等。
其中,二叉树是一种每个节点最多只有两个子节点的树形结构;堆是一种特殊的二叉树,具有一定的排序规则;哈夫曼树是一种用于数据压缩的树形结构。
3. 图形结构图形结构是一种更加复杂的非线性数据结构,它的特点是数据元素之间存在多对多的关系。
《C语言程序设计》实验报告实验序号:3 实验项目名称:顺序、选择结构附源程序清单:1)1. #include<stdio.h>2)void main()3){4)float c1,c2,c3,f1,f2,f3;5)printf("\nplease enter three f\n");6)scanf("%f\n%f\n%f",&f1,&f2,&f3);7)c1=(f1-32)*5/9;8)c2=(f2-32)*5/9;9)c3=(f3-32)*5/9;10)printf("\nhua shi wen du fenbie wei :\n%.2f1\n%.2f\n%.2f",c1,c2,c3);11)}2.3.4. #include<stdio.h>void main(){int a,b,c,d;printf("\n请输入一个四位数:\n");scanf("%1d%1d%1d%1d",&a,&b,&c,&d);printf("%d%d%d%d\n",d,c,b,a);}5. #include<stdio.h>void main(){char c;printf("Do you have Experience with C? press N/Y \n");c=getchar();switch(c){case 'n':printf("\nWe are sorry to tell you ...\n");break;case 'N':printf("\nWe are sorry to tell you ...\n");break;case 'y':printf("\nWelcome join us! \n");break;case 'Y':printf("\nWelcome join us!\n ");break;default:printf("Input invalid score\n\n");}}6.#include<stdio.h>void main(){float time,cost1,cost2;printf("请输入你一个月打电话的时间(分钟):");scanf("%f",&time);cost1=0.6*time;cost2=0.4*time+50;if(cost1<cost2){printf("第一种话费%.2f,第二种话费%.2f,比较后第一中比较省钱\n",cost1,cost2);}else printf("第一种话费%.2f,第二种话费%.2f,比较后第二中比较省钱\n",cost1,cost2); }7. #include<stdio.h>void main(){float wage,tax1,tax2,tax3,tax4;printf("请输入工资:");scanf("%f",&wage);tax2=(wage-1000)*0.05;tax3=4000*0.005+(wage-5000);tax4=4000*0.05+5000*0.1+(wage-10000)*0.2;if(wage<=1000){printf("该同志的工资%F低于标准免税\n",wage);}elseif(wage>1000&&wage<=5000){printf("该同志工资%f本月应该缴纳税收%.2f\n",wage,tax2);}elseif(wage>5000&&wage<=10000){printf("该同志工资%f本月应该缴纳税收%.2f\n",wage,tax3);}else printf("该同志工资%f本月应该缴纳税收%.2f\n",wage,tax4);}。
数据结构C语言版实验教案一、实验目的1. 理解数据结构的基本概念和原理。
2. 掌握C语言在数据结构中的应用和实现。
3. 培养动手实践能力和团队协作精神。
二、实验内容1. 线性表的实现与操作:顺序存储结构、链式存储结构。
2. 栈和队列的实现与操作。
3. 线性排序算法实现与分析。
4. 树与二叉树的实现与操作。
5. 图的实现与操作。
三、实验环境1. 编程语言:C语言。
2. 开发工具:Visual Studio、Code::Blocks等。
3. 操作系统:Windows、Linux或Mac OS。
四、实验步骤1. 实验准备:了解实验内容,阅读相关教材和资料,明确实验目标和任务。
2. 设计实验方案:根据实验内容,设计相应的数据结构和算法。
3. 编写实验代码:按照实验方案,用C语言编写代码。
4. 调试和测试:运行代码,检查功能是否符合预期,发现问题并及时修改。
五、实验评价1. 代码质量:代码结构清晰,注释详细,可读性强。
2. 功能实现:实验要求的功能全部实现,且运行稳定。
3. 算法效率:分析并优化算法,提高程序运行效率。
4. 实验报告:内容完整,包括实验目的、内容、步骤、总结等。
5. 团队协作:积极参与讨论,与团队成员共同解决问题。
六、实验一:线性表的实现与操作1. 实验目的:掌握顺序存储结构线性表的实现。
掌握链式存储结构线性表的实现。
熟悉线性表的基本操作,如插入、删除、查找等。
2. 实验内容:实现一个顺序存储结构线性表。
实现一个链式存储结构线性表。
实现线性表的插入、删除、查找等操作。
3. 实验步骤:设计顺序存储结构线性表的数据类型和操作函数。
实现链式存储结构线性表的数据类型和操作函数。
编写测试代码,验证线性表操作的正确性。
4. 实验评价:线性表结构设计合理,代码清晰。
能够正确实现线性表的基本操作。
测试代码全面,能够验证操作的正确性。
七、实验二:栈和队列的实现与操作1. 实验目的:理解栈和队列的基本概念。
掌握栈和队列的顺序存储结构实现。
《数据库原理与应用》实验报告
2.创建一个存储过程
四、实验结果与数据处理
实验6.1 创建并执行存储过程
1.用企业管理器创建并执行一存储过程
2.用SQL创建一存储过程
实验6.2 修改存储过程
1.用企业管理器修改存储过程Prc_Qsinf。
存储过程的定义如下:
2.用SQL修改存储过程Prc_Qsinf。
.
实验 6.3 删除存储过程
1.用企业管理器删除存储过程Pro_Qsinf;
2.用SQL删除存储过程Pro_Qscore。
实验6.4 T-SQL程序设计逻辑
1.计算1~100之间所有能被3整除的数的个数和总和。
2.求学生表中选取SNO,SEX,如果为“男”则输出“M”,如果为“女”则输出“F”
实验6.5 面向复杂的T-SQL程序设计
1.从教学数据库jxsk中查询所有同学选课成绩情况:姓名、课程名、成绩。
要求:凡成绩为空者输出“未考”、小于60分的输出“不及格”;60分至70分的输出“及格”;70分至80分的输出“中”;80分至90分的输出“良好”;90分至100分的输出“优秀”。
并且输出记录按下列要求排序:先按SNO升序,再按CNO号升序,最后按成绩降序。
2.现给教师增加工资的操作
实验6.6 使用游标1.定义一个游标
2.创建一个存储过程
五、分析与讨论
能够参照课本完成实验。
数据结构实验报告c语言版数据结构实验报告(C语言版)引言:数据结构是计算机科学中的重要概念,它关注如何在计算机中存储和组织数据以便有效地访问和操作。
本实验报告将介绍在C语言中实现的一些常见数据结构及其应用。
一、线性表线性表是最基本的数据结构之一,它是一种有序的数据元素的集合。
在C语言中,可以使用数组或链表来实现线性表。
数组具有固定大小的优点,但插入和删除操作较为复杂。
链表则可以动态地分配内存,但访问元素需要遍历整个链表。
二、栈和队列栈和队列是两种特殊的线性表。
栈是一种后进先出(LIFO)的数据结构,可以使用数组或链表实现。
常见的应用包括函数调用、表达式求值等。
队列是一种先进先出(FIFO)的数据结构,同样可以使用数组或链表实现。
它常用于任务调度、消息传递等场景。
三、树树是一种非线性的数据结构,它由节点和边组成。
树的每个节点可以有零个或多个子节点,其中一个节点被称为根节点。
常见的树结构包括二叉树、二叉搜索树、平衡二叉树等。
树的应用广泛,例如文件系统、数据库索引等。
四、图图是由节点和边组成的非线性数据结构,它可以用来表示各种实体之间的关系。
图可以是有向的或无向的,可以是带权重的或无权重的。
图的常见应用包括社交网络、路由算法等。
在C语言中,图通常使用邻接矩阵或邻接表来表示。
五、排序算法排序算法是数据结构中的经典问题之一。
常见的排序算法包括冒泡排序、插入排序、选择排序、快速排序、归并排序等。
每种排序算法都有其特点和适用场景,选择合适的排序算法可以提高程序的效率。
六、查找算法查找算法是在数据集中查找指定元素的过程。
常见的查找算法包括线性查找、二分查找、哈希查找等。
线性查找适用于无序数据集,而二分查找适用于有序数据集。
哈希查找通过散列函数将关键字映射到存储位置,可以快速定位元素。
七、实验总结通过本次实验,我们学习了C语言中常见的数据结构及其应用。
线性表、栈和队列是最基本的数据结构,树和图则提供了更灵活的数据组织方式。
数据结构(C语言版) 实验报告实验报告1·实验目的本实验的目的是通过使用C语言实现各种数据结构,包括链表、栈、队列和树等,以加深对这些数据结构的理解,并学习其基本操作和应用场景。
2·实验环境和工具●操作系统:Windows 10●开发工具:Code::Blocks●编程语言:C语言3·实验内容3·1 链表3·1·1 定义链表结点的结构体3·1·2 创建链表3·1·3 插入结点3·1·4 删除结点3·1·5 遍历链表3·1·6 查找链表中的某个结点3·2 栈3·2·1 定义栈的结构体3·2·2 初始化栈3·2·3 入栈操作3·2·4 出栈操作3·2·5 判断栈是否为空3·2·6 获取栈顶元素3·3 队列3·3·1 定义队列的结构体3·3·2 初始化队列3·3·3 入队操作3·3·4 出队操作3·3·5 判断队列是否为空3·3·6 获取队头元素3·4 树3·4·1 定义树的结构体3·4·2 创建树3·4·3 插入结点3·4·4 删除结点3·4·5 遍历树3·4·6 查找树中的某个结点4·实验结果通过实验,我们成功实现了链表、栈、队列和树的基本操作,并对其进行了测试,验证了其正确性和效果。
5·总结与讨论本次实验使我对数据结构有了更深的理解,通过实际编写代码,加深了对链表、栈、队列和树等数据结构的认识。
数据结构(C语言版) 实验报告数据结构(C语言版) 实验报告第一章引言本实验报告主要介绍了在C语言环境下进行数据结构实验的相关内容。
数据结构是计算机科学中最基础的一门课程,它主要涉及到如何将数据组织和存储以便高效地访问和操作。
本实验报告将按照以下章节进行详细介绍。
第二章实验目的本实验的主要目的是通过实践操作,加深对数据结构的理解,并运用C语言编写相应的数据结构代码。
第三章实验环境1.操作系统:________Windows 102.编程语言:________C语言3.开发工具:________Visual Studio Code第四章实验内容1.线性表1.1 顺序表的实现1.1.1 初始化线性表1.1.2 插入操作1.1.3 删除操作1.1.4 查找操作1.2 链表的实现1.2.1 单链表的创建和遍历1.2.2 单链表的插入和删除操作 1.2.3 单链表的反转1.3 栈1.3.1 栈的实现1.3.2 栈的应用1.4 队列1.4.1 队列的实现1.4.2 队列的应用2.树2.1 二叉树的实现2.1.1 二叉树的创建和遍历2.1.2 二叉树的查找操作2.1.3 二叉树的插入和删除操作2.2 平衡二叉树2.2.1 平衡二叉树的实现2.2.2 平衡二叉树的插入和删除操作 2.3 堆2.3.1 堆的实现2.3.2 堆的操作2.4 哈夫曼树2.4.1 哈夫曼树的构建2.4.2 哈夫曼编码和解码3.图3.1 图的表示方法3.1.1 邻接矩阵3.1.2 邻接表3.2 图的遍历算法3.2.1 深度优先搜索(DFS)3.2.2 广度优先搜索(BFS)3.3 最小树3.3.1 Kruskal算法3.3.2 Prim算法3.4 最短路径3.4.1 Dijkstra算法3.4.2 Floyd算法第五章实验结果本实验通过编写相关的数据结构代码和算法,成功实现了线性表、树和图的基本功能。
经测试,各功能模块能正常运行,并能给出正确的结果。
《数据结构》实验报告
实验序号:6 实验项目名称:树和二叉树的操作
1.#include <stdlib.h>
#include <stdio.h>
typedef int TElemType;
typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiNode, *Bitree;
DLR( Bitree root )
{ if (root !=NULL) { //非空二叉树
printf("%d",root->data); //访问D
DLR(root->lchild); //递归遍历左子树
DLR(root->rchild); //递归遍历右子树}
return(0);
}
LDR(Bitree root)
{ if(root !=NULL)
{
LDR(root->lchild);
printf("%d",root->data);
LDR(root->rchild);
}
return(0);}
LRD (Bitree root)
{ if(root !=NULL) {
LRD(root->lchild);
LRD(root->rchild);
printf("%d",root->data);
}
return(0);
}
Bitree root;//定义根结点
void insert_data(int x) /*生成/树*/
{
Bitree p,q,s;
s=(Bitree)malloc(sizeof(BiNode)); //创建结点
s->data=x; //结点赋值
s->lchild=NULL;
s->rchild=NULL;
if(!root)
{
root=s;
}
else
{
p=root;
while(p) /*如何接入二叉排序树的适当位置*/
{
q=p;
if(p->data==x) //相同结点不能重复插入
{
printf("data already exist! \n");
return;
}
else if(x<p->data)
p=p->lchild;
else
p=p->rchild;
}
if(x<q->data)
q->lchild=s;
else
q->rchild=s;
}
}
void main() /*先生成二叉排序树*/
{
int i=1,x; //i记录结点个数,x存放结点值
root=NULL; /*千万别忘了赋初值给root!*/
printf("请输入数据,-9999表示输入结束\n");
do
{
printf("please input data %d:",i);
i++;
scanf("%d",&x); /*从键盘采集数据,以-9999表示输入结束*/
if(x==-9999){
printf("\nNow output data value:\n");
}
else
insert_data(x); /*调用插入数据元素的函数*/
}while(x!=-9999);
printf("\nDLR");
DLR(root);
printf("\nLDR");
LDR(root);
printf("\nLRD");
LRD(root);
}
2.
#include <stdlib.h>
#include <stdio.h>
typedef int TElemType;
typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiNode, *Bitree;
Bitree root;//定义根结点
int CountLeaf (Bitree root)
{ //返回指针T所指二叉树中所有叶子结点个数
int m,n;
if (!root ) return 0;
if (!root->lchild && !root->rchild) return 1;
else {
m = CountLeaf( root->lchild); n = CountLeaf( root->rchild);
return (m+n);
} //else
} // CountLeaf
void insert_data(int x) /*生成/树*/
{
Bitree p,q,s;
s=(Bitree)malloc(sizeof(BiNode)); //创建结点
s->data=x; //结点赋值
s->lchild=NULL;
s->rchild=NULL;
if(!root)
{
root=s;
}
else
{
p=root;
while(p) /*如何接入二叉排序树的适当位置*/
{
q=p;
if(p->data==x) //相同结点不能重复插入
{
printf("data already exist! \n");
return;
}
else if(x<p->data)
p=p->lchild;
else
p=p->rchild;
}
if(x<q->data)
q->lchild=s;
else
q->rchild=s;
}
}
void main() /*先生成二叉排序树*/
{
int i=1,x; //i记录结点个数,x存放结点值
int sum;
root=NULL; /*千万别忘了赋初值给root!*/
printf("请输入数据,-9999表示输入结束\n");
do
{
printf("please input data %d:",i);
i++;
scanf("%d",&x); /*从键盘采集数据,以-9999表示输入结束*/
if(x==-9999){
printf("\nNow output data value:\n");
}
else
insert_data(x); /*调用插入数据元素的函数*/
}while(x!=-9999);
printf(" \n叶节点个数=");
sum=CountLeaf (root);
printf("%d\n",sum);
}【下载本文档,可以自由复制内容或自由编辑修改内容,更多精彩文章,期待你的好评和关注,我将一如既往为您服务】。