当前位置:文档之家› 大数据结构-实验8查找地算法

大数据结构-实验8查找地算法

大数据结构-实验8查找地算法
大数据结构-实验8查找地算法

8.1 实现顺序查找的算法

一,实验目的

1.熟悉掌握各种查找方法,深刻理解各种查找算法及其执行的过程;

2.学会分析各种查找算法的性能。

二,实验内容

8.1 实现顺序查找的算法

编写一个程序,输出在顺序表{3,6,2,10,1,8,5,7,4,9}中采用顺序查找法查找

关键字5的结果。

8.2 实现折半查找算法

编写一个程序,输出在顺序表{1,2,3,4,5,6,7,8,9,10}中采用折半查找方法查

找关键字9的结果。要求:(1)用非递归方法;(2)用递归方法。

8.3 实现二叉排序树的基本运算

编写一个程序实现二叉排序树的基本运算,并在此基础上完成如下功能:

(1)由{4,9,0,1,8,6,3,5,2,7}创建一个二叉排序树bt;

(2)判断bt是否为一棵二叉排序树(提示:在遍历过程中检查是否符合二叉

排序树定义);

(3)采用非递归方法查找关键字为6的结点,并输出其查找路径(提示:查找过程中保留经过的结点信息,找到后顺序输出之)。

8.4 实现哈希表的相关运算

编写一个程序,实现哈希表的相关运算,并在此基础上完成如下功能:

(1)建立{16,74,60,43,54,90,46,31,29,88,77}哈希表A[0…12],哈希函数为H(k)=key % 11,并采用线性探测法解决冲突。输出哈希表;

(2)在上述哈希表中查找关键字为29的记录;

(3)在上述哈希表中删除关键字为77的记录,再将其插入,然后输出哈希表。

要求:输出格式

哈希地址:0 1 2 (12)

关键字值:……………………

三,源代码及结果截图

8.1

//实现顺序查找的算法

#include

#define MAXL 100 //定义表中最多记录个数

typedef int KeyType;

typedef int InfoType;

typedef struct

{

KeyType key; //KeyType为关键字的数据类型

InfoType data; //其他数据

} NodeType;

typedef NodeType SeqList[MAXL]; //顺序表类型int Search(SeqList R,int n,KeyType k) //顺序查找算法

