C语言与数据结构实验指导(完整版)
(完整版)数据结构(C语言版)实验报告
数据结构(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语言还被广泛应用于嵌入式系统、游戏开发、网络编程等领域。
因此,掌握C语言对于计算机科学专业的学生来说是非常重要的。
二、数据结构的概念和分类数据结构是计算机科学中研究数据组织和存储方式的一门学科。
它涉及到如何将数据以某种特定的方式组织起来,以便于高效地访问和操作。
数据结构可以分为线性结构、树形结构和图形结构三大类。
1. 线性结构线性结构是最简单的数据结构之一,它的特点是数据元素之间存在一对一的关系。
常见的线性结构有数组、链表和栈等。
其中,数组是一种连续存储的数据结构,具有随机访问的特点;链表是一种离散存储的数据结构,通过指针将各个节点连接起来;栈是一种特殊的线性结构,具有后进先出(LIFO)的特点。
2. 树形结构树形结构是一种非线性的数据结构,它的特点是数据元素之间存在一对多的关系。
常见的树形结构有二叉树、堆和哈夫曼树等。
其中,二叉树是一种每个节点最多只有两个子节点的树形结构;堆是一种特殊的二叉树,具有一定的排序规则;哈夫曼树是一种用于数据压缩的树形结构。
3. 图形结构图形结构是一种更加复杂的非线性数据结构,它的特点是数据元素之间存在多对多的关系。
数据结构C语言版实验报告完整版
数据结构C语言版实验报告HEN system office room 【HEN16H-HENS2AHENS8Q8-HENH1688】数据结构(C语言版) 实验报告专业:计算机科学与技术、软件工程学号:_______________________班级:_________软件二班______________姓名:________朱海霞______________指导教师:___刘遵仁________________青岛大学信息工程学院2013年10月实验1实验题目:顺序存储结构线性表的插入和删除实验目的:了解和掌握线性表的逻辑结构和顺序存储结构,掌握线性表的基本算法及相关的时间性能分析。
实验要求:建立一个数据域定义为整数类型的线性表,在表中允许有重复的数据;根据输入的数据,先找到相应的存储单元,后删除之。
实验主要步骤:1、分析、理解给出的示例程序。
2、调试程序,并设计输入一组数据(3,-5,6,8,2,-5,4,7,-9),测试程序的如下功能:根据输入的数据,找到相应的存储单元并删除,显示表中所有的数据。
程序代码:#include<>#include<>#define OK 1#define ERROR 0#define OVERFLOW -2#define LIST_INIT_SIZE 100#define LISTINCREMENT 10typedef struct{int* elem;int length;int listsize;}Sqlist;int InitList_Sq(Sqlist &L){=(int*)malloc(LIST_INIT_SIZE*sizeof(int));if(! return -1;=0;=LIST_INIT_SIZE;return OK;}int ListInsert_Sq(Sqlist&L,int i,int e){if(i<1||i>+1) return ERROR;if=={int *newbase;newbase=(int*)realloc,+LISTINCREMENT)*sizeof(int));if(!newbase) return -1;=newbase;+=LISTINCREMENT;}int *p,*q;q=&[i-1]);for(p=&[]);p>=q;--p)*(p+1)=*p;*q=e;++;return OK;}int ListDelete_Sq(Sqlist &L,int i,int e){int *p,*q;if(i<1||i>return ERROR;p=&[i-1]);e=*p;q=+;for(++p;p<=q;++p)*(p-1)=*p;;return OK;}int main(){Sqlist L;InitList_Sq(L);ertex=a; irstedge=NULL; irstedge;G->adjlist[i].firstedge=s; irstedge;G->adjlist[j].firstedge=s; //将新结点*S插入顶点Vj的边表头部}}//=========定义标志向量,为全局变量=======typedef enum{FALSE,TRUE} Boolean;Boolean visited[MaxVertexNum];//========DFS:深度优先遍历的递归算法======void DFSM(ALGraph *G,int i){ //以Vi为出发点对邻接链表表示的图G进行DFS搜索给出你的编码//==========BFS:广度优先遍历=========void BFS(ALGraph *G,int k){ //以Vk为源点对用邻接链表表示的图G进行广度优先搜索给出你的编码//==========主函数===========void main(){int i;ALGraph *G;G=(ALGraph *)malloc(sizeof(ALGraph));CreatALGraph(G);printf("Print Graph DFS: ");DFS(G);printf("\n");printf("Print Graph BFS: "); BFS(G,3);printf("\n");}实验结果:1.邻接矩阵作为存储结构2.邻接链表作为存储结构心得体会:实验6实验题目:二分查找算法的实现实验目的:掌握二分查找法的工作原理及应用过程,利用其工作原理完成实验题目中的内容。
数 据 结 构(C语言版) 实 验 指 导包含参考讲述
数据结构(C语言版)实验指导预备实验C语言的函数、数组、指针和结构体知识一、实验目的1、复习C语言中函数、数组、指针、结构体与共用体等的概念。
2、熟悉利用C语言进行程序设计的一般方法。
二、实验内容1、调试程序:输出100以内所有的素数(用函数实现)。
#include<stdio.h>int isprime(int n){ /*判断一个数是否为素数*/int m;for(m=2;m*m<=n;m++)if(n%m==0) return 0;return 1;}int main(){ /*输出100以内所有素数*/int i; printf("\n");for(i=2;i<100;i++)if(isprime(i)==1) printf("%4d",i);return 0;}运行结果:2、调试程序:对一维数组中的元素进行逆序排列。
#include<stdio.h>#define N 10int main(){int a[N]={0,1,2,3,4,5,6,7,8,9},i,temp;printf("\nthe original Array is:\n ");for(i=0;i<N;i++)printf("%4d",a[i]);for(i=0;i<N/2;i++){ /*交换数组元素使之逆序*/temp=a[i];a[i]=a[N-i-1];a[N-i-1]=temp;}printf("\nthe changed Array is:\n");for(i=0;i<N;i++)printf("%4d",a[i]);return 0;}运行结果:3、调试程序:在二维数组中,若某一位置上的元素在该行中最大,而在该列中最小,则该元素即为该二维数组的一个鞍点。
数据结构实验指导书(C版)
数据结构实验指导书(C语言版)2017年9月目录1、顺序表的实现 (1)2、链栈的实现 (3)3、前序遍历二叉树 (5)4、图的深度优先遍历算法 (7)5、散列查找 (9)1、顺序表的实现1. 实验目的⑴掌握线性表的顺序存储结构;⑵验证顺序表及其基本操作的实现;⑶理解算法与程序的关系,能够将顺序表算法转换为对应的程序。
2. 实验内容⑴建立含有若干个元素的顺序表;⑵对已建立的顺序表实现插入、删除、查找等基本操作。
3. 实现提示定义顺序表的数据类型——顺序表结构体SeqList,在SeqList基础上实现题目要求的插入、删除、查找等基本操作,为便于查看操作结果,设计一个输出函数依次输出顺序表的元素。
简单起见,本实验假定线性表的数据元素为int型,要求学生:(1)将实验程序调试通过后,用模板类改写;(2)加入求线性表的长度等基本操作;(3)重新给定测试数据,验证抛出异常机制。
4. 实验程序在编程环境下新建一个工程“顺序表验证实验”,并新建相应文件,文件包括顺序表结构体SeqList的定义,范例程序如下:#define MaxSize 100 /*假设顺序表最多存放100个元素*/typedef int DataType; /*定义线性表的数据类型,假设为int型*/typedef struct{DataType data[MaxSize]; /*存放数据元素的数组*/int length; /*线性表的长度*/} SeqList;文件包括建立顺序表、遍历顺序表、按值查找、插入操作、删除操作成员函数的定义,范例程序如下:int CreatList(SeqList *L, DataType a[ ], int n){if (n > MaxSize) {printf("顺序表的空间不够,无法建立顺序表\n"); return 0;} for (int i = 0; i < n; i++)L->data[i] = a[i];L->length = n;return 1;}void PrintList(SeqList *L){for (int i = 0; i < L->length; i++)printf("%d ", L->data[i]); /*输出线性表的元素值,假设为int型*/ }int Locate(SeqList *L, DataType x){for (int i = 0; i < L->length; i++)if (L->data[i] == x) return i+1; /*返回序号*/return 0; /*退出循环,说明查找失败*/ }int Insert(SeqList *L, int i, DataType x){if (L->length >= MaxSize) {printf("上溢错误,插入失败\n"); return 0;} if (i < 1 || i > L->length + 1) {printf("位置错误,插入失败\n"); return 0;} for (int j = L->length; j >= i; j--) /*j表示元素序号*/L->data[j] = L->data[j - 1];L->data[i - 1] = x;L->length++;return 1;}int Delete(SeqList *L, int i, DataType *ptr){if (L->length == 0) {printf("下溢错误,删除失败\n"); return 0;} if (i < 1 || i > L->length) {printf("位置错误,删除失败\n"); return 0;} *ptr = L->data[i - 1]; /*取出位置i的元素*/for (int j = i; j < L->length; j++) /* j表示元素所在数组下标*/L->data[j - 1] = L->data[j];L->length--;return 1;}在定义了顺序表的存储结构SeqList并实现了基本操作后,程序中就可以使用SeqList 类型来定义变量,可以调用实现基本操作的函数来完成相应的功能。
数据结构c语言版实验教案
数据结构C语言版实验教案一、实验目的1. 理解数据结构的基本概念和原理。
2. 掌握C语言的基本语法和编程技巧。
3. 培养实际操作能力和问题解决能力。
二、实验内容1. 线性表的实现与操作。
2. 栈和队列的实现与操作。
3. 链表的实现与操作。
4. 树和图的实现与操作。
5. 排序和查找算法的实现与优化。
三、实验环境1. 操作系统:Windows或Linux。
2. 编程语言:C语言。
3. 编译器:GCC或Clang。
4. 开发工具:Visual Studio或Code::Blocks。
四、实验步骤1. 了解实验要求,阅读相关教材和资料。
2. 分析实验问题,设计实验方案。
3. 编写实验代码,进行调试和测试。
4. 分析实验结果,总结实验经验和教训。
5. 完成实验报告,提交实验代码和报告。
五、实验评价1. 代码规范性和可读性。
2. 实验问题的解决能力和创新性。
4. 实验操作的熟练程度和团队合作能力。
六、线性表的实现与操作1. 实验目的:学习线性表的基本概念。
掌握线性表的顺序存储结构和存储结构。
学会实现线性表的基本操作,如插入、删除、查找和打印。
2. 实验内容:实现一个简单的线性表。
实现线性表的插入和删除操作。
实现线性表的查找和打印操作。
3. 实验环境:同上。
4. 实验步骤:设计一个线性表的数据结构。
编写实现线性表操作的函数。
编写测试线性表操作的程序。
调试并运行程序,验证操作的正确性。
5. 实验评价:同上。
七、栈和队列的实现与操作1. 实验目的:理解栈和队列的基本概念和特点。
掌握栈和队列的顺序存储结构和存储结构。
学会实现栈和队列的基本操作,如入栈、出栈、入队、出队等。
2. 实验内容:实现一个简单的栈。
实现一个简单的队列。
实现栈和队列的综合应用,如数制转换等。
3. 实验环境:同上。
4. 实验步骤:设计栈和队列的数据结构。
编写实现栈和队列操作的函数。
编写测试栈和队列操作的程序。
调试并运行程序,验证操作的正确性。
5. 实验评价:同上。
数据结构实验报告c语言版
数据结构实验报告c语言版数据结构实验报告(C语言版)引言:数据结构是计算机科学中的重要概念,它关注如何在计算机中存储和组织数据以便有效地访问和操作。
本实验报告将介绍在C语言中实现的一些常见数据结构及其应用。
一、线性表线性表是最基本的数据结构之一,它是一种有序的数据元素的集合。
在C语言中,可以使用数组或链表来实现线性表。
数组具有固定大小的优点,但插入和删除操作较为复杂。
链表则可以动态地分配内存,但访问元素需要遍历整个链表。
二、栈和队列栈和队列是两种特殊的线性表。
栈是一种后进先出(LIFO)的数据结构,可以使用数组或链表实现。
常见的应用包括函数调用、表达式求值等。
队列是一种先进先出(FIFO)的数据结构,同样可以使用数组或链表实现。
它常用于任务调度、消息传递等场景。
三、树树是一种非线性的数据结构,它由节点和边组成。
树的每个节点可以有零个或多个子节点,其中一个节点被称为根节点。
常见的树结构包括二叉树、二叉搜索树、平衡二叉树等。
树的应用广泛,例如文件系统、数据库索引等。
四、图图是由节点和边组成的非线性数据结构,它可以用来表示各种实体之间的关系。
图可以是有向的或无向的,可以是带权重的或无权重的。
图的常见应用包括社交网络、路由算法等。
在C语言中,图通常使用邻接矩阵或邻接表来表示。
五、排序算法排序算法是数据结构中的经典问题之一。
常见的排序算法包括冒泡排序、插入排序、选择排序、快速排序、归并排序等。
每种排序算法都有其特点和适用场景,选择合适的排序算法可以提高程序的效率。
六、查找算法查找算法是在数据集中查找指定元素的过程。
常见的查找算法包括线性查找、二分查找、哈希查找等。
线性查找适用于无序数据集,而二分查找适用于有序数据集。
哈希查找通过散列函数将关键字映射到存储位置,可以快速定位元素。
七、实验总结通过本次实验,我们学习了C语言中常见的数据结构及其应用。
线性表、栈和队列是最基本的数据结构,树和图则提供了更灵活的数据组织方式。
数据结构实验C语言版
数据结构实验C语言版数据结构实验C语言版第一章实验目的1.熟悉C语言编程环境。
2.掌握数据结构中常用的线性结构和非线性结构。
3.学习使用C语言实现常见的数据结构操作。
4.培养解决实际问题的思维能力。
第二章实验内容1.线性表1.1 顺序表1.1.1 初始化顺序表1.1.2 在顺序表中插入元素1.1.3 删除顺序表中的元素1.1.4 查找顺序表中的元素1.1.5 显示顺序表中的元素1.2 链表1.2.1 初始化链表1.2.2 在链表中插入节点 1.2.3 删除链表中的节点 1.2.4 查找链表中的节点1.2.5 显示链表中的节点2.栈和队列2.1 栈2.1.1 初始化栈2.1.2 入栈操作2.1.3 出栈操作2.1.4 获取栈顶元素2.1.5 判断栈是否为空 2.2 队列2.2.1 初始化队列2.2.2 入队操作2.2.3 出队操作2.2.4 获取队头元素2.2.5 判断队列是否为空3.树和图3.1 二叉树3.1.1 创建二叉树3.1.2 前序遍历二叉树3.1.3 中序遍历二叉树3.1.4 后序遍历二叉树3.1.5 层序遍历二叉树3.2 图3.2.1 创建图3.2.2 深度优先搜索遍历图3.2.3 广度优先搜索遍历图3.2.4 最短路径算法3.2.5 最小树算法第三章实验步骤1.确定实验目标和需求。
2.根据实验内容,编写C语言程序。
3.调试和运行程序,验证程序的正确性。
4.根据实验结果进行分析和总结。
第四章实验结果与分析1.线性表的操作结果分析。
2.栈和队列的操作结果分析。
3.树和图的操作结果分析。
附件:________源代码文件法律名词及注释:________1.版权:________指对作品享有的本质的、来自著作权法的权益。
2.许可证:________指权利人向他人授予合法使用作品的权利的法律文件。
3.商标:________指与一种商品及其生产者和经销者有关的特定名称、标识或符号。
4.注册商标:________指在商标局进行了合法登记并取得专有权的商标。
数据结构实验指导书C语言—连接表的操作
《数据结构》实验参考资料目录一、课程编号 (2)二、课程类型 (2)三、本课程的地位、作用与任务 (2)四、课程基本要求 (2)五、实验安排 (2)1、数据结构实验机器与环境 (2)(一)计算机的硬件配置 (2)(二)计算机的软件配置 (2)2、VisualC++6.0开发C语言程序 (2)(一)进入C++工作环境 (2)(二)编译、运行C程序 (2)3、上机实验 (6)实验1:线性表操作 (6)实验2:单链表操作...................................................................... 错误!未定义书签。
实验3:二叉树操作...................................................................... 错误!未定义书签。
实验4:图的运算.......................................................................... 错误!未定义书签。
数据结构(C语言版)实验一、课程编号(本科)二、课程类型课程类型:必修课。
适用专业:计算机大类各专业实验学时:16学时三、本课程的地位、作用与任务《数据结构》在计算机科学中是一门综合性的专业基础课。
数据结构的研究不仅涉及到计算机硬件的研究范围,而且和计算机软件的研究有密切的关系,可以认为数据结构是介于数学、计算机硬件和计算机软件三者之间的一门核心课程。
在计算机科学中,数据结构不仅是一般程序设计的基础,而且是设计和实现编译程序、操作系统、数据库系统及其它系统程序和大型应用程序的重要基础,它的主要任务是讨论各种数据结构的逻辑结构,存储结构及有关操作的算法。
目的是使学生学会分析研究计算机加工的数据结构的特性,以便为应用涉及的数据选择适当的逻辑结构、存储结构及相应的算法,并初步了解对算法的时间分析和空间分析技术。
数据结构实验C语言版
南阳理工学院数据结构(C语言版)上机实验指导书软件学院·软件工程目录实验1 线性表应用实验2 栈和队列的应用 (14)实验3 线性表应用 (27)实验4 图论及其应用 (46)实验5 查找实验6 排序 (64)实验1 线性表应用一、实验目的3,了解和掌握线性表顺序存储和链式存储在计算机中的表示,基本操做在计算机中的实2,能够利用线性表结构对实际问题进行分析建模,利用计算机求解。
1,能够从时间和空间复杂度的角度综合比较线性表两种存储结构的不同特点及其适用场合。
二、实验内容及步骤1、利用程序设计语言分别实现顺序表和链表的抽象数据类型。
2、掌握程序分文件(头文件和实现文件)书写的方式。
3、分别用顺序表和链表实现课本算法 2.2:合并两个非递减有序序列,并对其时间性能做出分析。
三、实验步骤与调试过程以线性表来描述一元多项式,储存结构采用单链表,每个结点储存的多项式中某一项的系数和指数,建立单链表时指数高的结点列于指数低的结点之后,即线性表的元素按指数递增有序排列。
四、实验结果五、疑难小结当线性表的长度变化较大,难以估计其存储规模,另外对线性表频繁进行插入和删除操作时,则采用链表作为存储结构可能会更好一些。
在实际应用中应该考虑以下因素:(1)应有利于运算的实现;(2)应有利于数据的特性;(3)应有利于软件环境。
六、主要算法和程序清单顺序表的非递减数列合并#include<stdio.h> /*包含输入输出头文件*/#define ListSize 100typedef int DataType;typedef struct{DataType list[ListSize];int length;}SeqList;void InitList(SeqList *L)/*将线性表初始化为空的线性表只需要把线性表的长度length置为0*/{L->length=0; /*把线性表的长度置为0*/}int ListEmpty(SeqList L)/*判断线性表是否为空,线性表为空返回1,否则返回0*/{if(L.length==0) /*判断线性表的长度是否为9*/return 1; /*当线性表为空时,返回1;否则返回0*/elsereturn 0;}int GetElem(SeqList L,int i,DataType *e)/*查找线性表中第i个元素。
数据结构2实验指导书
《数据结构2—C语言版》实验指导书(第3版)姓名:学号:班级:商务班指导教师:石林山东建筑大学商学院电子商务教研室2010年3月实验1 串一、实验目的:掌握串的存储结构,以及对其的各种操作。
二、实验内容:实现串的模式匹配算法。
三、实验步骤:1、编程:参考程序。
int Index_KMP(SString S, SString T, int *next){ int i,j;i=1; j=1;while (i<=S[0] && j<=T[0]){if (j==0 || S[i]==T[j]){++i;++j;}else j=next[j];}if (j>T[0]) return i-T[0];else return 0;}2、调试所编辑的程序。
3、运行结果。
4、存盘。
四、注意事项:1、next函数的实现void get_next(SString S, int *next){int i,j;i=1; next[1]=0; j=0;while (i<S[0]){if (j==0 || S[i]==S[j]) {++i; ++j; next[i]=j;}else j=next[j];}}2、串结构的操作特点。
3、掌握串插入、求子串操作。
五、思考题1、描述串的快速模式匹配的算法。
实验2 二叉树一、实验目的:掌握二叉树的链式存储结构,以及对其的各种操作。
二、实验内容:实现二叉树的建立、遍历算法。
三、实验步骤:1、编程:参考程序。
节点结构:Typedef struct BiTNode{int data;Struct BiTNode *lchild, *rchild;}BiTNode, * BiTree;先序遍历:BiTree CreatBiTree(){ BiTree T;scanf(&ch);if(ch= =¢ ¢) T=NULL;else {T=(BiTNode*)malloc(sizeof((BiTNode));T->data=ch; /*生成根结点*/T->lchild= CreatBiTree( ); /*构造左子树*/T->rchild= CreatBiTree(); /*构造右子树*/}return (T) ;}2、调试所编辑的程序。
C语言与数据结构实验指导(完整版)
Harbin Institute of TechnologyC语言与数据结构实验指导书刘梅索莹田文龙哈工大电子与信息工程学院电子工程系实验1 实验平台一、实验目的1.掌握Microsoft Visual C++ 6.0集成环境的使用方法。
2.掌握C程序在Microsoft Visual C++ 6.0开发环境中的编辑、编译、链接和运行全过程二、实验内容1)启动Microsoft Visual C++ 6.0开发环境双击桌面应用程序图标或云兄“开始”菜单程序组中的Microsoft Visual C++ 6.0应用程序,启动VC++,如图所示图1.1 VC++初始界面2)建立C源程序文件方法1:单机工具栏的“新建文本文件”按钮,打开文本文件编辑界面如下图所示图1.2 文本文件编辑界面方法2:执行“文件”->“新建”命令,在“文件”选项卡下选择C++ Source File 文件类型,然后输入C源程序文件名和保存文职,如图所示,然后单击“确定”按钮,打开源程序文件编辑界面,如图1.4所示。
注意:输入C源程序文件名时必须带上扩展“.c”,否则默认创建的是扩展名为“.cpp”的C++文件。
3)编辑源文件方法1:在如图1.2所示的文本文件编辑界面中输入源程序代码,如图1.5所示。
方法2:在如图1.4所示的C源程序文件编辑界面中编辑源程序代码,如图1.6所示。
图1.3 新建文件图1.4 C源程序文件编辑界面图1.5 文本文件编辑界面编辑源文件图1.6 C源程序编辑界面编辑源文件4)保存源文件源文件编辑结束后,执行“文件”->“保存”命令保存文件,文本文件编辑界面中编辑的源文件保存时必须在文件名后加上扩展名“.c”,否则保存的是扩展名为txt的文本文件,不能编译运行。
5)组件文件执行“组建”->“组建”命令或直接按F7功能键或单机工具栏Build按钮,可以对源文件进行编译、链接而不运行改程序。
c语言与数据结构实验指导完整版
定”按钮,打开源程序文件编辑界面,如图1.4所示。
注意:输入C源程序文件名时必须带上扩展“.c”,否则默认创建的是扩展
名为“.cpp”的C++文件。
3)编辑源文件
方法1:在如图1.2所示的文本文件编辑界面中输入源程序代码,如图1.5所示。
a=getchar();
c=getchar();
prin tf("The character is:%c\ n\n",a);
prin tf("2 .In put a character:' n");
sca nf("%c",&b);
prin tf("The character is:");
putchar(b);
(4)根据实际情况确定各个变量在输出时的宽度和小数位数。
2)参考程序
#include“stdio.h”
#include“math.h”
mai n()
{
float a,b,c,s,area;
printf(“In put a,b,c:\n”);
scanf(“%f ,%f,%f”,&a,&b,&c);
方法2:在如图1.4所示的C源程序文件编辑界面中编辑源程序代码,如图1.6
所示。
图1.3新建文件
图1.4 C源程序文件编辑界面
• li<Virri*l
.fnfx
T-fctl i;M|11■■血 扇‘紙Tffkti唱帝,THij] 1!口 叩W i|,7
a|c«B0i-匸譚百 寰「P*
图1.5文本文件编辑界面编辑源文件
《数据结构》实验辅导(关于C语言及实验步骤)
《数据结构》实验辅导软件学院胡忠望一、C语言基本知识(一)基本输入和输出(二)函数与参数传递(三)结构体及运用二、实验的正确步骤2011年3月一、C语言基本知识数据结构不仅具有较强的理论性,更具有较强的实践性。
如何选择描述数据结构和算法的语言是十分重要的问题。
因此,有必要将数据结构所必须使用的C语言语法在此做简单介绍。
根据多年教学实践,学生上机实验时遇到的主要问题是,不能正确的输入数据,结构体概念陌生,函数的传址调用概念不清,指针与链表难以理解。
限于篇幅,这里仅对前三个问题加以介绍。
一、基本输入和输出对于重要的数据结构算法,均要求进行上机实验。
而上机实践中离不开数据的输入/输出。
看起来简单的输入/输出,往往是上机实验最容易出错的地方,尤其是输入。
对于一个算法程序,如果数据不能正确输入,算法设计得再好也无法正常运行。
1.输入C语言的输入是由系统提供的scanf()等函数实现,在程序的首部一般要求写入:# include <stdio.h>因为标准输入/输出函数都存在于头文件stdio.h 之中,现将其包含进来方可使用这些常用的输入/输出函数。
有的系统允许不使用上述包含语句,可以直接使用标准输入/输出函数。
函数scanf()的功能很丰富,输入格式也是多种多样,大家熟悉,不做详细介绍。
在使用中需要注意以下几个问题。
(1)一条scanf()语句有多个变量、并且都是数值型(int, float, double)时,在输入数据时应该在一行之内键入多个数据,数据之间空格分隔。
例如:int n;float x;scanf (“%d %f ” , &n, &x);正确的输入应是:整数空格实数回车。
例如:就是在两个数据之间使用空格键为分隔符,最后打回车键。
如果语句中在%d 和%f 之间有一个逗号:scanf (“%d ,%f ” , &n, &x);正确的输入应是:整数逗号实数回车。
《数据结构》实验指导书(C语言版)(浦江学院)
实验1: 顺序表的操作实验一、实验名称和性质二、实验目的1.掌握线性表的顺序存储结构的表示和实现方法。
2.掌握顺序表基本操作的算法实现。
3.了解顺序表的应用。
三、实验内容1.建立顺序表。
2.在顺序表上实现插入、删除和查找操作(验证性内容)。
3.删除有序顺序表中的重复元素(设计性内容)。
四、实验的软硬件环境要求硬件环境要求:PC机(单机)使用的软件名称、版本号:Windows环境下的VC++6.0五、知识准备前期要求熟练掌握了C语言的编程规则、方法和顺序表的基本操作算法。
六、验证性实验1.实验要求编程实现如下功能:(1)根据输入顺序表的长度n和各个数据元素值建立一个顺序表,并输出顺序表中各元素值,观察输入的内容与输出的内容是否一致。
(2)在顺序表的第i个元素之前插入一个值为x的元素,并输出插入后的顺序表中各元素值。
(3)删除顺序表中第i个元素,并输出删除后的顺序表中各元素值。
(4)在顺序表中查找值为e的数据元素,如果查找成功,则显示“查找成功”和该元素在顺序表中的位置,否则显示“查找失败”。
2. 实验相关原理线性表的顺序存储结构称为顺序表,顺序表的存储结构描述为:#define MAXLEN 30 /*线性表的最大长度*/typedef struct{Elemtype elem[MAXLEN]; /*顺序表中存放元素的数组,其中elemtype为抽象数据类型,在程序具体实现时可以用任意类型代替*/int length; /*顺序表的长度,即元素个数*/}Sqlist; /*顺序表的类型*/【核心算法提示】(1)顺序表插入操作的基本步骤:要在顺序表中的第i个数据元素之前插入一个数据元素x,首先要判断插入位置i是否合法,假设线性表的表长为n,则i的合法值范围:1≤i ≤n+1,若是合法位置,就再判断顺序表是否满,如果满,则增加空间或结束操作,如果不满,则将第i个数据元素及其之后的所有数据元素都后移一个位置,此时第i个位置已经腾空,再将待插入的数据元素x插入到该位置上,最后将线性表的表长增加1。
数据结构实验C语言版
数据结构实验C语言版数据结构实验C语言版文档一、实验目的本实验旨在通过实践操作,加深对C语言中数据结构的理解,掌握常用数据结构的实现方法,提高编程能力。
二、实验内容本实验共包含以下几个章节:1.线性表1.1 顺序表的实现1.2 链表的实现1.3 环形链表的实现2.栈与队列2.1 栈的实现2.2 队列的实现3.树与图3.1 二叉树的实现与遍历3.2 图的实现与遍历4.排序与查找4.1 冒泡排序4.2 快速排序4.3 二分查找5.其他常用数据结构5.1 哈希表5.2 AVL树5.3 并查集三、实验步骤1.线性表1.1 顺序表的实现- 定义顺序表结构体 - 初始化顺序表- 插入元素- 删除元素- 查找元素1.2 链表的实现- 定义链表结构体- 初始化链表- 插入节点- 删除节点- 查找节点1.3 环形链表的实现- 定义环形链表结构体 - 初始化环形链表- 插入节点- 删除节点- 查找节点2.栈与队列2.1 栈的实现- 定义栈结构体- 初始化栈- 入栈操作- 出栈操作- 获取栈顶元素2.2 队列的实现- 定义队列结构体- 初始化队列- 入队操作- 出队操作- 获取队首元素3.树与图3.1 二叉树的实现与遍历 - 定义二叉树结构体 - 创建二叉树- 先序遍历- 中序遍历- 后序遍历3.2 图的实现与遍历- 定义图结构体- 创建图- 广度优先搜索- 深度优先搜索4.排序与查找4.1 冒泡排序- 实现冒泡排序算法- 对数组进行排序4.2 快速排序- 实现快速排序算法- 对数组进行排序4.3 二分查找- 实现二分查找算法- 在有序数组中查找指定元素5.其他常用数据结构5.1 哈希表- 定义哈希表结构体- 初始化哈希表- 插入元素- 删除元素- 查找元素5.2 AVL树- 定义AVL树结构体- 插入节点- 删除节点- 查找节点5.3 并查集- 定义并查集结构体- 初始化并查集- 合并集合- 查找根节点四、附件本文档未涉及附件。
数据结构c语言版实验教案
数据结构C语言版实验教案第一章:实验环境搭建1.1 实验目的(1)熟悉C语言编程环境;(2)了解并能使用常用的数据结构库。
1.2 实验内容(1)安装C语言编程环境;(2)配置数据结构库;(3)编写一个简单的C程序。
1.3 实验步骤(1)安装C语言编程环境,如Code::Blocks、Visual Studio等;(2)并配置数据结构库,如链表、栈、队列、二叉树等;(3)编写一个简单的C程序,如“Hello World”程序。
1.4 实验要求(1)能够独立完成实验环境的搭建;(2)能够熟练使用数据结构库;(3)能够编写简单的C程序。
第二章:线性表的实现与操作2.1 实验目的(1)了解线性表的基本概念;(2)掌握线性表的实现方法;(3)熟悉线性表的基本操作。
2.2 实验内容(1)实现一个简单的线性表;(2)掌握线性表的插入、删除、查找等基本操作;(3)分析线性表的时间复杂度。
2.3 实验步骤(1)实现一个简单的线性表,如数组或链表;(2)编写线性表的插入、删除、查找等基本操作的函数;(3)测试线性表的操作函数,分析时间复杂度。
2.4 实验要求(1)能够理解线性表的基本概念;(2)能够掌握线性表的实现方法;(3)能够熟练进行线性表的基本操作;(4)能够分析线性表的时间复杂度。
第三章:栈与队列的实现与操作3.1 实验目的(1)了解栈与队列的基本概念;(2)掌握栈与队列的实现方法;(3)熟悉栈与队列的基本操作。
3.2 实验内容(1)实现一个简单的栈;(2)实现一个简单的队列;(3)掌握栈与队列的插入、删除、查找等基本操作;(4)分析栈与队列的时间复杂度。
3.3 实验步骤(1)实现一个简单的栈,如数组或链表;(2)实现一个简单的队列,如数组或链表;(3)编写栈与队列的插入、删除、查找等基本操作的函数;(4)测试栈与队列的操作函数,分析时间复杂度。
3.4 实验要求(1)能够理解栈与队列的基本概念;(2)能够掌握栈与队列的实现方法;(3)能够熟练进行栈与队列的基本操作;(4)能够分析栈与队列的时间复杂度。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Harbin Institute of TechnologyC语言与数据结构实验指导书刘梅索莹田文龙哈工大电子与信息工程学院电子工程系实验1 实验平台一、实验目的1.掌握Microsoft Visual C++ 6.0集成环境的使用方法。
2.掌握C程序在Microsoft Visual C++ 6.0开发环境中的编辑、编译、链接和运行全过程二、实验内容1)启动Microsoft Visual C++ 6.0开发环境双击桌面应用程序图标或云兄“开始”菜单程序组中的Microsoft Visual C++ 6.0应用程序,启动VC++,如图所示图1.1 VC++初始界面2)建立C源程序文件方法1:单机工具栏的“新建文本文件”按钮,打开文本文件编辑界面如下图所示图1.2 文本文件编辑界面方法2:执行“文件”->“新建”命令,在“文件”选项卡下选择C++ Source File 文件类型,然后输入C源程序文件名和保存文职,如图所示,然后单击“确定”按钮,打开源程序文件编辑界面,如图1.4所示。
注意:输入C源程序文件名时必须带上扩展“.c”,否则默认创建的是扩展名为“.cpp”的C++文件。
3)编辑源文件方法1:在如图1.2所示的文本文件编辑界面中输入源程序代码,如图1.5所示。
方法2:在如图1.4所示的C源程序文件编辑界面中编辑源程序代码,如图1.6所示。
图1.3 新建文件图1.4 C源程序文件编辑界面图1.5 文本文件编辑界面编辑源文件图1.6 C源程序编辑界面编辑源文件4)保存源文件源文件编辑结束后,执行“文件”->“保存”命令保存文件,文本文件编辑界面中编辑的源文件保存时必须在文件名后加上扩展名“.c”,否则保存的是扩展名为txt的文本文件,不能编译运行。
5)组件文件执行“组建”->“组建”命令或直接按F7功能键或单机工具栏Build按钮,可以对源文件进行编译、链接而不运行改程序。
当然也可以先执行“组建”->“编译”(快捷键Ctrl+F7)命令编译文件,再执行“组建”->“组建”(快捷键F7)命令链接文件。
由于VC++有工作区的要求,所以组建时,系统提示需要建立工作区,如图1.7所示。
单机“是”按钮,系统会自动建立工作区,组建后的结果如图1.8所示。
图1.7 提示建立工作区图1.8 组建源程序结果注意:图1.8下方的“组建”信息窗口中的内容说明了组建的结果,必须保证错误(error(s))数为0才能运行程序。
6)运行文件执行“组建”->“执行”命令或直接按Ctrl+F5键或单机工具栏BuildExecute按钮,可以运行程序,结果显示在用户输出窗口中,如图1.9所示。
图1.9 用户输出窗口注意:如果要编辑下一个C源程序,由于新建的文件不会自动加入工作区,因此需要先关闭当前工作区。
方法是执行“文件”->“关闭工作空间”命令,或者关闭后重新启动VC++,再按照上述方法建立、编辑新的C源文件,让VC++自动建立工作区。
7)运行“加法”程序在VC++环境中建立并编辑实现加法运算的源程序,然后组建该文件,结果如图1.10所示。
运行该文件,并按要求输入数据,得到运行结果。
图1.10 VC++环境下组建“加法”程序后的界面实验2 顺序结构程序设计一、实验目的1.掌握上机运行C程序的全过程。
2.掌握各种格式说明符的使用方法。
3.掌握格式输入输出函数scanf()和printf()的用法。
4.熟悉字符输入输出函数getchar()和putchar()的用法。
二、实验内容1.格式说明符的使用。
创建并编辑输入输出各个类型数据的程序,分析各个格式说明符的作用。
2.编写“输入输出字符”程序,功能如下:使用getchar()函数接收一个字符,用printf()函数显示;使用scanf()函数接收一个字符,用putchar()函数显示。
3.编写“求三角形面积”程序,功能如下:输入三角形三边长,求三角形的面积。
已知三角形的三边长a、b、c,则该三角形的面积公式为:09okm其中,()/2=++。
s a b c4.编写“圆柱体”程序,功能如下:设圆柱体的半径r=2.5,圆柱高h=5.0,求出该圆柱体的表面积和体积。
要求:用scanf()函数输入数据,输出时要求有文字说明,取小数点后两位数字。
三、实验指导1.格式说明符的使用(参考教材)2. “输入输出字符”程序1)编程分析(1)需要定义字符型变量存放输入的数据;(2)用scanf()函数输入字符时,要注意不要接收缓冲区中已有的字符。
2)参考程序#include "stdio.h"main(){char a,b,c;printf("1.Input a character:\n");a=getchar();c=getchar();printf("The character is:%c\n\n",a);printf("2.Input a character:\n");scanf("%c",&b);printf("The character is:");putchar(b);putchar('\n');}3. “求三角形面积”程序1)编程分析(1)该问题的解决过程如下:(2)需要定义实型(float或double)变量存放相应的数据;(3)计算面积需要用到开平方函数sqrt(),该函数原型包含在头文件math.h中,因此需要在程序开始将头文件包含进来;(4)根据实际情况确定各个变量在输出时的宽度和小数位数。
2)参考程序#include “stdio.h”#include “math.h”main(){float a,b,c,s,area;printf(“Input a,b,c:\n”);scanf(“%f ,%f,%f”,&a,&b,&c);s=(a+b+c)/2;area=sqrt(s*s(s-a)*(s-b)*(s-c));printf(“a=%7.2f,b=%7.2f,c=%7.2f\n”,a,b,c);printf(“area=%9.2f\n”,area);}3. “圆柱体”程序1)编程分析(1)该问题的解决过程如下:(2)需要定义实型(float或double)变量存放相应的数据;(3)计算过程中需要用到常数π,为使用方便,在程序开始用宏定义命令define 将常数3.14159(即π)用PI表示;(4)输出数据时根据要求确定各个变量的宽度和小数位数(本例采用10.2)。
2)参考程序#include “stdio.h”#define PI 3.14159main(){float r,h;double s,v;printf(“Input the value of r and h:\n”);scanf(“%f ,%f”,&r,&h);s=2*PI*r*r+2*PI*r*h;v=PI*r*r*h;printf(“The value of s is:%10.2f\n”,s);printf(“The value of v is:%10.2f\n”,v);}实验3 选择结构程序设计一、实验目的1.学会使用逻辑表达式表示条件的方法。
2.掌握switch语句的用法。
二、实验内容1.switch语句的应用编写计算器程序。
要求从键盘任意输入两个数值,然后输入一个四则运算符,自动完成运算后输出结果。
三、实验指导1.switch语句的应用1)编程分析(1)四则运算共有加(+)、减(-)、乘(*)、除(/)4种运算,要做出判断需使用switch语句。
(2)当输入符号为四则运算之外的符号时,不进行任何运算,但应给出相应的提示信息。
当使用提示信息时,switch语句应含有default子句。
2)参考程序#include “stdio.h”void main(){float x,y;char p;scanf(“%f,%f”,&x,&y);p=getchar();switch(p){case ’+’:printf(“%f+%f=%f\n”,x,y,x+y);break;case ‘-’:printf(“%f-%f=%f\n”,x,y,x-y);break;case ‘*’:printf(“%f*%f=%f\n”,x,y,x*y);break;case ‘/’:printf(“%f/%f=%f\n”,x,y,x/y);break;default:printf(“Input is error!\n”);}}3)程序调试调试程序时,+、-、*、/及非四则运算符的情况都应予以调试。
实验4 循环结构程序设计一、实验目的1.通过本实验,加深对循环控制结构有关概念的理解。
2.掌握二重循环结构程序的设计方法。
二、实验内容1.阶乘累加问题。
编写程序,求1!+2!+3!+…+n!的值。
2.取彩球问题。
有12个彩球:3个白色,5个红色,4个黄色,从中任意取n 个球12≤≤(2n ),求出所有不同的取法。
三、实验指导1.阶乘累加问题1)编程分析(1)本实验内容为求解阶乘问题。
(2)求n!用一个循环即可实现。
(3)求1!+2!+3!+…+n!的值,需要在求阶乘程序之外增加一个外重循环。
2)参考程序#include “stdio.h”void main(){long int s=1,t;int i,j,n;printf(“n=”);scanf(“%d”,&n);for(i=2;i<=n;i++){for(t=1,j=1;j<=i;j++)t*=j;s+=t;}printf(“s=%ld\n”,s);}3)程序调试(1)输入一个不大的正整数,分析程序执行结果。
(2)输入一个零或者负数,分析程序执行结果。
(3)输入一个很大的正整数,分析程序执行结果。
(4)当程序结果不符合要求时,修改程序,直到对任何输入数据都能输出正确的执行结果,或者给出一个明确的提示信息。
例如,当输入数据非法时,给出一个错误的提示信息。
2.取彩球问题1)编程分析本题用到“穷举”算法。
穷举的基本思想是对问题的所有可能性一一测试,直到找到解或将全部可能状态都测试过为止。
“穷举”的核心是依次测试循环体。
循环控制有两种办法:计数法和标志法。
计数法要先确定循环次数,然后逐次测试,完成测试次数后循环结束;标志法是达到某一目标后循环结束。
2)参考程序#incude “stdio.h”void main(){int n,white,red,yellow,count=0;printf(“Input”);scanf(“%d”,&n);printf(“white red yellow\n”);for(white=1;white<=3;white++)for(red=1;red<=5;red++){yellow=n -white -red;if(yellow>=1&&yellow<=4){printf(“%5d%5d%5d\n”,white,red,yellow);count++;}}printf(“Total:%d\n”,count);}3)程序调试(1)输入不小于2并且不大于12的整数值,查看并分析程序结果。