算法与数据结构实验报告_第1页
算法与数据结构实验报告_第2页
算法与数据结构实验报告_第3页
算法与数据结构实验报告_第4页
算法与数据结构实验报告_第5页
免费预览已结束,剩余41页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、学生实验报告(理工类)课程名称: 算法与数据结构 专业班级: 18 物联网工程( 1)学生学号: 1817001025 学生姓名: 沈亮所属院部: 智能科学与控制工程学院 指导教师: 王莹莹20 18 20 19 学年 第 2 学期金陵科技学院教务处制实验报告书写要求实验报告原则上要求学生手写, 要求书写工整。 若因课程特点需 打印的,要遵照以下字体、字号、间距等的具体要求。纸张一律采用 A4的纸张。实验报告书写说明实验报告中一至四项内容为必填项, 包括实验目的和要求; 实验 仪器和设备;实验内容与过程;实验结果与分析。各院部可根据学科 特点和实验具体要求增加项目。填写注意事项(1)细致观察,

2、及时、准确、如实记录。(2)准确说明,层次清晰。(3)尽量采用专用术语来说明事物。(4)外文、符号、公式要准确,应使用统一规定的名词和符号。(5)应独立完成实验报告的书写,严禁抄袭、复印,一经发现, 以零分论处 。实验报告批改说明实验报告的批改要及时、认真、仔细,一律用红色笔批改。实验 报告的批改成绩采用百分制,具体评分标准由各院部自行制定。 实验报告装订要求实验批改完毕后, 任课老师将每门课程的每个实验项目的实验报 告以自然班为单位、按学号升序排列,装订成册,并附上一份该门课 程的实验大纲。科技楼 4栋 703实验项目名称: 顺序表 实验学时: 同组学生姓名:实验地点:实验日期: 2019.

3、06.03实验成绩:批改教师:批改时间:实验 1 顺序表一、实验目的和要求掌握顺序表的初始化、插入、删除等操作。二、实验仪器和设备Turbo C 2.0 / Visual C + 6.0三、实验内容与过程(含程序清单及流程图)1、必做题( 1) 编写程序建立一个顺序表,并逐个输出顺序表中所有数据元素的值。 编写主函数测试结果。( 2) 在递增有序的顺序表中插入一个新结点 x,保持顺序表的有序性。 解题思路:首先查找插入的位置,再移位,最后进行插入操作;从第 一个元素开始找到第一个大于该新结点值 x 的元素位置 i 即为插入位 置;然后将从表尾开始依次将元素后移一个位置直至元素 i;最后将新 结

4、点 x 插入到 i 位置。(3) 删除顺序表中所有等于 x 的数据元素。2、选做题已知两个顺序表 A和 B 按元素值递增有序排列, 要求写一算法实现将 A 和 B 归并成一个按元素值递减有序排列的顺序表(允许表中含有值相同的元素) 。 程序清单:#include"stdio.h"#include"malloc.h"#define maxsize 1024typedef char datatype;typedef structdatatype datamaxsize;int last;sequenlist;int insert(sequenlist *L,