{

int i=0;

while (i

{

printf("%d ",R[i].key);

i++; //从表头往后找

}

if (i>=n)

return -1;

else

{

printf("%d",R[i].key);

return i;

}

}

void main()

{

SeqList R;

int n=10;

KeyType k=5;

InfoType a[]={3,6,2,10,1,8,5,7,4,9};

int i;

for (i=0;i

R[i].key=a[i];

printf("查找结果:\n");

if ((i=Search(R,n,k))!=-1)

printf("\n元素%d的位置是:%d",k,i);

else

printf("\n元素%d不在表中\n",k);

printf("\n");

}

8.2

//实现折半查找算法

#include

#define MAXL 100 //定义表中最多记录个数

typedef int KeyType;

typedef char InfoType[10];

typedef struct

{

KeyType key; //KeyType为关键字的数据类型

InfoType data; //其他数据

} NodeType;

typedef NodeType SeqList[MAXL]; //顺序表类型

int BinSearch1(SeqList R,int n,KeyType k) //非递归二分查找算法

{

int low=0,high=n-1,mid,count=0;

while (low<=high)

{

mid=(low+high)/2;

printf("第%d次查找:在[%d,%d]中查找到元素R[%d]:%d\n",++count,low,high,mid,R[mid].key);

if (R[mid].key==k) //查找成功返回

return mid;

if (R[mid].key>k) //继续在R[low..mid-1]中查找

high=mid-1;

else

low=mid+1; //继续在R[mid+1..high]中查找}

return -1;

}

int BinSearch2(SeqList R,KeyType k,int low,int high,int count) //递归二分查找算法

{

int mid;

if(low<=high)

{

mid=(low+high)/2;

printf("第%d次查找:在[%d,%d]中查找到元素R[%d]:%d\n",++count,low,high,mid,R[mid].key);

if (R[mid].key==k) //查找成功返回

return mid;

else if (R[mid].key>k) //继续在R[low..mid-1]中查找

BinSearch2(R, k,low,mid-1,count);

else

BinSearch2(R, k,mid+1,high,count); //继续在R[mid+1..high]中查找

}

else return -1;

}

void main()

{

SeqList R;

KeyType k=9;

int a[]={1,2,3,4,5,6,7,8,9,10},i,n=10;

for (i=0;i

printf("用非递归方法:\n");

if ((i=BinSearch1(R,n,k))!=-1)

printf("元素%d的位置是%d\n",k,i);

else

printf("元素%d不在表中\n",k);

printf("用递归方法:\n");

if ((i=BinSearch2(R,k,0,9,0))!=-1)

printf("元素%d的位置是%d\n",k,i);

else

printf("元素%d不在表中\n",k);

}

8.3

//实现二叉排序树的基本运算

#include //EOF,NULL

#include //atoi( )

#include //cout,cin typedef int Status;

typedef struct BTNode

{

int key;

struct BTNode *lchild;

struct BTNode *rchild;

}BTNode;

//定义二叉排序树插入结点的算法int BSTInsert(BTNode *&T,int k) {

if(T==NULL)

{

T=(BTNode *)malloc(sizeof(BTNode));

T->lchild=T->rchild=NULL;

T->key=k;

return 1;

}

else

{

if(k==T->key)

return 0;

else if(kkey)

return BSTInsert(T->lchild, k);

else

return BSTInsert(T->rchild, k);

}

}

//定义二叉排序树的创建算法

BTNode *createBST(int k[],int n)

{

BTNode *T;

T=NULL;

for(int i=0;i<=n-1;i++){

BSTInsert(T,k[i]);

}

return T;

}

//判断是否为二叉排序树

Status Judge(BTNode *&T)

{

if(T==NULL)

return 1;

else if((T>T->lchild)&&(Trchild)) {

Judge(T->lchild);

Judge(T->rchild);

}

else return 0;

}

//定义二叉排序树的查找算法

BTNode *BSTSearch(BTNode *&T,int k) {

if(T==NULL)

return NULL;

else

{ printf("%d ",T->key);

if(T->key==k)

return T;

else if(kkey)

{

return BSTSearch(T->lchild, k);

}

else

{

return BSTSearch(T->rchild, k);

}

}

}

void main()

{

int a[50]={4,9,0,1,8,6,3,5,2,7};

BTNode *bt=createBST(a,10);

if(Judge(bt)==0) cout<<"bt不是二叉排序树"<

else cout<<"bt是二叉排序树"<

cout<<"查找关键字6的查找路径:"<

BTNode *t=BSTSearch(bt,6);

cout<

}

8.4

//实现哈希表的相关运算

#include

#define MaxSize 100 //定义最大哈希表长度

#define NULLKEY 0 //定义空关键字值

#define DELKEY -1 //定义被删关键字值

typedef int KeyType; //关键字类型

typedef char * InfoType; //其他数据类型

typedef struct

{

KeyType key; //关键字域

InfoType data; //其他数据域

int count; //探查次数域

} HashTable[MaxSize]; //哈希表类型

void InsertHT(HashTable ha,int *n,KeyType k,int p) //将关键字k插入到哈希表中

{

int i,adr;

adr=k % p;

if (ha[adr].key==NULLKEY || ha[adr].key==DELKEY) //x[j]可以直接放在哈希表中

{

ha[adr].key=k;

ha[adr].count=1;

}

else //发生冲突时采用线性探查法解决冲突

{

i=1; //i记录x[j]发生冲突的次数

do

{

adr=(adr+1) % p;

i++;

} while (ha[adr].key!=NULLKEY && ha[adr].key!=DELKEY);

ha[adr].key=k;

ha[adr].count=i;

}

n++;

}

void CreateHT(HashTable ha,KeyType x[],int n,int m,int p) //创建哈希表

{

int i,n1=0;

for (i=0;i

{

ha[i].key=NULLKEY;

ha[i].count=0;

}

for (i=0;i

InsertHT(ha,&n1,x[i],p);

}

int SearchHT(HashTable ha,int p,KeyType k) //在哈希表中查找关键字k {

int i=0,adr;

adr=k % p;

while (ha[adr].key!=NULLKEY && ha[adr].key!=k)

{

i++; //采用线性探查法找下一个地址

adr=(adr+1) % p;

}

if (ha[adr].key==k) //查找成功

return adr;

else //查找失败

return -1;

}

int DeleteHT(HashTable ha,int p,int k,int *n) //删除哈希表中关键字k {

int adr;

adr=SearchHT(ha,p,k);

if (adr!=-1) //在哈希表中找到该关键字

{

ha[adr].key=DELKEY;

n--; //哈希表长度减1

return 1;

}

else //在哈希表中未找到该关键字

return 0;

}

void DispHT(HashTable ha,int n,int m) //输出哈希表

{

float avg=0;

int i;

printf(" 哈希表地址:\t");

for (i=0;i

printf(" %3d",i);

printf(" \n");

printf(" 哈希表关键字:\t");

for (i=0;i

if (ha[i].key==NULLKEY || ha[i].key==DELKEY) printf(" "); //输出3个空格

else

printf(" %3d",ha[i].key);

printf(" \n");

printf(" 搜索次数:\t");

for (i=0;i

if (ha[i].key==NULLKEY || ha[i].key==DELKEY) printf(" "); //输出3个空格

else

printf(" %3d",ha[i].count);

printf(" \n");

for (i=0;i

if (ha[i].key!=NULLKEY && ha[i].key!=DELKEY) avg=avg+ha[i].count;

avg=avg/n;

printf(" 平均搜索长度ASL(%d)=%g\n",n,avg);

}

void main()

{

int x[]={16,74,60,43,54,90,46,31,29,88,77};

int n=11,m=13,p=13,i,k=29;

HashTable ha;

CreateHT(ha,x,n,m,p);

printf("\n");DispHT(ha,n,m);

printf(" 查找关键字29:\n");

i=SearchHT(ha,p,k);

if (i!=-1)

printf(" ha[%d].key=%d\n",i,k);

else

printf(" 未找到%d\n",k);

k=77;

printf(" 删除关键字%d\n",k);

DeleteHT(ha,p,k,&n);

DispHT(ha,n,m);

i=SearchHT(ha,p,k);

if (i!=-1)

printf(" ha[%d].key=%d\n",i,k);

else

printf(" 未找到%d\n",k);

printf(" 插入关键字%d\n",k);

InsertHT(ha,&n,k,p);

DispHT(ha,n,m);

printf("\n");

}

四,实验小结

1、通过本次实验,加深了我对查找表的认识。

2、有序表的查找之折半查找:前提必须是有序表,性能只有在均匀分布的时候才是最

优的。

3、二叉排序树查找:通过一系列的查找和插入过程形成的树。之所以叫做排序树,因

为按照中序遍历可得一个有序的序列。

数据结构与算法设计实验

《数据结构与算法设计》 实验报告 ——实验二 学院:自动化学院 班级: 学号: : 一、实验目的

按照四则运算加、减、乘、除、幂(^)和括号的优先关系和惯例,编写计算器程序。 二、实验容 简单计算器。 请按照四则运算加、减、乘、除、幂(^)和括号的优先关系和惯例,编写计算器程序。要求: ①从键盘输入一个完整的表达式,以回车作为表达式输入结束的标志。 ②输入表达式中的数值均为大于等于零的整数。中间的计算过程如果出现小数也只取 整。 例如,输入:4+2*5= 输出:14 输入:(4+2)*(2-10)= 输出:-48 三、程序设计 概要设计 1、宏定义 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 2、基本函数: (1)void InitStack_char(SqStack *S) //char型栈初始化 (2)void InitStack_int(sqStack *S) //int型栈初始化 (3)void Push_char(SqStack *S,char ch) //char型元素进栈 (4)void Push_int(sqStack *S,int num) //int型元素进栈 (5)char GetTop_char(SqStack *S) //取char型栈顶元素 (6)int GetTop_int(sqStack *S) //取int型栈顶元素 (7)Status In(char c) //判断是否为运算符,若是运算符则返回,否则返回 (8)char Precede(char a,char b) //判断两运算符的先后次序 (9)Status Pop_char(SqStack *S,char &x) //char型栈出栈 (10)Status Pop_int(sqStack *S,int &x) //int型栈出栈 (11)int Operate(int a,char theta,int b) //计算a和b运算结果 3、流程图

数据处理的基本方法

第六节数据处理的基本方法 前面我们已经讨论了测量与误差的基本概念,测量结果的最佳值、误差和不确定度的计算。然而,我们进行实验的最终目的是为了通过数据的获得和处理,从中揭示出有关物理量的关系,或找出事物的内在规律性,或验证某种理论的正确性,或为以后的实验准备依据。因而,需要对所获得的数据进行正确的处理,数据处理贯穿于从获得原始数据到得出结论的整个实验过程。包括数据记录、整理、计算、作图、分析等方面涉及数据运算的处理方法。常用的数据处理方法有:列表法、图示法、图解法、逐差法和最小二乘线性拟合法等,下面分别予以简单讨论。 列表法是将实验所获得的数据用表格的形式进行排列的数据处理方法。列表法的作用有两种:一是记录实验数据,二是能显示出物理量间的对应关系。其优点是,能对大量的杂乱无章的数据进行归纳整理,使之既有条不紊,又简明醒目;既有助于表现物理量之间的关系,又便于及时地检查和发现实验数据是否合理,减少或避免测量错误;同时,也为作图法等处理数据奠定了基础。 用列表的方法记录和处理数据是一种良好的科学工作习惯,要设 计出一个栏目清楚、行列分明的表格,也需要在实验中不断训练,逐步掌握、熟练,并形成习惯。 一般来讲,在用列表法处理数据时,应遵从如下原则:

(1) 栏目条理清楚,简单明了,便于显示有关物理量的关系。 (2) 在栏目中,应给出有关物理量的符号,并标明单位(一般不重复写在每个数据的后面)。 (3) 填入表中的数字应是有效数字。 (4) 必要时需要加以注释说明。 例如,用螺旋测微计测量钢球直径的实验数据列表处理如下。 用螺旋测微计测量钢球直径的数据记录表 从表中,可计算出 D i D = n = 5.9967 ( mm)

数据结构与算法实验指导实验十

#include"stdio.h" #include"stdlib.h" #define NULL 0 #define maxsize 50 typedef struct node{ char data; struct node *lchild,*rchild; }Bitree; int a[maxsize]; int temp=0; Bitree *Q[maxsize]; Bitree *Creatree(){ char ch; int front,rear; Bitree *T,*S; T=NULL; front=1;rear=0; printf("建立二叉树,以@表示虚节点,以#结束输入:\n"); ch=getchar(); while(ch!='#'){ S=NULL; if(ch!='@'){ //@表示虚节点不是虚节点是建立新节点 S=(Bitree *)malloc(sizeof(Bitree)); S->data=ch; S->lchild=S->rchild=NULL; } rear++;Q[rear]=S; //将虚节点指针NULL或新节点地址入队 if(rear==1) T=S; //输入第一个节点为根节点 else{ if(S!=NULL&&Q[front]!=NULL) if(rear%2==0) Q[front]->lchild=S; else Q[front]->rchild=S; if(rear%2==1) front++; //节点Q[front]的两个孩子已经处理完毕,front+1 } ch=getchar(); } return T; } void Inorder(Bitree *T){ //中序遍历二叉树,并将每个结点数据存入数组中if(T!=NULL){ Inorder(T->lchild);

数据结构与算法C语言版期末复习题

《数据结构与算法》期末复习题 一、选择题。 1.在数据结构中,从逻辑上可以把数据结构分为 C 。 A.动态结构和静态结构B.紧凑结构和非紧凑结构 C.线性结构和非线性结构D.内部结构和外部结构 2.数据结构在计算机内存中的表示是指 A 。 A.数据的存储结构B.数据结构C.数据的逻辑结构D.数据元素之间的关系 3.在数据结构中,与所使用的计算机无关的是数据的 A 结构。 A.逻辑B.存储C.逻辑和存储D.物理 4.在存储数据时,通常不仅要存储各数据元素的值,而且还要存储 C 。 A.数据的处理方法B.数据元素的类型 C.数据元素之间的关系D.数据的存储方法 5.在决定选取何种存储结构时,一般不考虑 A 。 A.各结点的值如何B.结点个数的多少 C.对数据有哪些运算D.所用的编程语言实现这种结构是否方便。 6.以下说法正确的是 D 。 A.数据项是数据的基本单位 B.数据元素是数据的最小单位 C.数据结构是带结构的数据项的集合 D.一些表面上很不相同的数据可以有相同的逻辑结构 7.算法分析的目的是 C ,算法分析的两个主要方面是 A 。 (1)A.找出数据结构的合理性B.研究算法中的输入和输出的关系C.分析算法的效率以求改进C.分析算法的易读性和文档性 (2)A.空间复杂度和时间复杂度B.正确性和简明性 C.可读性和文档性D.数据复杂性和程序复杂性 8.下面程序段的时间复杂度是O(n2) 。 s =0; for( I =0; i

算法与数据结构实验

学生实验报告册 (理工类) 课程名称:算法与数据结构专业班级 学生学号:学生: 所属院部:计算机工程学院指导教师:章海鸥 2016 ——2017 学年第 1 学期 金陵科技学院教务处制 实验报告书写要求 实验报告原则上要求学生手写,要求书写工整。若因课程特点需打印的,要遵照以下字体、字号、间距等的具体要求。纸一律采用 A4的纸。

实验报告书写说明 实验报告中一至四项容为必填项,包括实验目的和要求;实验仪器和设备;实验容与过程;实验结果与分析。各院部可根据学科特点和实验具体要求增加项目。 填写注意事项 (1)细致观察,及时、准确、如实记录。 (2)准确说明,层次清晰。 (3)尽量采用专用术语来说明事物。 (4)外文、符号、公式要准确,应使用统一规定的名词和符号。 (5)应独立完成实验报告的书写,严禁抄袭、复印,一经发现,以零分论处。 实验报告批改说明 实验报告的批改要及时、认真、仔细,一律用红色笔批改。实验报告的批改成绩采用百分制,具体评分标准由各院部自行制定。 实验报告装订要求 实验批改完毕后,任课老师将每门课程的每个实验项目的实验报告以自然班为单位、按学号升序排列,装订成册,并附上一份该门课程的实验大纲。

实验项目名称:顺序表实验学时: 2 同组学生:╱实验地点: 实验日期:实验成绩: 批改教师:批改时间:

实验1 顺序表 一、实验目的和要求 掌握顺序表的定位、插入、删除等操作。 二、实验仪器和设备 VC6.0 三、实验容与过程(含程序清单及流程图) 1、必做题 (1)编写程序建立一个顺序表,并逐个输出顺序表中所有数据元素的值。 编写主函数测试结果。 (2)编写顺序表定位操作子函数,在顺序表中查找是否存在数据元素x。 如果存在,返回顺序表中和x值相等的第1个数据元素的序号(序号 从0开始编号);如果不存在,返回-1。编写主函数测试结果。 (3)在递增有序的顺序表中插入一个新结点x,保持顺序表的有序性。 解题思路:首先查找插入的位置,再移位,最后进行插入操作;从第 一个元素开始找到第一个大于该新结点值x的元素位置i即为插入位 置;然后将从表尾开始依次将元素后移一个位置直至元素i;最后将 新结点x插入到i位置。 (4)删除顺序表中所有等于X的数据元素。 2、选做题 (5)已知两个顺序表A和B按元素值递增有序排列,要求写一算法实现将A和B归并成一个按元素值递减有序排列的顺序表(允许表中含有值 相同的元素)。 程序清单: (1) #include #define maxsize 20 typedef int datatype; typedef struct{ datatype data[maxsize];

计算机学院数据结构与算法分析期末试题(2007级B)_无答案

四川大学期末考试试题 (2008-2009学年第1学期) 课程号:课程名称:数据结构与算法分析(B卷)任课教师: 1.数据类型为()。 A)数据项的集合B)值的集合及定义在其上的一组操作的总称 C)数据元素的集合D)关键字的集合 2.链表不具有的特点是()。 A)可随机直接访问任一元素B)插入删除不需要移动元素 C)不必事先估计元素个数D)所需空间与线性表长度成正比 3.设一个栈的入栈序列是ABCD,则借助于一个栈所得到的出栈序列不可能是()。 A)ABCD B)DCBA C)ABCD D)DABC 4.将对称矩阵A nxn压缩存储在一维数组B[m]中,则m的值至少为()。 A)n(n+1)/2 B)n(n-1)/2 C)n(n+1) D)n2 5.设二叉树中有n2个度为2的结点,n1个度为1的结点,n0个叶子结点,则此二叉树中空指针域个数为()。 A)n0+n1+n2 B)n2+n1+2n0 C)2n2+n1D)2n0+n1 6.对于具有n个顶点的强连图,其弧条数的最小值为()。 A)n+1 B)n C)n-1 D)n-2 7.一棵深度为k的平衡二叉树,其每个非终端结点的平衡因子均为0,则该树共有()个结点。 A)2k-1-1 B)2k-1C)2k-1+1 D)2k-1 8.归并排序的时间复杂度是()。 A)O(1) B)O(n) C)O(n2) D)O(nlogn) 9.每一趟都能选出一个元素放在其最终位置上,并且不稳定的排序算法是()。 A)冒泡排序B)简单选择排序C)希尔排序D)直接插入排序10.按照二叉树的定义,具有3个结点的不同形态(相似)的二叉树有()种。 A)3 B)4 C)5 D)6 二、(本题10分) 利用两个栈S1、S2模拟一个队列(如客户队列)时,如何用栈的运算实现队列的插入、删除运算,请简述算法思想。 三、(本题10分) 已知一棵二叉树的先序序列与中序序列分别如下,试画出此二叉树。 先序序列:ABCDEFGH IJ 中序序列:CBEDAGHFJI 注:试题字迹务必清晰,书写工整。本题2页,本页为第1页 教务处试题编号:

