管理学院信管专业12(1)班学号3112004734
姓名钟臻华协作者:无教师评定_________________
实验题目线性表的基本操作
实验评分表
实验报告
一、实验目的与要求
1.本实验通过对线性表各种操作的算法设计,理解和掌握线性表的概
念、存储结构及操作要求,体会顺序和链式两种存储结构的特点;
2.根据操作的不同要求,选择合适的存储结构,设计并实现算法,对
算法进行时间复杂度分析,从而达到掌握数据结构的研究方法、算法设计和分析方法的目的。
二、实验内容
1.分别用顺序表、单链表、单循环链表实现约瑟夫问题的求解,并分
析基于不同存储结构算法的时间复杂度。如果采用顺序表实现时,每个元素出环并不执行删除操作,而将相应位置元素值设置为空,但计数时必须跳过值为空的元素,实现这种算法,并分析执行效率。
1.顺序表的不删除出环元素算法实现
public class Josephus3{
public Josephus3(int number,int start,int distance){//创建约瑟夫环并求解,参数指定环长度,起始位置,计数
//采用线性顺序表存储约瑟夫环的元素,元素类型是字符串,构造方法参数指定顺序表的容量
S eqList
S tring a=new String("null");
f or(int i=0;i l ist.append((char)('A'+i)+""); S ystem.out.print("约瑟夫环("+number+","+start+","+distance+"),"); S ystem.out.println(list.toString()); int i=start+distance-1; for(int j=1;j int num=distance; list.set(i,a); while(num!=0){ i=(i+1)%list.length(); if(!list.get(i).equals("null")){ num--; } System.out.println(list.toString()); } if(!list.get(j).equals("null")) System.out.println("被赦免者是"+list.get(j).toString()); } } public static void main(String[] args) { new Josephus3(5,0,2); } } }运行结果: 2.使用单链表实现的算法 class Josephus1 { public Josephus1(int number,int start,int distance){//创建约瑟夫环,参数指定环长度,起始位置,计数 //采用单链表存储约瑟夫环的元素,元素类型是字符串,构造方法参数指定单链表的容量 SinglyLinkedList for(int i=0;i l ist.append((char)('A'+i)+"");//添加字符串对象 } System.out.print("约瑟夫环("+number+","+start+","+distance+"),");//输出约瑟夫环的环长度,起始位置,计数 System.out.println(list.toString());//输出单链表的描述字符串A,B,C,D,E int i=start; while(list.length()>1){//多于一个对象时的循环 i=(i+distance-1)%list.length();//计数按循环规律变化,单链表可以看作是环形结构(循环单链表) System.out.print("删除"+list.remove(i)+","); System.out.println(list.toString()); } System.out.println("被赦免者是"+list.get(0).toString()); } public static void main(String args[]){ n ew Josephus1(5,1,2); } } 3.书本例题的约瑟夫环的算法 public class Josephus { public Josephus (int number,int start,int distance){ SeqList for(int i=0;i list.append((char)('A'+i)+" "); System.out.print("约瑟夫环("+number+","+start+","+distance+"),"); System.out.println(list.toString()); int i=start; while(list.length()>1) { i=(i+distance-1)%list.length();//循环顺序表 System.out.print("删除"+list.remove(i).toString()+","); System.out.println(list.toString()); } System.out.println("被赦免者是"+list.get(0).toString()); } public static void main(String args[]){ new Josephus(5,0,2); } } 2.实现教材P74 实验内容(3)的各成员方法。 public class SinglyLinkedList public Node //头指针,指向单链表的头结点 public SinglyLinkedList(int number){//默认构造方法,构造空单链表。 创建头结点,data和next值均为null this.head=new Node } public SinglyLinkedList(T element[], int number){//由指定数组中的多个对象构造单链表,采用尾插入构造单链表 this( number);//创建空单链表,只有头结点 Node for(int i=0;i {//element.length==0时,构造空链表 rear.next=new Node rear=rear.next;//rear指向新的链尾结点 } } //判断单链表是否为空,O(1) public boolean isEmpty(){ return this.head.next==null; }//以下length()、toString()、get()、set() 方法基于单链表遍历算法 public int length() { int i=0; Node while(p!=null) { i++; p=p.next; } return i; } //返回单链表的所有元素的描述字符串,形式为"(,)",覆盖Object类额toString()方法,O(n) public String toString() { String str="("; Node while(p!=null) { str+=p.data.toString(); if(p.next!=null) str+=","; p=p.next; } return str+")"; } public T get(int i)//返回第i(i>=0)个元素,若i指定序号无效,则返回null 返回单链表的第i个元素的算法 { if(i>=0) { Node for(int j=0;p!=null&&j p=p.next; if(p!=null) return p.data;//p指向第i个结点 } return null; } //设置第i(i>=0)个元素值为x,若i指定序号无效则抛出序号越界异常public void set(int i,T x) { if(x==null) return;//不能设置空对象 if(i>=0) { Node for(int j=0;p!=null&&j p=p.next; if(p!=null) p.data=x;//p指向第i个结点 } else throw new IndexOutOfBoundsException(i+"");//抛出序号越界异常 } //以下insert()、append()算法实现单链表插入操作 public void insert(int i,T x){//将x对象插入在序号为i结点前,也即插入在序号为i-1结点后,O(n) if(x==null)//不能插入空对象 return; //p指向头结点 Node for(int j=0;p.next!=null&&j p=p.next;//循环停止时,p指向第i-1结点或最后一个结点//插入x作为p结点的后继结点,包括头插入(i<=0)、中间/尾插入(i>0) p.next=new Node } //在单链表的最后添加对象,O(n) public void append(T x){ insert(Integer.MAX_V ALUE,x); }//以下remove()、removeAll算法实现单链表的删除操作 //删除序号为i的结点,也即删除序号为i-1的后继结点,若操作成功,则返回被被删除的对象,否则返回null,O(n) public T remove(int i) { if(i>=0){ Node for(int j=0;p.next!=null&&j p=p.next;//遍历算法 if(p.next!=null) { T old=p.next.data;//获得原对象 p.next=p.next.next;//删除p的后继结点 return old; } } return null; } //删除单链表的所有元素,java将自动收回各结点的所占用的内存空间 public void removeAll(){ this.head=null; } //查找,返回首次出现的关键字为key的元素,方法实现见8.2.1节public T search(T key){return key;}//查找算法 //以下声明对单链表元素进行查找,包含,替换,删除等方法,以查找算法为基础 public T search_1(T x){ if(x==null)//关键字x不能为空,空则返回null return null;//顺序查找关键字为x的元素,返回首次出现的元素,若查找不成功返回null Node while(p!=null){ if(p.data.equals(x)) return p.data;//返回首次出现的元素 p=p.next; } return null; } public boolean contain(T x){//判断线性表是否包含关键字为x的元素 return this.search(x)!=null;//以查找的结果获得判断结果} //删除单链表中指定元素关键字x的remove()函数声明如下,使用顺序查找算法但未调用查找算法 public void remove(T x){//删除首次出现的值为x的结点,若没有找到指定结点则不删除 if(this.head.next==null||x==null)//关键字x不能为空,且带有头结点的单链表不能为空 return; Node while(p!=null&&!p.data.equals(x)) { front=p; p=p.next; } if(p!=null) front.next=p.next;//头删除,中间/尾删除中间删除 } public void removeAll(T x){ } public void replace(T x,T y){ if(this.head.next==null||x==null||y==null) return; } public void replaceAll(T x,T y){ x=y; } //以下声明按迭代方式遍历单链表的成员方法public Node if(this.head.next==null) return head;//单链表不能为空 return this.head.next; }//返回单链表的第一个结点,非头结点public Node Node while(p1!=null) { p1=p1.next; return p1.next; } } public Node Node while(p1!=null) { p1=p1.next; return p1; } } public Node Node while(p!=null){ for(int j=0;p.next!=null&&j p=p.next; } return p.next; } //以下声明对单链表的子表进行操作的求子表、包含、插入、删除、替换等方法 public SinglyLinkedList if(i>=0){ Node for(int j=0;p.next!=null&&j p=p.next; if(p.next!=null) { T old=p.next.data; return old; } return null; } for(int i=0;i p=p.next; return p; } public void remove(int i,int n){ if(i>=0){ Node for(int j=0;p.next!=null&&j p=p.next; if(p.next!=null) { T old=p.next.data; p.next=p.next.next; return old; } return null; } for(int i=0;i p=p.next; } public void insert(int i,SinglyLinkedList public SinglyLinkedList(SinglylinkedList this();//创建空单链表,只有头结点 Node Node while(p!=null) { rear.next=new Node rear=rear.next; p=p.next; } } if(SinkedlinkedList==null) return; Node for(int j=0;p.next!=null&&j p=p.next; p.next=new Node } public void append(SinglyLinkedList public SinglyLinkedList(SinglyLinkedList this();//创建空单链表,只有头结点 Node Node while(p!=null) { rear.next=new Node rear=rear.next; p=p.next; } } insert(Integer。MAX_V ALUE,list); } public void concat(SinglyLinkedList } public boolean contain(SinglyLinkedList } } 三、实验结果和数据处理 (截图说明实验结果的正确性,如果有错误分析错误原因) 四、总结 (谈谈自己在实验中遇到的问题,解决的方法) 五、问题与讨论 1、什么是头结点?在链表中设置头结点有什么作用? 头结点是单链表第一个结点之前增加的一个特殊结点, 作用是使所有链表(包括空链表)的头指针非空,并使对单链 表的插入、删除操作不需要区分是否为空表或是否在第一个位 置进行,从而与其他的位置插入、删除操作一致 2、比较顺序存储结构和链式存储结构的优缺点。 顺序存储结构预先分配好内存,读写速度快,缺点是不可扩充 容量,如果需要扩充则需要开辟一个更大存储空间把原来的数 据重写进去。 链式存储结构无需担心容量的问题,读写速度要相对慢一些,因为是动态分配内存,由于要存储下一个结点的地址所以需要的存储空间比顺序存储大。 南昌航空大学 数学与信息科学学院 实验报告 课程名称:数学实验 实验名称: MATLAB基本操作 实验类型:验证性■综合性□ 设计性□ 实验室名称:数学实验室 班级学号: 10 学生姓名:钟 X 任课教师(教师签名): 成绩: 实验日期: 2011-10- 10 一、实验目的 1、熟悉MATLAB基本命令与操作 2、熟悉MATLAB作图的基本原理与步骤 3、学会用matlab软件做图 二、实验用仪器设备、器材或软件环境 计算机MATLAB软件 三、实验原理、方案设计、程序框图、预编程序等 问题1:在区间【0,2π】画sinx 实验程序: >> x=linspace(0,2*pi,30); >> y=sin(x); >> plot(x,y) 问题2:在【0,2π】用红线画sinx,用绿圈画cosx,实验程序: >> x=linspace(0,2*pi,30); >> y=sin(x); >> z=cos(x); >> plot(x,y,'r',x,z,'co') >> 问题3:在【0,π】上画y=sinx的图形。 实验程序: >> ezplot('sin(x)',[0,pi]) >> 问题4:在【0,π】上画x=cos3t,y=sin3t星形图形。 实验程序: >> ezplot('cos(t).^3','sin(t).^3',[0,pi]) >> 问题5:[-2,0.5],[0,2]上画隐函数 实验程序: >> ezplot('exp(x)+sin(x*y)',[-2,0.5,0,2]) >> 问题6:在[-2,2]范围内绘制tanh的图形。实验程序: >> fplot('tanh',[-2,2]) 学生信息管理课题实验报告 绪论随着学校规模的不断扩大,学生数量急剧增加,有关学生的各种信息也成倍增长。面对如此庞大的信息量,开发学生信息管理系统来提高学生管理工作效率就成为必然。通过该系统,可以做到信息的规范管理、科学统计。本文主要介绍了学生信息管理系统的主要任务,系统的用户权限有两种:学生和系统管理员,。该系统主要由学查询、录入、修改、删除、浏览退出。功能模块组成,本文具体介绍了各功能模块所包含的小模块的功能,学籍维护模块主要是对学生的基本信息进行添加、查询、修改、删除;选课管理模块主要是对选修的课程进行添加、删除、统计选修人数,以及学生进行选课和更改选课;成绩查询模块主要是对必修课进行添加、删除、录入成绩,以及学生进行查询成绩等功能。 1.1引言 随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。随着计算机网络技术发展,Web数据库技术已经成为应用最为广泛的网站架构基础技术在应用系统中,Wet提供了与用户进行通信联络的有效手段,利用Web技术,实现Web服务器与数据库系统的连接,完成对数据的处理与查询,用户可以通过操作简单易学的浏览器来查询处理所需要的各种数据。 1.2问题的意义和必要性 学生信息的管理是学校日常工作中的重要组成部分。高校招生规模的逐步扩大和认识制度的改革,在校学生人数将不断增加,而学生管理人员则相对减少。加上我国高等学校基层学生管理工作的头绪多,内容杂,管理细,要求高,传统管理办法已基本不适应新形势的要求。在校生的基本信息的管理,选课及成绩的信息的管理,学生学籍的管理,稍有不慎就会出现错误。同时学生成绩的手工登录与查询,是一项非常繁重而枯燥的劳动,每年课程的变化都需要重新规划,耗费许多人力和物力,而且会因人的情绪烦燥而出现失误。因此在计 算机飞速发展的今天,应用数据库技术实现学生信息的管理是可行而必要的工作,实现高校学生信息网上管理,既能够提高工作效率,又可以提高工作水平。 计算机具有运算速度快、精度高、能按照设计逻辑处理问题等特性,在学 生信息的录入、统计中如采用一个计算机化的信息系统进行处理,就不会发生信息遗漏或者数据输入不正确的情形。 . .. . .. .. 实验三、图的遍历操作 一、目的 掌握有向图和无向图的概念;掌握邻接矩阵和邻接链表建立图的存储结构;掌握DFS及BFS对图的遍历操作;了解图结构在人工智能、工程等领域的广泛应用。 二、要求 采用邻接矩阵和邻接链表作为图的存储结构,完成有向图和无向图的DFS 和BFS操作。 三、DFS和BFS 的基本思想 深度优先搜索法DFS的基本思想:从图G中某个顶点Vo出发,首先访问Vo,然后选择一个与Vo相邻且没被访问过的顶点Vi访问,再从Vi出发选择一个与Vi相邻且没被访问过的顶点Vj访问,……依次继续。如果当前被访问过的顶点的所有邻接顶点都已被访问,则回退到已被访问的顶点序列中最后一个拥有未被访问的相邻顶点的顶点W,从W出发按同样方法向前遍历。直到图中所有的顶点都被访问。 广度优先算法BFS的基本思想:从图G中某个顶点Vo出发,首先访问Vo,然后访问与Vo相邻的所有未被访问过的顶点V1,V2,……,Vt;再依次访问与V1,V2,……,Vt相邻的起且未被访问过的的所有顶点。如此继续,直到访问完图中的所有顶点。 四、示例程序 1.邻接矩阵作为存储结构的程序示例 #include"stdio.h" #include"stdlib.h" #define MaxVertexNum 100 //定义最大顶点数 typedef struct{ char vexs[MaxVertexNum]; //顶点表 int edges[MaxVertexNum][MaxVertexNum]; //邻接矩阵,可看作边表int n,e; //图中的顶点数n和边数e }MGraph; //用邻接矩阵表示的图的类型 //=========建立邻接矩阵======= void CreatMGraph(MGraph *G) { int i,j,k; char a; printf("Input VertexNum(n) and EdgesNum(e): "); scanf("%d,%d",&G->n,&G->e); //输入顶点数和边数 scanf("%c",&a); printf("Input Vertex string:"); for(i=0;i 实验报告 姓名:学号: 1.实验题目 针对某个集体中人名设计一个哈希表,使得平均查找长度不超过R,并完成相应的建表和查表程序。 基本要求:假设人名为中国人姓名的汉语拼音形式。待填入哈希表的人名共有30个,取平均查找长度的上限为2。哈希函数用除留余数法构造,用线性探测再散列法或链地址法处理冲突。 2.需求分析 本演示程序用VC编写,完成哈希函数用除留余数法构造,用线性探测再散列法或链地址法处理冲突。 输出形式:地址,关键字,收索长度,H(key),拼音 3.概要设计 typedef struct NAME typedef struct hterm void InitNameList() void CreateHashList() void FindList() void Display() int main() 4.详细设计 #include #define HASH_LEN 50 #define M 47 #define NAME_NO 8 typedef struct NAME { char *py; //名字的拼音 int k; //拼音所对应的整数}NAME; NAME NameList[HASH_LEN]; typedef struct hterm //哈希表{ char *py; //名字的拼音 int k; //拼音所对应的整数int si; //查找长度 }HASH; HASH HashList[HASH_LEN]; void InitNameList() { NameList[0].py="houxinming"; NameList[1].py="abc"; NameList[2].py="defdgf"; NameList[3].py="zhangrji"; NameList[4].py="jiaxin"; NameList[5].py="xiaokai"; NameList[6].py="liupeng"; NameList[7].py="shenyonghai"; 实验一线性表的基本操作 一、实验目的与基本要求 1.掌握数据结构中的一些基本概念。数据、数据项、数据元素、数据类型和数据结构,以及它们之间的关系。 2.了解数据的逻辑结构和数据的存储结构之间的区别与联系;数据的运算与数据的逻辑结构的关系。 3.掌握顺序表和链表的基本操作:插入、删除、查找以及表的合并等运算。4.掌握运用C语言上机调试线性表的基本方法。 二、实验条件 1.硬件:一台微机 2.软件:操作系统和C语言系统 三、实验方法 确定存储结构后,上机调试实现线性表的基本运算。 四、实验内容 1.建立顺序表,基本操作包括:初始化,建立一个顺序存储的链表,输出顺序表,判断是否为空,取表中第i个元素,定位函数(返回第一个与x相等的元素位置),插入,删除。 2.建立单链表,基本操作包括:初始化,建立一个链式存储的链表,输出顺序表,判断是否为空,取表中第i个元素,定位函数(返回第一个与x相等的元素位置),插入,删除。 3.假设有两个按数据元素值非递减有序排列的线性表A和B,均以顺序表作为存储结构。编写算法将A表和B表归并成一个按元素值非递增有序(允许值相同)排列的线性表C。(可以利用将B中元素插入A中,或新建C表)4.假设有两个按数据元素值非递减有序排列的线性表A和B,均以单链表作为存储结构。编写算法将A表和B表归并成一个按元素值递减有序(即非递增有序,允许值相同)排列的线性表C。 五、附源程序及算法程序流程图 1.源程序 (1)源程序(实验要求1和3) #include 学生信息管理课题实验报告 绪论 随着学校规模的不断扩大,学生数量急剧增加,有关学生的各种信息也成倍增长。面对如此庞大的信息量,开发学生信息管理系统来提高学生管理工作效率就成为必然。通过该系统,可以做到信息的规范管理、科学统计。 本文主要介绍了学生信息管理系统的主要任务,系统的用户权限有两种:学生和系统管理员,。该系统主要由学查询、录入、修改、删除、浏览退出。功能模块组成,本文具体介绍了各功能模块所包含的小模块的功能,学籍维护模块主要是对学生的基本信息进行添加、查询、修改、删除;选课管理模块主要是对选修的课程进行添加、删除、统计选修人数,以及学生进行选课和更改选课;成绩查询模块主要是对必修课进行添加、删除、录入成绩,以及学生进行查询成绩等功能。 1.1 引言 随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。随着计算机网络技术发展,数据库技术已经成为应用最为广泛的网站架构基础技术在应用系统中,提供了与用户进行通信联络的有效手段,利用技术,实现服务器与数据库系统的连接,完成对数据的处理与查询,用户可以通过操作简单易学的浏览器来查询处理所需要的各种数据。 1.2 问题的意义和必要性 学生信息的管理是学校日常工作中的重要组成部分。高校招生规模的逐步扩大和认识制度的改革,在校学生人数将不断增加,而学生管理人员则相对减少。加上我国高等学校基层学生管理工作的头绪多,内容杂,管理细,要求高,传统管理办法已基本不适应新形势的要求。在校生的基本信息的管理,选课及成绩的信息的管理,学生学籍的管理,稍有不慎就会出现错误。同时学生成绩的手工登录与查询,是一项非常繁重而枯燥的劳动,每年课程的变化都需要重新规划,耗费许多人力和物力,而且会因人的情绪烦燥而出现失误。因此在计算机飞速发展的今天,应用数据库技术实现学生信息的管理是可行而必要的工作,实现高校学生信息网上管理,既能够提高工作效率,又可以提高工作水平。 计算机具有运算速度快、精度高、能按照设计逻辑处理问题等特性,在学生信息的录入、统计中如采用一个计算机化的信息系统进行处理,就不会发生信息 实验名称:Windows的基本操作 一、实验目的 1.掌握桌面主题的设置。 2.掌握快捷方式的创建。 3.掌握开始菜单的组织。 4.掌握多任务间的数据传递——剪贴板的使用。 5.掌握文件夹和文件的创建、属性查看和设置。 6.掌握文件夹和文件的复制、移动和删除与恢复。 7.熟悉文件和文件夹的搜索。 8.熟悉文件和文件夹的压缩存储和解压缩。 二、实验环境 1.中文Windows 7操作系统。 三、实验内容及步骤 通过上机完成实验4、实验5所有内容后完成该实验报告 1.按“实验4--范例内容(1)”的要求设置桌面,将修改后的界面复制过来。 注:没有桌面背景图“Autumn”的,可选择其它背景图。 步骤:在桌面空白区域右击,选择菜单中的“个性化”,在弹出的窗口中点击“桌面背景”,在背景栏内选中“某一张图片”,单击“确定”。 修改后的界面如下图所示: 2.将画图程序添加到“开始”菜单的“固定项目列表”上。 步骤:右击“开始/所有程序/附件”菜单中的画图程序项,在弹出的快捷菜单中选“附到「开始」菜单”命令。 3.在D盘上建立以“自己的学号+姓名”为名的文件夹(如01108101刘琳)和其子文件 夹sub1,然后: 步骤:选定D:\为当前文件夹,选择“文件/新建/文件夹”命令,并将名字改为“学号+姓名”;选定“ D:\学号+姓名”为当前文件夹,选择“文件/新建/文件夹”命令,并将名字改为“sub1” ①在C:\WINDOWS中任选2个TXT文本文件,将它们复制到“学号+姓名”文件夹中;步骤:选定“C:\WINDOWS”为当前文件夹,随机选取2个文件, CTRL+C复制,返回“D:\学号+姓名”的文件夹,CTRL+V粘贴 ②将“学号+姓名”文件夹中的一个文件移到其子文件夹sub1中; 步骤:选定“ D:\学号+姓名”为当前文件夹,选中其中任意一个文件将其拖拽文件到subl ③在sub1文件夹中建立名为“”的空文本文档; 步骤:选定“ D:\学号+姓名\ sub1”为当前文件夹,在空白处单击右键,选择“新建\文本文档”,把名字改为test,回车完成。 ④删除文件夹sub1,然后再将其恢复。 步骤:选定“ D:\学号+姓名”为当前文件夹,右键单击“sub1”文件夹,选择“删除”,然后打开回收站,右键单击“sub1”文件夹,在弹出的快捷菜单中选择“还原”。 4.搜索C:\WINDOWS\system文件夹及其子文件夹下所有文件名第一个字母为s、文件长 度小于10KB且扩展名为exe的文件,并将它们复制到sub1文件夹中。 步骤:选定“ C:\WINDOWS\system”为当前文件夹,单击“搜索”按钮,在左侧窗格选择“所有文件和文件夹”,在“全部或部分文件名”中输入“s*.exe”,在“大小”中,选择“0~10KB”。 5.用不同的方法,在桌面上创建名为“计算器”、“画图”和“剪贴板”的三个快捷方式, 它们应用程序分别为:、和。并将三个快捷方式复制到sub1文件夹中。 步骤:①在"开始"菜单的"所有程序"子菜单中找到"计算器",单击右键,在弹出的快捷菜单中选择“发送到\桌面快捷方式”。 ②在"开始"菜单的"所有程序"子菜单中找到"画图",将其拖至桌面空白处。 ③在桌面上单击右键,在弹出的快捷菜单中选择“新建\快捷方式”,在“创建快捷方式” 福建工程学院 课程设计 课程:算法与数据结构 题目:哈希表 专业:网络工程 班级:xxxxxx班 座号:xxxxxxxxxxxx 姓名:xxxxxxx 2011年12 月31 日 实验题目:哈希表 一、要解决的问题 针对同班同学信息设计一个通讯录,学生信息有姓名,学号,电话号码等。以学生姓名为关键字设计哈希表,并完成相应的建表和查表程序。 基本要求:姓名以汉语拼音形式,待填入哈希表的人名约30个,自行设计哈希函数,用线性探测再散列法或链地址法处理冲突;在查找的过程中给出比较的次数。完成按姓名查询的操作。 运行的环境:Microsoft Visual C++ 6.0 二、算法基本思想描述 设计一个哈希表(哈希表内的元素为自定义的结构体)用来存放待填入的30个人名,人名为中国姓名的汉语拼音形式,用除留余数法构造哈希函数,用线性探查法解决哈希冲突。建立哈希表并且将其显示出来。通过要查找的关键字用哈希函数计算出相应的地址来查找人名。通过循环语句调用数组中保存的数据来显示哈希表。 三、设计 1、数据结构的设计和说明 (1)结构体的定义 typedef struct //记录 { NA name; NA xuehao; NA tel; }Record; { Record *elem[HASHSIZE]; //数据元素存储基址 int count; //当前数据元素个数 int size; //当前容量 }HashTable; 哈希表元素的定义,包含数据元素存储基址、数据元素个数、当前容量。 2、关键算法的设计 (1)姓名的折叠处理 long fold(NA s) //人名的折叠处理 { char *p; long sum=0; NA ss; strcpy(ss,s); //复制字符串,不改变原字符串的大小写 strupr(ss); //将字符串ss转换为大写形式 p=ss; while(*p!='\0') sum+=*p++; printf("\nsum====================%d",sum); return sum; } (2)建立哈希表 1、用除留余数法构建哈希函数 2、用线性探测再散列法处理冲突 int Hash1(NA str) //哈希函数 { long n; int m; n=fold(str); //先将用户名进行折叠处理 m=n%HASHSIZE; //折叠处理后的数,用除留余数法构造哈希函数 return m; //并返回模值 }Status collision(int p,int c) //冲突处理函数,采用二次探测再散列法解决冲突{ int i,q; i=c/2+1; while(i 北京邮电大学电信工程学院 数据结构实验报告 实验名称:实验1——线性表 学生姓名: 班级: 班内序号: 学号: 日期: 1.实验要求 1、实验目的:熟悉C++语言的基本编程方法,掌握集成编译环境的调试方法 学习指针、模板类、异常处理的使用 掌握线性表的操作的实现方法 学习使用线性表解决实际问题的能力 2、实验内容: 题目1: 线性表的基本功能: 1、构造:使用头插法、尾插法两种方法 2、插入:要求建立的链表按照关键字从小到大有序 3、删除 4、查找 5、获取链表长度 6、销毁 7、其他:可自行定义 编写测试main()函数测试线性表的正确性。 2. 程序分析 2.1 存储结构 带头结点的单链表 2.2 关键算法分析 1.头插法 a、伪代码实现:在堆中建立新结点 将x写入到新结点的数据域 修改新结点的指针域 修改头结点的指针域,将新结点加入链表中b、代码实现: Linklist::Linklist(int a[],int n)//头插法 {front=new Node; front->next=NULL; for(int i=n-1;i>=0;i--) {Node*s=new Node; s->data=a[i]; s->next=front->next; front->next=s; } } 2、尾插法 a、伪代码实现:a.在堆中建立新结点 b.将a[i]写入到新结点的数据域 c.将新结点加入到链表中 d.修改修改尾指针 b、代码实现: Linklist::Linklist(int a[],int n,int m)//尾插法 {front=new Node; Node*r=front; for(int i=0;i 浙江大学城市学院实验报告 课程名称数据结构 实验项目名称实验十三/十四图的基本操作 学生姓名专业班级学号 实验成绩指导老师(签名)日期2014/06/09 一.实验目的和要求 1、掌握图的主要存储结构。 2、学会对几种常见的图的存储结构进行基本操作。 二.实验内容 1、图的邻接矩阵定义及实现: 建立头文件test13_AdjM.h,在该文件中定义图的邻接矩阵存储结构,并编写图的初始化、建立图、输出图、输出图的每个顶点的度等基本操作实现函数。同时建立一个验证操作实现的主函数文件test13.cpp(以下图为例),编译并调试程序,直到正确运行。 2、图的邻接表的定义及实现: 建立头文件test13_AdjL.h,在该文件中定义图的邻接表存储结构,并编写图的初始化、建立图、输出图、输出图的每个顶点的度等基本操作实现函数。同时在主函数文件test13.cpp中调用这些函数进行验证(以下图为例)。 3、填写实验报告,实验报告文件取名为report13.doc。 4、上传实验报告文件report13.doc到BB。 注: 下载p256_GraphMatrix.cpp(邻接矩阵)和 p258_GraphAdjoin.cpp(邻接表)源程序,读懂程序完成空缺部分代码。 三. 函数的功能说明及算法思路 (包括每个函数的功能说明,及一些重要函数的算法实现思路) 四. 实验结果与分析 (包括运行结果截图、结果分析等) 五.心得体会 程序比较难写,但是可以通过之前的一些程序来找到一些规律 (记录实验感受、上机过程中遇到的困难及解决办法、遗留的问题、意见和建议等。) 【附录----源程序】 256: //p-255 图的存储结构以数组邻接矩阵表示, 构造图的算法。 #include 数据结构实验报告四——哈希表查找名字(字符串) 实验题目:哈希表查找名字(字符串) 实验目标: 输入一组名字(至少50个),将其保存并利用哈希表查找。输出哈希查找冲突次数,哈希表负载因子、查找命中率。 数据结构: 哈希表与数组(二维)。二维数组用于静态顺序存储名字(字符串),哈希表采用开放定址法,用于存储名字(字符串)对应得关键字并实现对名字(字符串)得查找。 需要得操作有: 1、关键字求取(主函数中两次出现,未单独编为函数) 关键字key=abs(字符串首位ASCII码值-第二位ASCII码值+第([]+1)位ASCII码值-最后一位ASCII码值-倒数第二位ASCII码值)*字符串长度(abs为求整数绝对值得函数)。 2、处理关键字得哈希函数(Hash) 利用平方取中法求关键值key在哈希表中得位置。公式add=(key*key)%1000/LENGTH(a dd为key在哈希表中得地址)。 int Hash(intkey) { ?return((key*key)/1000%LENGTH); } 3、处理哈希表中冲突得函数(Collision) 利用线性探测再散列处理冲突,利用全局变量count统计冲突次数。 int Collision(intkey,int Hashtable[]) { inti; for(i=1;i<=LENGTH;i++) { ??if(Hashtable[(Hash(key)+i)%LENGTH]==-1) ?return((Hash(key)+i)%LENGTH); ??count++; } } 4、哈希表初始化(InitHash) void InitHash(int Hashtable[]) { inti; for(i=0;i<LENGTH;i++) ??Hashtable[i]=-1; } 5、向哈希表中插入关键字(InsertHash) void InsertHash(int key,int Hashtable[]) { int add; 一.实验名称 1.线性表基本操作; 2.处理约瑟夫环问题 二.试验目的: 1.熟悉C语言的上机环境,掌握C语言的基本结构。 2.定义单链表的结点类型。 3.熟悉对单链表的一些基本操作和具体的函数定义。 4.通过单链表的定义掌握线性表的链式存储结构的特点。 5.熟悉对单链表的一些其它操作。 三.实验内容 1.编制一个演示单链表初始化、建立、遍历、求长度、查询、插入、删除等操作的程序。 2.编制一个能求解除约瑟夫环问题答案的程序。 实验一线性表表的基本操作问题描述: 1. 实现单链表的定义和基本操作。该程序包括单链表结构类型以及对单链表操作 的具体的函数定义 程序中的单链表(带头结点)结点为结构类型,结点值为整型。 /* 定义DataType为int类型*/ typedef int DataType; /* 单链表的结点类型*/ typedef struct LNode {DataType data; struct LNode *next; }LNode,*LinkedList; LinkedList LinkedListInit() //初始化单链表 void LinkedListClear(LinkedList L) //清空单链表 int LinkedListEmpty(LinkedList L)//检查单链表是否为空 void LinkedListTraverse(LinkedList L)//遍历单链表 int LinkedListLength(LinkedList L)//求单链表的长度 /* 从单链表表中查找元素*/ LinkedList LinkedListGet(LinkedList L,int i) /* 从单链表表中查找与给定元素值相同的元素在链表中的位置*/ int LinkedListLocate(LinkedList L, DataType x) void LinkedListInsert(LinkedList L,int i,DataType x) //向单链表中插入元素 /* 从单链表中删除元素*/ void LinkedListDel(LinkedList L,DataType x) 实验报告 <学生信息管理系统> 实验项目一:可行性分析报告 1.实验目的:根据理论课程所学内容,针对某一项目进行可行性分析训练 2.实验原理:从理论课的学习中掌握规范的可行性分析技术,通过编写报告的形 式得到练习。 3.实验器材:Microsoft Office 4.实验步骤:(1)参照理论学习的内容进行阅读思考;(2)针对某一软件项目, 着手编写;(3)提交。 实验一:学生信息管理系统可行性分析报告 A1、引言 学校的不断发展,学校规模不断扩大,学生数量不断剧增,有关学生的各种信息也成倍增长。面对庞大的数据信息,有一个学生信息管理系统是非常有必要的,不仅可以提高学生管理的工作的效率,还可以通过这个系统,可以做到信息的规范管理、科学统计和快速查询,从而减少管理方面的工作量。 A1.1 编写目的 学校的不断发展,学校规模不断扩大,学生数量不断剧增,有关学生的各种信息也成倍增长。面对庞大的数据信息,有一个学生信息管理系统是非常有必要的,不仅可以提高学生管理的工作的效率,还可以通过这个系统,可以做到信息的规范管理、科学统计和快速查询,从而减少管理方面的工作量. A1.2 项目背景 开发软件名称:学生信息管理系统 项目任务提出者:计算机与信息学院 项目开发者:学生组 用户:管理员、老师和学生 A1.3 定义 学生信息管理系统(SMIS):学生管理系统是帮助教学人员、行政人员和人事人员的管理软件,使用HTML5语言编写,独立完成其功能。 SQL语言:SQL全称是“结构化查询语言”,SQL是一个非过程化的语言。 A1.4参考资料 [1].<软件项目管理> 覃征徐文华翰毅唐晶编著清华大学出版社2009.10 [2].<软件工程> 钱乐秋赵文耘牛军钰编著清华大学出版社2013.08 A2 可行性研究的前提 A2.1 要求 (1)主要功能:本系统应该实现学生信息的管理与查询,具体包括学生信息查询,同时可以对信息进行修改,删除和添加,以及各种信息统计,学籍管理,新生注册等功能。 (2)性能要求:查询效率尽可能做到精准,保持全校数据的一致性、准确性、实时性,信息维护功能做到简单易用。 (3)输入要求:查询效率尽可能做到精准,保持全校数据的一致性、准确性、实时性,信息维护功能做到简单易用。 (4)输出要求:学生基本信息和学籍各种处理的结果表格文档形式 安全与保密要求:对该软件系统设置不同级别的访问权限,通过对不同权限的管理,实现对学生学籍的管理的安全性与保密方面的要求. (5)完成期限:2015年12月11日到 2016年1月10日 目录 实验一:数字图像的基本处理操作 (4) :实验目的 (4) :实验任务和要求 (4) :实验步骤和结果 (5) :结果分析 (8) 实验二:图像的灰度变换和直方图变换 (9) :实验目的 (9) :实验任务和要求 (9) :实验步骤和结果 (9) :结果分析 (13) 实验三:图像的平滑处理 (14) :实验目的 (14) :实验任务和要求 (14) :实验步骤和结果 (14) :结果分析 (18) 实验四:图像的锐化处理 (19) :实验目的 (19) :实验任务和要求 (19) :实验步骤和结果 (19) :结果分析 (21) 实验一:数字图像的基本处理操作 :实验目的 1、熟悉并掌握MATLAB、PHOTOSHOP等工具的使用; 2、实现图像的读取、显示、代数运算和简单变换。 3、熟悉及掌握图像的傅里叶变换原理及性质,实现图像的傅里叶变换。:实验任务和要求 1.读入一幅RGB图像,变换为灰度图像和二值图像,并在同一个窗口内分 成三个子窗口来分别显示RGB图像和灰度图像,注上文字标题。 2.对两幅不同图像执行加、减、乘、除操作,在同一个窗口内分成五个子窗口来分 别显示,注上文字标题。 3.对一幅图像进行平移,显示原始图像与处理后图像,分别对其进行傅里叶变换, 显示变换后结果,分析原图的傅里叶谱与平移后傅里叶频谱的对应关系。 4.对一幅图像进行旋转,显示原始图像与处理后图像,分别对其进行傅里 叶变换,显示变换后结果,分析原图的傅里叶谱与旋转后傅里叶频谱的 对应关系。 :实验步骤和结果 1.对实验任务1的实现代码如下: a=imread('d:\'); i=rgb2gray(a); I=im2bw(a,; subplot(1,3,1);imshow(a);title('原图像'); subplot(1,3,2);imshow(i);title('灰度图像'); subplot(1,3,3);imshow(I);title('二值图像'); subplot(1,3,1);imshow(a);title('原图像'); 结果如图所示: 福建工程学院课程设计 课程:算法与数据结构 题目:哈希表 专业:网络工程 班级:xxxxxx班 座号:xxxxxxxxxxxx 姓名:xxxxxxx 2011年12 月31 日 实验题目:哈希表 一、要解决的问题 针对同班同学信息设计一个通讯录,学生信息有姓名,学号,电话号码等。以学生姓名为关键字设计哈希表,并完成相应的建表和查表程序。 基本要求:姓名以汉语拼音形式,待填入哈希表的人名约30个,自行设计哈希函数,用线性探测再散列法或链地址法处理冲突;在查找的过程中给出比较的次数。完成按姓名查询的操作。 运行的环境:Microsoft Visual C++ 6.0 二、算法基本思想描述 设计一个哈希表(哈希表内的元素为自定义的结构体)用来存放待填入的30个人名,人名为中国姓名的汉语拼音形式,用除留余数法构造哈希函数,用线性探查法解决哈希冲突。建立哈希表并且将其显示出来。通过要查找的关键字用哈希函数计算出相应的地址来查找人名。通过循环语句调用数组中保存的数据来显示哈希表。 三、设计 1、数据结构的设计和说明 (1)结构体的定义 typedef struct //记录 { NA name; NA xuehao; NA tel; }Record; 录入信息结构体的定义,包含姓名,学号,电话号码。 typedef struct //哈希表 { Record *elem[HASHSIZE]; //数据元素存储基址 int count; //当前数据元素个数 int size; //当前容量 }HashTable; 哈希表元素的定义,包含数据元素存储基址、数据元素个数、当前容量。 2、关键算法的设计 (1)姓名的折叠处理 实验报告 实验一线性表 实验目的: 1.理解线性表的逻辑结构特性; 2.熟练掌握线性表的顺序存储结构的描述方法,以及在该存储结构下的基本操作;并能灵活运用; 3.熟练掌握线性表的链表存储结构的描述方法,以及在该存储结构下的基本操作;并能灵活运用; 4.掌握双向链表和循环链表的的描述方法,以及在该存储结构下的基本操作。 实验原理: 线性表顺序存储结构下的基本算法; 线性表链式存储结构下的基本算法; 实验内容: 2-21设计单循环链表,要求: (1)单循环链表抽象数据类型包括初始化操作、求数据元素个数操作、插入操作、删除操作、取消数据元素操作和判非空操作。 (2)设计一个测试主函数,实际运行验证所设计单循环链表的正确性。 2-22 .设计一个有序顺序表,要求: (1)有序顺序表的操作集合有如下操作:初始化、求数据元素个数、插入、删除和取数据元素。有序顺序表与顺序表的主要区别是:有序顺序表中的数据元素按数据元素值非递减有序。 (2)设计一个测试主函数,实际运行验证所设计有序顺序表的正确性。 (3)设计合并函数ListMerge(L1,L2,L3),功能是把有序顺序表L1和L2中的数据元素合并到L3,要求L3中的数据元素依然保持有序。并设计一个主函数,验证该合并函数的正确性。 程序代码: 2-21(1)头文件LinList.h如下: typedef struct node { DataType data; struct node *next; }SLNode; /*(1)初始化ListInitiate(SLNode * * head)*/ void ListInitiate(SLNode * * head) { /*如果有内存空间,申请头结点空间并使头指针head指向头结点*/ if((*head=(SLNode *)malloc(sizeof(SLNode)))==NULL)exit(1); 目录 实验一:数字图像的基本处理操作....................................................................... 错误!未定义书签。:实验目的 .............................................................................................................. 错误!未定义书签。:实验任务和要求..................................................................................................... 错误!未定义书签。:实验步骤和结果..................................................................................................... 错误!未定义书签。:结果分析................................................................................................................. 错误!未定义书签。实验二:图像的灰度变换和直方图变换............................................................... 错误!未定义书签。:实验目的 .............................................................................................................. 错误!未定义书签。:实验任务和要求..................................................................................................... 错误!未定义书签。:实验步骤和结果..................................................................................................... 错误!未定义书签。:结果分析................................................................................................................. 错误!未定义书签。实验三:图像的平滑处理....................................................................................... 错误!未定义书签。:实验目的 .............................................................................................................. 错误!未定义书签。:实验任务和要求..................................................................................................... 错误!未定义书签。:实验步骤和结果..................................................................................................... 错误!未定义书签。:结果分析................................................................................................................. 错误!未定义书签。实验四:图像的锐化处理......................................................................................... 错误!未定义书签。:实验目的 .............................................................................................................. 错误!未定义书签。:实验任务和要求..................................................................................................... 错误!未定义书签。:实验步骤和结果..................................................................................................... 错误!未定义书签。:结果分析................................................................................................................. 错误!未定义书签。MATLAB基本操作实验报告
信息管理课题实验报告
图的遍历操作实验报告
哈希表实验报告完整版
C语言数据结构线性表的基本操作实验报告
信息管理课题实验报告
实验报告1windows的基本操作范例
数据结构课程设计--哈希表实验报告
数据结构实验一题目一线性表实验报告
数据结构实验图的基本操作
哈希表实验报告
线性表实验报告
学生信息管理系统软件项目管理实验报告
数字图像处理实验报告
数据结构课程设计--哈希表实验报告
数据结构线性表实验报告
数字图像处理实验报告