5、datatype x,int i)int j;if(L->last=maxsize-1)printf("overflow");return 0;else if(i<0)|(i>L->last)printf("error,please input the right 'i'"); return 0;elsefor(j=L->last;j>=i;j-)L->dataj+1=L->dataj;L->datai=x;L->last+;return(1);int dellist(seque

6、nlist *L,int i)int j;if(i<0)|(i>L->last)printf("error,please input the right 'i'");return 0;elsefor(j=i;j<L->last;j+)L->dataj=L->dataj+1;L->last=L->last-1;return(1);void creatlist(sequenlist *L)int n,i;char tmp;printf(" 请输入数据的个数 :n");scanf("

7、;%d",&n);for(i=0;i<n;i+)printf("data%d=",i); fflush(stdin); scanf("%c",&tmp); L->datai=tmp;L->last=n-1;printf("n");void printout(sequenlist *L) int i;for(i=0; i<=L->last;i+)printf("data%d=",i); printf("%cn",L->datai);vo

8、id main()sequenlist *L;char cmd,x;int i;L=(sequenlist *)malloc(sizeof(sequenlist); creatlist(L);printout(L);doprintf("i,I. 插入 n");printf("d,D. 删除 n");printf("q,Q. 退出 n");dofflush(stdin); scanf("%c",&cmd);while(cmd!='d')&&(cmd!='D')&

9、amp;&(cmd!='q')&&(cmd!='Q')&&(cmd!='i')&&(cm d!='I');switch(cmd)case 'i':case 'I': printf(" 请输入你要插入的数据 : "); fflush(stdin); scanf("%c",&x);printf(" 请输入你要插入的位置 : "); scanf("%d",&

10、;i); insert(L,x,i);printout(L); break;case 'd': case 'D': printf(" 请输入你要删除元素的位置 :"); fflush(stdin); scanf("%d",&i); dellist(L,i); printout(L);break; while(cmd!='q')&&(cmd!='Q');四、实验结果与分析(程序运行结果及其分析)五、实验体会(遇到问题及解决办法,编程后的心得体会)通过第一次编写有关顺序表

11、的算法然后运行,寻找错误,改正错误,让我对 算法有了初步的认识。 顺序表是一种典型的线性结构, 也是一种最常用的数据结 构。在 C+语言中,通常借助数组类型来实现顺序表,数组的基本类型就是线性 表中元素的类型,数组大小要大于等于线性表长度。科技楼 4栋 703实验项目名称: 单链表 实验学时: 同组学生姓名:实验地点:实验日期: 2019.06.04实验成绩:批改教师:批改时间:实验 2 单链表一、实验目的和要求1、实验目的掌握单链表的定位、插入、删除等操作。2、实验要求(1)注意链表的空间是动态分配的,某结点不用之后要及时进行物理删除, 以便释放其内存空间。(2)链表不能实现直接定位,一定注

12、意指针的保存,防止丢失。二、实验仪器和设备Turbo C 2.0 / Visual C + 6.0三、实验内容与过程(含程序清单及流程图)1、必做题(1)编写程序建立一个单链表,并逐个输出单链表中所有数据元素。(2)在递增有序的单链表中插入一个新结点 x,保持单链表的有序性。 解题思路:首先查找插入的位置然后进行插入操作;从第一个结点开 始找到第一个大于该新结点值的结点即为插入位置;然后在找到的此 结点之前插入新结点;注意保留插入位置之前结点的指针才能完成插 入操作。2、选做题已知指针 LA 和 LB 分别指向两个无头结点单链表的首元结点。要求编一算 法实现,从表 LA 中删除自第 i 个元素

13、起共 len 个元素后,将它们插入到表 LB 中第 j 个元素之前。程序清单:#include "stdio.h"#include"malloc.h"typedef char ElemType;typedef struct LNodeElemType data;struct LNode *next;LNode,*LinkList;int ListInsert_L(LinkList head,int i, ElemType e) LinkList p=head;LinkList s;int j;p=p->next;for(j=1;j<i;j+)

14、if(p)p=p->next;elsebreak;if(!p|i<1)printf("error! 请输入正确的 i 值!n");return 0;s=(LinkList)malloc(sizeof(LNode);s->data=e;s->next=p->next;p->next=s;return 1;LinkList CreateList_L(LinkList head)ElemType temp;LinkList p; printf("请输入结点值 (输入 0 结束):"); fflush(stdin);scanf

15、("%c",&temp); while(temp!='0') if('A'<=temp&&temp<='Z')|('a'<=temp&&temp<='z') p=(LinkList)malloc(sizeof(LNode); p->data=temp;p->next=head->next; head->next=p; printf("请输入结点值(输入 0 结束):"); fflush(s

16、tdin);scanf("%c",&temp);return head; int ListDel_L(LinkList head,int i)LinkList p,tmp;int j;p=head->next;tmp=head;for(j=1;j<i;j+)if(p)p=p->next; tmp=tmp->next;else break;if(!p|i<1)printf("error! 请输入正确的 i 值 !n");return 0;tmp->next=p->next;free(p);return 1;

17、void ListPint_L(LinkList head) LinkList p;int i=0;p=head->next; while(p!=NULL)i+;printf(" 第%d 个元素是 :",i); printf("%cn",p->data); p=p->next;void main()int i;char cmd,e;LinkList head; head=(LinkList)malloc(sizeof(LNode); head->next=NULL;CreateList_L(head);ListPint_L(hea

18、d);doprintf("i,I. 插入 n");printf("d,D. 删除 n");printf("q,Q. 退出 n");dofflush(stdin); scanf("%c",&cmd); while(cmd!='d')&&(cmd!='D')&&(cmd!='q')&&(cmd!='Q')&&(cmd!='I')&&(c md!='

19、;i');switch(cmd)case 'i':case 'I': printf(" 请输入你要插入的数据 : "); fflush(stdin); scanf("%c",&e);printf(" 请输入你要插入的位置 : "); scanf("%d",&i);ListInsert_L(head,i,e); ListPint_L(head); break;case'd': case'D': printf(" 请输入你

20、要删除元素的位置 :"); fflush(stdin);scanf("%d",&i);ListDel_L(head,i);ListPint_L(head); break;while(cmd!='q')&&(cmd!='Q');四、实验结果与分析(程序运行结果及其分析)五、实验体会(遇到问题及解决办法,编程后的心得体会) 通过这次设计算法, 实现线性结构上的单链表的产生以及元素的查找、 插入、 删除,让我对单链表的概念进一步加深了。 同时让我认识到链表的优点是由于采 用结点的动态分配方式, 具有良好的适应性;

21、插入和删除操作只需要修改相关的 指针域,不需要移动元素。但是,链表存储密度小,不具有随机存储的特性。单 链表和顺序表都有其优缺点,需要我们在具体的情况下灵活运用。科技楼 4栋 703实验项目名称: 栈和队列 实验学时: 同组学生姓名:实验地点:实验日期: 2019.06.10实验成绩:批改教师:批改时间:实验 3 栈和队列一、实验目的和要求(1)掌握应用栈解决问题的方法。(2)掌握利用栈进行表达式求和的算法。(3)掌握队列的存储结构及基本操作实现,并能在相应的应用问题中 正确选用它们。二、实验仪器和设备Turbo C 2.0 / Visual C + 6.0三、实验内容与过程(含程序清单及流程

22、图)1、必做题假设称正读和反读都相同的字符序列为 ”回文 ”,试写一个算法判别读入的一 个以 ''为结束符的字符序列是否是“回文” 。2、选做题(1)测试“汉诺塔”问题。( 2)在顺序存储结构上实现输出受限的双端循环队列的入列和出列算法。 设 每个元素表示一个待处理的作业,元素值表示作业的预计时间。入队列采取 简化的短作业优先原则,若一个新提交的作业的预计执行时间小于队头和队 尾作业的平均时间,则插入在队头,否则插入在队尾。程序清单:#include <stdio.h>#include<stdlib.h>#define m 100 typedef str

23、uct / 定义栈char datam;int top;Stack;void InitStack(Stack *s) / 初始化栈s->top=0;/ 判断栈是否为空int StackEmpty(Stack *s) if(s->top=0)return 0;elsereturn 1;void Push(Stack *s,char x) / 入栈if(s->top=m)printf("栈空 n");else s->data+s->top=x;char Pop(Stack *s) / 出栈char y;if(s->top=0)printf(&

24、quot; 栈空 n");return '0'elsey=s->datas->top; s->top=s->top-1; return y;typedef struct / 定义队列 char datam;int front;int rear;Queue;void InitQueue(Queue *q)/ 初始化队列q->front=q->rear=0;void EnQueue(Queue *q,char e)/ 入队if(q->rear+1)%m=q->front) printf("队列为空 n")

25、;else q->dataq->rear=e; q->rear=(q->rear+1);char DeQueue(Queue *q) / 出队char f;if(q->front=q->rear) printf(" 队列为空 n"); return 0;else f=q->dataq->front; q->front=(q->front+1); return f;int main()char c;int y=0;Stack *s=(Stack *)malloc(sizeof(Stack);Queue *q=(Que

26、ue *)malloc(sizeof(Queue); InitStack(s);InitQueue(q);printf(" 输入一个字符串 :n");while(c=getchar()!='')/ 入栈/ 入队/ 出栈字符与出队字符相等Push(s,c);EnQueue(q,c); while(StackEmpty(s)if(Pop(s)=DeQueue(q)y=1;continue;elsey=0;break;if(y=1)printf(" 此字符串为回文 n"); elseprintf(" 此字符串不是回文 n")

27、; return 0;四、实验结果与分析(程序运行结果及其分析)五、实验体会(遇到问题及解决办法,编程后的心得体会)从组成元素的逻辑关系看, 栈和队列都属于线性结构。 栈和队列与线性表的 不同之处在于它们的相关运算具有一些特殊性。 更准确的说, 一般线性表上的插 入、删除运算不受限制,而栈和队列上的插入、删除运算均受某种特殊限制。所 以在我们实践时应该注意这方面的问题。科技楼 4栋 703实验项目名称:字符串定位 实验学时:同组学生姓名:实验地点:实验日期: 2019.06.11实验成绩:批改教师:批改时间:实验 4 字符串定位一、实验目的和要求掌握串的存储及应用。二、实验仪器和设备Turbo

28、 C 2.0 / Visual C + 6.0三、实验内容与过程(含程序清单及流程图)1、 必做题编写算法实现:查找字符串 T 是否是字符串 S 的子串,如果是则返回子串 在主串中的位置,不是则返回 0,并用主函数测试结果。2、选做题假设以链结构表示串, 编写算法实现将串 S插入到串 T 中某个字符之后, 若 串T 中不存在这个字符,则将串 S 联接在串 T 的末尾。 提示:为提高程序的通用性,插入位置字符应设计为从键盘输入。程序清单:#include<stdio.h>#include<stdlib.h>#include<string.h> #define

29、Max 100#define TRUE 1#define FALSE 0 typedef unsigned char SStringMax+1;typedef int Status;Status StrAssign(SString T,char *strs) / 生成一个其值等于 chars 的串 T int i;T0=0; for(i=0;strsi;i+) / T0 存放字符串的长度Ti+1=strsi;T0=i+1;return 0;int Index(SString S,SString T,int pos) / 返回子串 T 在主串 S 中第 pos 个字符之后的位置。 若不存在,则函

30、数值为 0 / 其中, T 非空, 1 pos StrLength(。S)int i,j;i = pos;j = 1;while( i<=S0 && j<=T0 )if(Si=Tj)+i;+j;elsei+; / 移动 i 到下一次比较的位置j=1;/ 移动 j 到下一次比较的位置if(j>T0)return T0; / 返回子串 T在主串 S中的位置elsereturn 0;int main()SString S,T;int m;char strs1Max;char strs2Max;printf(" 输入主串 :");gets(strs

31、1);printf(" 输入子串 :");gets(strs2);StrAssign(S,strs1);StrAssign(T,strs2);m=Index(S,T,1);if(m)printf("%dn",m);elseprintf(" 找不到此子串 n");return 0;四、实验结果与分析(程序运行结果及其分析)五、实验体会(遇到问题及解决办法,编程后的心得体会) 串是由字符元素构成的, 其中元素的逻辑关系也是一种线性关系, 当且仅当两个 串长度相等并且各对应位置上的字符都相同的两个串相等。 一个串中任意个连续 字符组成的序列

32、称为该串的子串。 这道操作题要求判断是否为子串并且找到其位 置,在做的时候还不是很容易需要多加练习科技楼 4 栋 703实验项目名称:二叉树的遍历 实验学时:同组学生姓名:实验地点:实验日期: 2019.06.17实验成绩:批改教师:批改时间:实验 5 二叉树的遍历一、实验目的和要求(1)掌握二叉树的生成,以及前、中、后序遍历算法。 (2)掌握应用二叉树递归遍历思想解决问题的方法。二、实验仪器和设备Turbo C 2.0 / Visual C + 6.0三、实验内容与过程(含程序清单及流程图)1、必做题建立一棵二叉树。对此树进行前序遍历、中序遍历及后序遍历,输出遍历序 列。2、选做题已知一棵完

33、全二叉树存于顺序表 sa 中, sa.elem1 sa.last存储结点的值。 试编写算法由此顺序存储结构建立该二叉树的二叉链表。 解题思路:根据完全二叉树顺序存储的性质来确定二叉树的父子关系即“还 原”了二叉树,之后再按照二叉树二叉链表的构造方法进行建立。完全二叉 树顺序存储的一个重要性质为,第 i 个结点的左孩子是编号为 2i 的结点,第 i 个结点的右孩子是编号为 2i+1 的结点。程序清单:#include<stdio.h>#include<stdlib.h>#define MAX 100typedef struct BiTNode/ 定义二叉树char dat

34、a;struct BiTNode *lchild,*rchild;BiTNode,*BiTree;void CreateBiTree(BiTree *T)char data;/按先序次序输入二叉树中结点的值(一个字符) , #'表示空树 scanf("%c",&data);if(data = '#')*T = NULL;else*T = (BiTree)malloc(sizeof(BiTNode);/生成根结点(*T)->data = data;/ 构造左子树CreateBiTree(&(*T)->lchild);/ 构造

35、右子树CreateBiTree(&(*T)->rchild);void Visit(BiTree T) / 输出if(T->data != '#')printf("%c ",T->data);void PreOrder(BiTree T) / 先序遍历if(T != NULL)/ 访问根节点Visit(T);/访问左子结点PreOrder(T->lchild);/ 访问右子结点PreOrder(T->rchild); void InOrder(BiTree T) / 中序遍历if(T != NULL)/ 访问左子结点In

36、Order(T->lchild);/ 访问根节点 Visit(T);/ 访问右子结点InOrder(T->rchild);void PostOrder(BiTree T) / 后序遍历if(T != NULL)/ 访问左子结点PostOrder(T->lchild);/ 访问右子结点PostOrder(T->rchild);/ 访问根节点Visit(T);int main()BiTree T; printf("以#代表空先序遍历 n 输入二叉树 :"); CreateBiTree(&T); printf("先序遍历 :n"

37、);PreOrder(T); / 先序遍历/ 中序遍历printf("n"); printf("中序遍历 :n"); InOrder(T);printf("n");/ 后序遍历printf(" 后序遍历 : n"); PostOrder(T);return 0;四、实验结果与分析(程序运行结果及其分析)五、实验体会(遇到问题及解决办法,编程后的心得体会) 二叉树是一个有限的结点集合, 这个集合或者为空, 或者由一个根结点和两 棵互不相交的称为左子树和右子树的二叉树组成。 在做完这个实验后, 我了解二 叉树的性质 ,

38、 例如非空二叉树上的叶子结点数等于双分支结点加一,非空二叉树 的第 i 层上最多由 2的 i-1 次个结点等。但是我对此仍不是特别熟练, 需要多加 练习。科技楼 4栋 703实验项目名称: 图的遍历 实验学时: 同组学生姓名:实验地点:实验日期: 2019.06.18实验成绩:批改教师:批改时间:实验 6 图的遍历一、实验目的和要求(1)熟练掌握图的基本概念、构造及其存储结构。 (2)熟练掌握对图的深度优先搜索遍历和广度优先搜索遍历的算法。二、实验仪器和设备Turbo C 2.0 / Visual C + 6.0三、实验内容与过程(含程序清单及流程图)1、必做题( 1)构造一个无向图(用邻接矩

39、阵表示存储结构) 。( 2)对上面所构造的无向图, 进行深度优先遍历和广度优先遍历, 输出遍历 序列。2、选做题采用邻接表存储结构, 编写一个判别无向图中任意给定的两个顶点之间是否 存在一条长度为 k 的简单路径的算法。 简单路径是指其顶点序列中不含有重 复顶点的路径。提示:两个顶点及 k 值均作为参数给出。程序清单:#include <stdio.h>#include <stdlib.h>#define MAXVEX 100 #define INFINITY 65535/ 最大顶点数/ 用 65535 来代表无穷大/ 顶点表/ 邻接矩阵,可看作边/ 图中当前的顶点数和

40、边数int visitedMAXVEX=0;typedef structchar vexsMAXVEX;int arcMAXVEXMAXVEX;int numVertexes, numEdges; Graph;void CreateGraph(Graph *g)int i,j,k,w,t;printf("输入顶点数,边数和 t (中间用空格 ):"); scanf("%d %d %d", &(g->numVertexes), &(g->numEdges),&t); printf("n");for(i

41、=1;i<=g->numVertexes;i+)getchar(); printf(" 输入第%d顶点信息 vexs%d=",i,i); scanf("%c",&(g->vexsi); printf("n"); for(i=1;i<=g->numVertexes;i+) for(j=1;j<=g->numVertexes;j+) if (t>2) g->arcij = INFINITY; else g->arcij=0;for(k=1;k<=g->numE

42、dges;k+) printf("输入 i j (中间用空格):");scanf("%d %d",&i,&j);if(i>g->numVertexes |j>g->numVertexes) exit(0);if(t>2) printf(" 输入 w:");scanf("%d",&w); g->arcij=w; if(t=3) g->arcji=w; else g->arcij=1;if (t=1) g->arcji=1; printf(&

43、quot;n"); printf(" 输出邻接矩阵 :n");for(i=1;i<=g->numVertexes ;i+)for(j=1;j<=g->numVertexes ;j+)printf("%8d",g->arcij); if(t>2&&g->arcij=65535) g->arcij=0;else if(t>2&&g->arcij!=65535) g->arcij=1;printf("n");void dfs (Gra

44、ph g,int i)int j; printf("%d->",i);visitedi=1;/ 广度优先搜索,从顶点 i 开始遍历/ 输出访问顶点/ 全局数组访问标记置 1 表示已经访问for(j=1; j<=g.numVertexes; j+)if (g.arcij=1)&&(!visitedj)dfs (g,j);void bfs (Graph g,int i) int visitedMAXVEX=0;int *q=new intg.numVertexes+1 ; int f,r,j ;f=r=0 ; printf("%d->

45、",i); visitedi=1 ; r+;qr=i ; while (f<r) f+; i=qf ;for (j=1; j<=g.numVertexes; j+) if (g.arcij=1)&&(!visitedj) printf("%d->",j); ; qr=j ; visitedj=1r+;int main()Graph g;int i;n");printf("t 为 14, 分别表示无向图、有向图、带权无向图、带权有向图 CreateGraph(&g);printf("n 输入 i

46、:");scanf("%d",&i);printf("n 深度优先搜索遍历 :");dfs (g,i); printf("NULLn"); printf(" 广度优先搜索遍历 :");bfs (g,i);printf("NULLn");return 0;四、实验结果与分析(程序运行结果及其分析)五、实验体会(遇到问题及解决办法,编程后的心得体会)图的遍历比树的遍历更复杂,因为从树根到达树中的任意节点只有一条路径, 而从图的初始点到达图中的每个顶点可能存在多条路径,所以我们在做实

47、验时, 需要更加仔细。科技楼 4栋 703实验项目名称:三元组转置 实验学时:同组学生姓名:实验地点:实验日期: 2019.06.24实验成绩:批改教师:批改时间:实验 7 三元组转置、实验目的和要求(1)深入研究数组的存储表示和实现技术。(2)着重掌握对稀疏矩阵的表示方法及其运算的实现。、实验仪器和设备Turbo C 2.0 / Visual C + 6.0三、实验内容与过程(含程序清单及流程图)1、必做题(1)要求矩阵的输入形式采用三元组表示, 以三元组顺序表表示稀疏矩阵 (2)设计矩阵的逆置算法,实现矩阵的逆置。程序清单:#include <stdio.h>#define M

48、AXSIZE 100 typedef struct / 定义三元组 int hang,lie;int zhi;SAN;typedef struct SAN dataMAXSIZE;int mu,nu,tu;SANYUAN;/ 对三元组进行转置void zhuanzhi(SANYUAN M,SANYUAN *T) int col,p,q,t;int numMAXSIZE,cpotMAXSIZE;T->mu=M.nu;T->nu=M.mu;T->tu=M.tu; if(T->tu)for(col=1;col<=M.nu;+col) numcol=0;for(t=1;t

49、<=M.tu;+t)+numM.datat.lie;cpot1=1;for(col=2;col<=M.nu;+col) cpotcol=cpotcol-1+numcol-1; for(p=1;p<=M.tu;+p)/ 行列交换/ 行列交换col=M.datap.lie; q=cpotcol;T->dataq.hang=M.datap.lie;T->dataq.lie=M.datap.hang;T->dataq.zhi=M.datap.zhi;+cpotcol;void output(SANYUAN *M)/ 输出三元组int i,j;int t=1; for

50、(i=1;i<=M->mu;i+) for(j=1;j<=M->nu;j+) if(M->datat.hang=i&&M->datat.lie=j)printf("%d ",M->datat.zhi); t+;else printf("0 "); printf("n");int main()SANYUAN A,T;int k; printf(" 输入矩阵大小 n");printf(" 行: ");scanf("%d",

51、&A.mu);printf(" 列: ");scanf("%d",&A.nu);printf(" 非零元素个数 :");scanf("%d",&A.tu);printf(" 输入三元组表 :n");/ 顺序输入三元组for(k=1;k<=A.tu;k+)scanf("%d %d %d",&A.datak.hang,&A.datak.lie,&A.datak.zhi);printf(" 原矩阵 n");

52、output(&A);zhuanzhi(A,&T);printf(" 转置后的矩阵 : n");output(&T);return 0;四、实验结果与分析(程序运行结果及其分析)五、实验体会(遇到问题及解决办法,编程后的心得体会)在开始做的时候,对这个实验还很陌生。后面通过仔细了解,三元组是将稀 疏矩阵非零元素所在行、列以及它的值构成一个三元组 (i,j,v )然后再按某种 规律存储这些三元组。 这种方法可以节约存储空间, 我对这个实验有了更深的理 解,但也需要不断的练习。科技楼 4栋 703实验项目名称: 查找 实验学时: 同组学生姓名:实验地点:实验日期: 2019.06.25实验成绩:批改教师:批改时间:实验 8 查找一、实验目的和要求(1)掌握顺序表查找、有序表查找、索引顺序表查找的各种算法。 (2)掌握哈希表设计。二、实验仪器和设备Turbo C 2.0 / Visual C + 6.0三、实验内容与过程(含程序清单及流程图)1、必做题(1) 在一个递增有序的线性表中利用线性查找法查找数据元素X。(2) 在一个递增有序的线性表中利用二分查找法查找数据元素X。2、选做题(3)构造一个哈希表,哈希函数采用除留余数法,哈希冲突解决方法采用 链地址法。设计一个测试程序进行测试。提示:构造哈希表只是完成查找的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论