大学物理实验数据处理基本方法

实验数据处理基本方法 实验必须采集大量数据,数据处理是指从获得数据开始到得出最后结 论的整个加工过程,它包括数据记录、整理、计算与分析等,从而寻找出 测量对象的内在规律,正确地给出实验结果。因此,数据处理是实验工作 不可缺少的一部分。数据处理涉及的内容很多,这里只介绍常用的四种方 法。 1列表法 对一个物理量进行多次测量,或者测量几个量之间的函数关系,往往 借助于列表法把实验数据列成表格。其优点是,使大量数据表达清晰醒目, 条理化,易于检查数据和发现问题,避免差错,同时有助于反映出物理量 之间的对应关系。所以,设计一个简明醒目、合理美观的数据表格,是每 一个同学都要掌握的基本技能。 列表没有统一的格式,但所设计的表格要能充分反映上述优点,应注意以下几点:1.各栏目均应注明所记录的物理量的名称(符号 )和单位; 2.栏目的顺序应充分注意数据间的联系和计算顺序,力求简明、齐全、有条理; 3.表中的原始测量数据应正确反映有效数字,数据不应随便涂改,确实要修改数据时, 应将原来数据画条杠以备随时查验; 4.对于函数关系的数据表格,应按自变量由小到大或由大到小的顺序排列,以便于判 断和处理。 2图解法 图线能够明显地表示出实验数据间的关系,并且通过它可以找出两个 量之间的数学关系,因此图解法是实验数据处理的重要方法之一。图解法 处理数据,首先要画出合乎规范的图线,其要点如下: 1.选择图纸作图纸有直角坐标纸 ( 即毫米方格纸 ) 、对数坐标纸和 极坐标纸等,根据 作图需要选择。在物理实验中比较常用的是毫米方格纸,其规格多为17 25 cm 。 2.曲线改直由于直线最易描绘 , 且直线方程的两个参数 ( 斜率和截距 ) 也较易算得。所以对于两个变量之间的函数关系是非线性的情形,在用图解法时 应尽可能通过变量代换 将非线性的函数曲线转变为线性函数的直线。下面为几种常用的变换方法。 ( 1) xy c ( c 为常数 ) 。 令 z 1,则 y cz,即 y 与 z 为线性关系。 x ( 2) x c y ( c 为常x2,y 1 z ,即 y 与为线性关系。

算法与数据结构实验册

实验报告书写要求 实验报告原则上要求学生手写,要求书写工整。若因课程特点需打印的,要遵照以下字体、字号、间距等的具体要求。纸张一律采用A4的纸张。 实验报告书写说明 实验报告中一至四项内容为必填项,包括实验目的和要求;实验仪器和设备;实验内容与过程;实验结果与分析。各院部可根据学科特点和实验具体要求增加项目。 填写注意事项 (1)细致观察,及时、准确、如实记录。 (2)准确说明,层次清晰。 (3)尽量采用专用术语来说明事物。 (4)外文、符号、公式要准确,应使用统一规定的名词和符号。 (5)应独立完成实验报告的书写,严禁抄袭、复印,一经发现,以零分论处。 实验报告批改说明 实验报告的批改要及时、认真、仔细,一律用红色笔批改。实验报告的批改成绩采用百分制,具体评分标准由各院部自行制定。 实验报告装订要求 实验批改完毕后,任课老师将每门课程的每个实验项目的实验报告以自然班为单位、按学号升序排列,装订成册,并附上一份该门课 程的实验大纲。

实验项目名称:顺序表实验学时: 2 同组学生姓名:全班同学实验地点: 1318 实验日期: 10 月14号实验成绩: 批改教师:批改时间:

实验1 顺序表 一、实验目的和要求 掌握顺序表的定位、插入、删除等操作。 二、实验仪器和设备 Turbo C 2.0 三、实验内容与过程(含程序清单及流程图) 1、必做题 (1)编写程序建立一个数续表,并逐个输出顺序表中所有数据元素的值。 编写主函数测试结果。 (2)编写顺序表定位操作子函数,在顺序表中查找是否存在数据元素x。 如果存在,返回顺序表中和x值相等的第1个数据元素的序号(序号 从0开始编号);如果不存在,返回-1。编写主函数测试结果。 (3)在递增有序的顺序表中插入一个新结点x,保持顺序表的有序性。 解题思路:首先查找插入的位置,再移位,最后进行插入操作;从第 一个元素开始找到第一个大于该新结点值x的元素位置i即为插入位 置;然后将从表尾开始依次将元素后移一个位置直至元素i;最后将新 结点x插入到i位置。 (4)删除顺序表中所有等于X的数据元素。 2、选做题 (5)已知两个顺序表A和B按元素值递增有序排列,要求写一算法实现将A和B归并成一个按元素值递减有序排列的顺序表(允许表中含有值 相同的元素)。 程序清单: 第一题: #include #define maxsize 100 typedef struct{ int datatype [maxsize]; int last; }sequenlist; void main(){ sequenlist a={{1,2,3,4},4}; for(int i=0;i

计科本科生《算法与数据结构》实验报告4

学院专业姓名学号 实验1:约瑟夫环问题(3学时) [问题描述] 将编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个开始按顺时针方向自1开始报数,报到m时停止报数。报m的人出列,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。 [实验目的] (1)掌握线性表的顺序存储结构和循环顺序存储结构。 [实验内容及要求] (1)构造数据结构。 (2)对线性表进行初始化。 [测试数据] 输入一组n,m值时,程序输出出列顺序。 [思考] (1)你采用的存储结构是顺序表还是循环顺序表?哪个比较合适? (2)当存储结构为循环链表时,如何修改你的程序?并考虑两种存储结构的优缺点。

学院专业姓名学号 实验2:ADT List(线性表)(3学时) [问题描述] 线性表是典型的线性结构,实现ADT List,并在此基础上实现两个集合的交运算或并运算。[实验目的] (1)掌握线性表的链表存储结构。 (2)掌握在单链表上基本操作的实现。 (3)在掌握单链表的基本操作上进行综合题的实现。 [实验内容及要求] (1)要求用带头结点的单链表存储两个集合中的元素和最终的结果。 (2)集合的元素限定为十进制数,程序应对出现重复的数据进行过滤,即链表中没有重复数据。 (3)显示两个集合的内容及其运算结果。 [测试数据] (1)set1={3, 8, 5, 8,11},set2={22, 6, 8, 3, 15,11,20 } set1∪set2= set1∩set2= (2)set1={1, 3, 5, 7},set2={2, 3, 7, 14, 25,38} set1∪set2= set1∩set2=

北京交通大学数据结构与算法期末测验考试参考答案

北京交通大学考试试题(A卷) 课程名称:数据结构与算法2011-2012学年第一学期出题教师:张勇 (请考生注意:(1)本试卷共有六道大题,(2)答案一律写在答题纸上,(3)试卷不得带出考场) 1. 在顺序表中访问任意一个元素的时间复杂度均为,因此顺序表也称为 的数据结构。 2.三维数组a[4][3][2](下标从0开始),假设a[0][0][0]的地址为50,数据以行序优先方式存储,每个元素的长度为2字节,则a[2][1][1]的地址是。 3. 直接插入排序用监视哨的作用是。 4. 已知广义表Ls=(a, (b, c), (d, e)), 运用head和tail函数取出Ls中的原子d的运算 是。 5.对有14个元素的有序表A[1..14]进行折半查找,当比较到A[4]时算法结束。被比较元素除A[4]外,还有。 6. 在AOV网中,顶点表示,边表示。 7. 有向图G可进行拓扑排序的判别条件是。 8. 若串S1=‘ABCDEFGHIJK’,S2=‘451223’,S3=‘####’,则执行 Substring(S1,Strlength(S3),Index(S2,‘12’,1))的结果是。 二、选择题(每空2分,共20分) 1.在下列存储形式中,哪一个不是树的存储形式?() A.双亲表示法B.孩子链表表示法 C.孩子兄弟表示法D.顺序存储表示法 2.查找n个元素的有序表时,最有效的查找方法是()。 A.顺序查找B.分块查找 C.折半查找D.二叉查找 3.将所示的s所指结点加到p所指结点之后,其语句应为()。 p (A) s->next=p+1 ; p->next=s;

(B) (*p).next=s; (*s).next=(*p).next; (C) s->next=p->next ; p->next=s->next; (D) s->next=p->next ; p->next=s; 4. 在有向图的邻接表存储结构中,顶点v 在链表中出现的次数是( )。 A. 顶点v 的度 B. 顶点v 的出度 C. 顶点v 的入度 D. 依附于顶点v 的边数 5. 算法的时间复杂度为O (nlog 2n )、空间复杂度为O(1)的排序算法是( )。 A. 堆排序 B. 快速排序 C. 归并排序 D.直接选择 6. 设矩阵A 是一个对称矩阵,为了节省存储,将其 下三角部分(如右图所示)按行序存放在一维数组B[ 1, n(n-1)/2 ]中,对下三角部分中任一元素ai,j(i ≤j), 在一维数组B 中下标k 的值是( ): A.i(i-1)/2+j-1 B.i(i-1)/2+j C.i(i+1)/2+j-1 D.i(i+1)/2+j 7. 由一个长度为11的有序表,按二分查找法对该表进行查找,在表内各元素等概率情 况下,查找成功的平均查找长度是( )。 A .29/11 B. 31/11 C. 33/11 D.35/11 8. AVL 树是一种平衡的二叉排序树,树中任一结点的( )。 A. 左、右子树的高度均相同 B. 左、右子树高度差的绝对值不超过1 C. 左子树的高度均大于右子树的高度 D. 左子树的高度均小于右子树的高度 9. 下列四种排序方法中,不稳定的方法是( )。 A. 直接插入排序 B. 冒泡排序 C. 归并排序 D. 堆排序 10. 设树的度为4,其中度为1,2,3,4的结点个数分别为4, 2, ,1, 1, 则T 中的叶子数为 ( )。 A .5 B .6 C .7 D .8 三、 判断题(10分,每小题1分) 1. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。( ) 2. 数组不适合作任何二叉树的存储结构。( ) 3. 广义表的取表尾运算,其结果通常是个表,但有时也可是个原子。( ) 4. 在含有n 个结点的树中,边数只能是n-1条。( ) 5. 所谓一个排序算法是否稳定,是指该算法在各种情况下的效率是否相差不大。( ) 6. 简单选择排序在最好情况下的时间复杂度为O(n)。( ) 7. 在二叉排序树中插入一个新结点,总是插入到叶结点下面。( ) 8. 采用线性探测处理冲突,当从哈希表中删除一个记录时,不应将该记录所在位置置 空,因为这会影响以后的查找。( ) 9. 有n 个数存放在一维数组A[1..n]中,在进行顺序查找时,这n 个数的排列有序或无 ?????? ? ???? ? ??=n n n n a a a a a a A ,2,1,2 ,21,21 ,1Λ Λ

实验数据处理的几种方法

实验数据处理的几种方法 物理实验中测量得到的许多数据需要处理后才能表示测量的最终结果。对实验数据进行记录、整理、计算、分析、拟合等,从中获得实验结果和寻找物理量变化规律或经验公式的过程就是数据处理。它是实验方法的一个重要组成部分,是实验课的基本训练内容。本章主要介绍列表法、作图法、图解法、逐差法和最小二乘法。 1.4.1 列表法 列表法就是将一组实验数据和计算的中间数据依据一定的形式和顺序列成表格。列表法可以简单明确地表示出物理量之间的对应关系,便于分析和发现资料的规律性,也有助于检查和发现实验中的问题,这就是列表法的优点。设计记录表格时要做到:(1)表格设计要合理,以利于记录、检查、运算和分析。 (2)表格中涉及的各物理量,其符号、单位及量值的数量级均要表示清楚。但不要把单位写在数字后。 (3)表中数据要正确反映测量结果的有效数字和不确定度。列入表中的除原始数据外,计算过程中的一些中间结果和最后结果也可以列入表中。 (4)表格要加上必要的说明。实验室所给的数据或查得的单项数据应列在表格的上部,说明写在表格的下部。 1.4.2 作图法 作图法是在坐标纸上用图线表示物理量之间的关系,揭示物理量之间的联系。作图法既有简明、形象、直观、便于比较研究实验结果等优点,它是一种最常用的数据处理方法。 作图法的基本规则是: (1)根据函数关系选择适当的坐标纸(如直角坐标纸,单对数坐标纸,双对数坐标纸,极坐标纸等)和比例,画出坐标轴,标明物理量符号、单位和刻度值,并写明测试条件。 (2)坐标的原点不一定是变量的零点,可根据测试范围加以选择。,坐标分格最好使最低数字的一个单位可靠数与坐标最小分度相当。纵横坐标比例要恰当,以使图线居中。 (3)描点和连线。根据测量数据,用直尺和笔尖使其函数对应的实验点准确地落在相应的位置。一张图纸上画上几条实验曲线时,每条图线应用不同的标记如“+”、“×”、“·”、“Δ”等符号标出,以免混淆。连线时,要顾及到数据点,使曲线呈光滑曲线(含直线),并使数据点均匀分布在曲线(直线)的两侧,且尽量贴近曲线。个别偏离过大的点要重新审核,属过失误差的应剔去。 (4)标明图名,即做好实验图线后,应在图纸下方或空白的明显位置处,写上图的名称、作者和作图日期,有时还要附上简单的说明,如实验条件等,使读者一目了然。作图时,一般将纵轴代表的物理量写在前面,横轴代表的物理量写在后面,中间用“~”

数据结构与算法的实验报告

数据结构与算法第二次实验报告 电子105班 赵萌 2010021526

实验二:栈和队列的定义及基本操作 一、实验目的: . 熟练掌握栈和队列的特点 . 掌握栈的定义和基本操作,熟练掌握顺序栈的操作及应用 . 掌握对列的定义和基本操作,熟练掌握链式队列的操作及应用, 掌握环形队列的入队和出队等基本操作 . 加深对栈结构和队列结构的理解,逐步培养解决实际问题的编程能力 二、实验内容: 定义顺序栈,完成栈的基本操作:空栈、入栈、出栈、取栈顶元素; 实现十进制数与八进制数的转换; 定义链式队列,完成队列的基本操作:入队和出队; 1.问题描述: (1)利用栈的顺序存储结构,设计一组输入数据(假定为一组整数),能够对顺序栈进行如下操作: . 初始化一个空栈,分配一段连续的存储空间,且设定好栈顶和栈底; . 完成一个元素的入栈操作,修改栈顶指针; . 完成一个元素的出栈操作,修改栈顶指针; . 读取栈顶指针所指向的元素的值; . 将十进制数N 和其它d 进制数的转换是计算机实现计算的基本问题,其解决方案很多,其中最简单方法基于下列原理:即除 d 取余法。例如:(1348)10=(2504)8 N N div 8 N mod 8 1348 168 4 168 21 0 21 2 5 2 0 2 从中我们可以看出,最先产生的余数 4 是转换结果的最低位,这正好符合栈的特性即后进先出的特性。 所以可以用顺序栈来模拟这个过程。以此来实现十进制数与八进制数的转换; . 编写主程序,实现对各不同的算法调用。 (2)利用队列的链式存储结构,设计一组输入数据(假定为一组整数),能够对链式队列进行如下操作: . 初始化一个空队列,形成一个带表头结点的空队; . 完成一个元素的入队操作,修改队尾指针; . 完成一个元素的出队操作,修改队头指针; . 修改主程序,实现对各不同的算法调用。

数据结构与算法实验报告

竭诚为您提供优质文档/双击可除数据结构与算法实验报告 篇一:数据结构与算法实验报告-图 沈阳工程学院 学生实验报告 (课程名称:数据结构与算法) 实验题目: 班级网络本112学号27姓名郑乐乐地点F606指导教师吕海华祝世东实验日期:20XX年11月13日 1 2 3 4 篇二:《数据结构与算法》实验报告模板 软件工程系实验报告封面 课程名称:数据结构与算法 课程代码:ss1005 实验指导老师:钟迅科

实验报告名称: 本实验报告包括以下几个内容: 一、实验(实践)目的 二、实验(实践)环境 三、实验(实践)实现过程 四、实验(实践)分析与总结 五、指导教师评语与评分 我申明,本报告内的实验已按要求完成,报告完全是由我个人完成,并没有抄袭行为。我已经保留了这份实验报告的副本。 申明人(签名): 学生姓名:张三学号:1140888888教学班:FJ01递交日期:20XX年10月11日 篇三:数据结构与算法实验报告c++版 算法与数据结构 实验报告 实验一:栈与队列 一、实验目的 1、掌握栈和队列特点、逻辑结构和存储结构 2、熟悉对栈和队列的一些基本操作和具体的函数定义。 3、利用栈和队列的基本操作完成一定功能的程序。 二、实验任务

1.出顺序栈的类定义和函数实现,利用栈的基本操作完成十进制数n与其它d进制数 的转换。(如n=1357,d=8) 2.给出顺序队列的类定义和函数实现,并利用队列计算并打印杨辉三角的前n行的内 容。(n=8) 3.给出链栈的类定义和函数实现,并设计程序完成如下功能:读入一个有限大小的整 数n,并读入n个数,然后按照与输入次序相反的次序输出各元素的值。 三、实验原理 1、将十进制数n转化为d进制时,用除去余数法,用d 除n所得余数作为d进制当前个位,将相除所得的商的整数部分作为新的n值重复上述计算,直到n为0为止。将前所得到的各余数反过来连接便得到最终结果。将每次求出的余数入栈,求解结束后,再依次出栈。 2、在杨辉三角中可用上一行的数来求出对应位置的下一行的内容。用队列保存上行内容,每当由上行的两个数求出下行的一个数时,其中的前一个便需要删除,而求出的数就 入队。为便于求解,在每行的第一个位置添加一个0作为辅助。 3、输出操作应在读入所有输入的整数后才能进行,用

大学物理实验数据处理方法总结

有效数字 1、有效数字不同的数相加减时,以参加运算各量中有效数字最末一位位数最高的为准,最后结果与它对其,余下的尾数按舍入规则处理。 2、乘除法以参与运算的数值中有效位数最少的那个数为准,但当结果的第1位数较小,比如1、2、3时可以多保留一位(较小:结果的第一位数小于 有效数字最少的结果第一位数)! 例如:n=tg56° θ=56° d θ=1° θθθθθ2cos d d d dtg dn == 为保留) (,带入848.156n 15605.018056cos 1cos 22=?=∴?=??=≈?=?= ?tg n θθπθθ 3、可以数字只出现在最末一位:对函数运算以不损失有效数字为准。 例如:20*lg63.4 可疑最小位变化0.1 Y=20lgx 01.04 .631.010ln 2010ln 20ln 10ln 20≈===x dx dx dx x d dy 04.364.63lg 20=∴ 4、原始数据记录、测量结果最后表示,严格按有效数字规定处理。(中间过程、结果多算几次) 5、4舍5入6凑偶 6、不估计不确定度时,有效数字按相应运算法则取位;计算不确定度时以不确定度的处理结果为准。 真值和误差 1、 误差=测量值-真值 ΔN=N-A 2、 误差既有大小、方向与政府。 3、 通常真值和误差都是未知的。 4、 相对约定真值,误差可以求出。 5、 用相对误差比较测量结果的准确度。 6、 ΔN/A ≈ΔN/N 7、 系统误差、随机误差、粗大误差 8、 随机误差:统计意义下的分布规律。粗大误差:测量错误 9、 系统误差和随机误差在一定条件下相互转化。 不确定度 1、P (x )是概率密度函数 dx P dx x x P p )x (之间的概率是测量结果落在+当x 取遍所有可能的概率值为1. 2、正态分布且消除了系统误差,概率最大的位置是真值A 3、曲线“胖”精密度低“瘦”精密度高。 4、标准误差:无限次测量?∞∞-=-2 )()(dx X P A X x )(σ 有限次测量且真值不知道标准偏

数据结构与算法实验报告册

. . 河南工程学院 理学院学院 实验报告 (数据结构与算法) 学期: 课程: 专业: 班级: 学号: 姓名: 指导教师:

. . 目录 实验一线性表1(顺序表及单链表的合并) (1) 实验二线性表2(循环链表实现约瑟夫环) (1) 实验三栈和队列的应用(表达式求值和杨辉三角) (1) 实验四赫夫曼编码 实验五最小生成树 (1) 实验六排序算法

. . 实验一线性表1 一、实验学时:2学时 二、实验目的 1.了解线性表的逻辑结构特性是数据元素之间存在着线性关系。在计算机中 表示这种关系的两类不同的存储结构是顺序存储结构和链式存储结构。 2.熟练掌握这两类存储结构的描述方法以及线性表的基本操作在这两种存储 结构上的实现。 三、实验内容 1. 编写程序,实现顺序表的合并。 2. 编写程序,实现单链表的合并。 四、主要仪器设备及耗材 硬件:计算机一台 软件:VC++ 6.0,MSDN2003或者以上版本 五、算法设计 1. 顺序表合并的基本思想 程序流程图: 2. 单链表合并的基本思想 程序流程图 六、程序清单

. 七、实现结果 .

. 八、实验体会或对改进实验的建议.

. . 实验二线性表2 一、实验学时:2学时 二、实验目的 1.了解双向循环链表的逻辑结构特性,理解与单链表的区别与联系。 2.熟练掌握双向循环链表的存储结构以及基本操作。 三、实验内容 编写程序,采用循环链表实现约瑟夫环。 设有编号为1,2,……,n的n(n>0)个人围成一个圈,从第1个人开始报数,报到m时停止报数,报m的人出圈,再从他的下一个人起重新报数,报到m时停止报数,报m的出圈,……,如此下去,直到所有人全部出圈为止。当任意给定n和m后,设计算法求n个人出圈的次序。 四、主要仪器设备及耗材 硬件:计算机一台 软件:VC++ 6.0,MSDN2003或者以上版本 五、算法设计 约瑟夫环实现的基本思想 程序流程图: 六、程序清单

数据结构实验报告全集

数据结构实验报告全集 实验一线性表基本操作和简单程序 1.实验目的 (1)掌握使用Visual C++ 上机调试程序的基本方法; (2)掌握线性表的基本操作:初始化、插入、删除、取数据元素等运算在顺序存储结构和链表存储结构上的程序设计方法。 2.实验要求 (1)认真阅读和掌握和本实验相关的教材内容。 (2)认真阅读和掌握本章相关内容的程序。 (3)上机运行程序。 (4)保存和打印出程序的运行结果,并结合程序进行分析。 (5)按照你对线性表的操作需要,重新改写主程序并运行,打印出文件清单和运行结果 实验代码: 1)头文件模块 #include >验目的 掌握顺序栈的基本操作:初始化栈、判栈空否、入栈、出栈、取栈顶数据元素等运算以及程序实现方法。 2.实验要求 (1)认真阅读和掌握和本实验相关的教材内容。 (2)分析问题的要求,编写和调试完成程序。 (3)保存和打印出程序的运行结果,并分析程序的运行结果。 3.实验内容 利用栈的基本操作实现一个判断算术表达式中包含圆括号、方括号是否正确配对的程序。具体完成如下:

(1)定义栈的顺序存取结构。 (2)分别定义顺序栈的基本操作(初始化栈、判栈空否、入栈、出栈等)。 (3)定义一个函数用来判断算术表达式中包含圆括号、方括号是否正确配对。其中,括号配对共有四种情况:左右括号配对次序不正确;右括号多于左括号;左括号多于右括号;左右括号匹配正确。 (4)设计一个测试主函数进行测试。 (5)对程序的运行结果进行分析。 实验代码: #include < > #define MaxSize 100 typedef struct { int data[MaxSize]; int top; }SqStack;

数据结构与算法上海第二工业大学二工大期末考试试卷

选择题: 1、在数据结构中,线性结构中元素之间存在____关系。 A: 一对一 B: 一对多 C: 多对一 D: 多对多 2、数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的____和运算等的学科。 A: 结构 B: 关系 C: 操作 D: 算法 3、算法分析的两个主要方面是____。 A: 空间复杂度和时间复杂度 B: 正确性和简明性 C: 可读性和文档性 D: 数据复杂性和程序复杂性 4、顺序表中逻辑上相邻的节点其物理位置也____。 A: 一定相邻 B: 不必相邻 C: 按某种规律排列 D: 无要求 5、在一个单链表中,已知q所指结点是p所指结点的前驱结点,若在q和p之间插入s结点,则执行____。 A: s->next=p->next; p->next=s; B: p->next=s->next; s->next=p; C: q->next=s; s->next=p; D: p->next=s; s->next=q; 6、一个栈的入栈序列是a,b,c,d,e,则栈的不可能的输出序列是____。 A: edcba B: decba C: dceab D: abcde 7、循环队列用数组A[0,m-1]存放其元素值,已知其头尾指针分别是front和rear,则当前队列中的元素个数是____。 A: (rear-front+m)%m B: rear-front+1 C: rear-front-1 D: rear-front 8、关于空格串,下列说法中正确的有____。 A: 空格串就是空串

B: 空格串是零个字符的串 C: 空格串的长度为零 D: 空格串的长度就是其包含的空格个数 9、数组A中,每个元素A的长度为3个字节,行下标i从1到8,列下标j从1到10,从首地址SA开始连续存放在存储器内,该数组按行存放时,元素A[8][5]的起始地址为____。A: SA+140 B: SA+144 C: SA+222 D: SA+225 10、对于一棵满二叉树,m个树叶,n个节点,深度为h,则____。 A: n=h+m B: h+m=2n C: m=h-1 D: n=2h-1 11、具有65个结点的完全二叉树其深度为____。(根的层次号为1) A: 8 B: 7 C: 6 D: 5 12、满二叉树____二叉树。 A: 一定是完全 B: 不一定是完全 C: 不是 D: 不是完全 13、将一棵有100个节点的完全二叉树从上到下,从左到右依次对节点进行编号,根节点的编号为1,则编号为49的节点的左孩子编号为____。 A: 99 B: 98 C: 50 D: 48 14、如果T2是由森林T转换而来的二叉树,那么T中结点的后序遍历就是T2中结点的____。A: 先序遍历 B: 中序遍历 C: 后序遍历 D: 层次遍历 15、将递归算法转换成对应的非递归算法时,通常需要使用____。 A: 栈 B: 队列 C: 链表 D: 树 16、如果某二叉树的前序为stuwv,中序为uwtvs,那么该二叉树的后序为____。 A: uwvts B: vwuts C: wuvts

《算法与数据结构》实验报告(2014) 内蒙古大学

《算法与数据结构》实验报告 班级____________ 姓名___________ 学号_____________ 实验1:线性表的应用(6学时) [问题描述] 一个线性表A中包含有三类字符:数字字符、字母字符、其他字符。试写一个函数实现对线性表A的拆分,使得线性表A、B、C分别各自指向同一类字符。 [实验目的] (1)熟练掌握链表的基本操作; (2)运用链表解决实际问题。 [实验内容及要求] (1)首先通过输入字符建立线性表A; (2)在拆分时,必须使用原表A的结点空间,不能额外创建新结点; (3)拆分后,原表A指向数字字符,且其内容的前后次序与原表中的前后次序必须一致,新的表B指向字母字符,新的表C指向其他字符。其中要求删除B中 的重复结点(如“abbcdexec”,变为“abcdex”)。 (4)分别输出表A、B(删除重复结点后的内容)、C的内容; (5)判断拆分后的表A是否是中心对称的(如123321或12321都是中心对称的),若是,则输出1,否则输出0。 [示例输入/输出] 示例输入: 1aabccd2e3f(!3c<2g1> (用于创建原表A的输入字符串) 示例输出: 123321 (拆分后表A的内容) abcdef (拆分后表B的内容) (!<> (拆分后表C的内容) 1 (拆分后表A是中心对称的)

《算法与数据结构》实验报告 班级____________ 姓名___________ 学号_____________ 实验2:表达式求值(6学时) [问题描述] 表达式求值是计算机实现程序设计语言中的基本问题之一,也是栈应用的一个典型例子,通过本实验,对输入的一个表达式进行求值。 [实验目的] (1)掌握栈的应用; (2)掌握算符优先表达式求值的算法; (3)掌握字符串处理和数值的转换; (4)练习上述知识的综合应用。 [实验内容及要求] (1)表达式以字符串形式输入。如:12*(12.4+20.15)/25,结果以字符串形式输出(保留小数点后2位)。 (2)运算数是实数,运算符有+ - * / ,带括号,常用函数有:开方sqr()、正弦sin() 、余弦cos()、四舍五入取整rd()。函数的优先级高于+ - * /。 (3)能够有效判别表达式的输入格式是否有误(如缺失操作数、括号不匹配、函数名错误等),若输入错误,输出为“error!”。 [示例输入/输出] 示例输入: 12*(12.4+20.15)/25 15.4/(2-sin(5.12)*)+21 示例输出: 15.62 error!

算法与数据结构实验

学生实验报告册 (理工类) 金陵科技学院教务处制 实验报告书写要求 实验报告原则上要求学生手写,要求书写工整。若因课程特点需

打印的,要遵照以下字体、字号、间距等的具体要求。纸张一律采用A4的纸张。 实验报告书写说明 实验报告中一至四项内容为必填项,包括实验目的和要求;实验仪器和设备;实验内容与过程;实验结果与分析。各院部可根据学科特点和实验具体要求增加项目。 填写注意事项 (1)细致观察,及时、准确、如实记录。 (2)准确说明,层次清晰。 (3)尽量采用专用术语来说明事物。 (4)外文、符号、公式要准确,应使用统一规定的名词和符号。 (5)应独立完成实验报告的书写,严禁抄袭、复印,一经发现,以零分论处。 实验报告批改说明 实验报告的批改要及时、认真、仔细,一律用红色笔批改。实验报告的批改成绩采用百分制,具体评分标准由各院部自行制定。 实验报告装订要求 实验批改完毕后,任课老师将每门课程的每个实验项目的实验报告以自然班为单位、按学号升序排列,装订成册,并附上一份该门课程的实验大纲。

实验项目名称:顺序表实验学时: 2 同组学生姓名:实验地点:A101 实验日期: 4.5 实验成绩: 批改教师:批改时间:

实验1 顺序表 一、实验目的和要求 掌握顺序表的定位、插入、删除等操作。 二、实验仪器和设备 Turbo C 2.0 三、实验内容与过程(含程序清单及流程图) 1、必做题 (1)编写程序建立一个顺序表,并逐个输出顺序表中所有数据元素的值。 编写主函数测试结果。 (2)编写顺序表定位操作子函数,在顺序表中查找是否存在数据元素x。 如果存在,返回顺序表中和x值相等的第1个数据元素的序号(序号 从0开始编号);如果不存在,返回-1。编写主函数测试结果。 (3)在递增有序的顺序表中插入一个新结点x,保持顺序表的有序性。 解题思路:首先查找插入的位置,再移位,最后进行插入操作;从第 一个元素开始找到第一个大于该新结点值x的元素位置i即为插入位 置;然后将从表尾开始依次将元素后移一个位置直至元素i;最后将新 结点x插入到i位置。 (4)删除顺序表中所有等于X的数据元素。 2、选做题 (5)已知两个顺序表A和B按元素值递增有序排列,要求写一算法实现将A和B归并成一个按元素值递减有序排列的顺序表(允许表中含有值 相同的元素)。

相关主题
文本预览
相关文档 最新文档