数据结构试验怎么做?

来自:    更新日期:早些时候
数据结构实验怎么做?~

用TURBO C 2.0 或者 WIN-TC 或者visual c++都行。
看看这个也许你会明白的更多一些。
实验一 多项式相加

一、实验目的
熟悉链表的使用。
掌握如何使用C语言实现链表的说明、创建以及结点的插入和删除等操作。

二、实验要求
熟悉C语言编程。

三、实验内容
对于两个一元多项式中所有指数相同的项,对应系数相加,若其和不为零,则构成“和多项式”的一项;对于两个一元多项式中所有指数不相同的项,则分别复抄到“和多项式”中去。

四、实验步骤
1. 用链表作一元多项式的数据结构,用C语言对链表作说明
2. 生成输入一元多项式的函数
3. 输入一元多项式A(x)和B(x)
4. 以一元多项式A(x)为和多项式,将B(x)多项式中系数加入到A(x)中去




实验二 后缀表达式计算

一、实验目的
熟悉栈的使用。
掌握如何使用C语言实现栈的说明、创建以及进栈和出栈等操作。

二、实验要求
熟悉C语言编程。

三、实验内容
先将中缀表达式(就是我们通常所见的)转换为后缀表达式,比如 a+b*c+d 要变成 abc*+d+;转换的方法用栈来实现,涉及到运算符的优先级;然后用另一个栈来对后缀表达式计算结果

四、实验步骤
1.读入字母/数字--〉字母/数字进栈
2.读入运算符--〉退出两个字母/数字,用运算符计算结果,并将结果进栈
3.栈能刚好退完,则最后的即为结果。否则表明表达式有误



实验三 Kmp算法

一、实验目的
熟悉字符串的使用。
掌握如何kmp算法实验字符串的模式匹配。

二、实验要求
熟悉C语言编程。

三、实验内容
求出子串(模式串)的next,利用kmp算法实验模式与主串的匹配算法。

四、实验步骤
1.生成模式串的next函数
2.从第1个字符开始,进行模式串与主串的比较,
3.如果出现失配,将模式串的第next[j]位置开始,继续与主串进行比较。




实验四 Huffman 编码

一、实验目的
熟悉Huffman编码方法。
了解并弄懂Huffman编码实现信息的无损压缩原理。

二、实验要求
熟悉C语言编程。

三、实验内容
1.根据给定的n个权值(w1, w2, …, wn)构成n棵二叉树的集合F={T1, T2, …, Tn},其中每棵二叉树Ti中只有一个带树为Ti的根结点
2.在F中选取两棵根结点的权值最小的树作为左右子树构造一棵新的二叉树,且置其根结点的权值为其左右子树权值之和
3.在F中删除这两棵树,同时将新得到的二叉树加入F中
4.重复2, 3,直到F只含一棵树为止

四、实验步骤
1.用C语言实现二叉树的说明
2.输入n个权值,并生成n个二叉树
3.对n个二叉树逐步生成Huffman树
4.对Huffman树的每个叶子结点生成编码



实验五 关键路径

一、实验目的
熟悉关键路径的实现方法。
了解AOE-网以及关键路径在工程实践中的应用。

二、实验要求
熟悉C语言编程。

三、实验内容
根据输入的弧,生成AOE-网。从始点开始,找出到终点的多条路径,求这些路径上的关键活动。由关键活动组成的从始点到终点的路径,即为关键路径。

四、实验步骤
1.输入e条弧,生成AOE-网的存储结构。
2.从始点v0出发,令ve[0]=0,按拓扑有序求ve[j]
3.从终点vn-1出发,令vl[n-1]=ve[n-1],按逆拓扑有序求vl[i]
4.根据各顶点的ve和vl值,求每条弧(活动)ai的最早开始时间e[ai]和最迟开始时间l[ai]
5.如果e[ai]=l[ai],则ai为关键活动



实验六 最短路经

一、实验目的
熟悉最短路径的实现方法。
了解AOE-网以及最短路径在求解实际问题中的应用。

二、实验要求
熟悉C语言编程。

三、实验内容
从始点v0开始,逐步求v0到其它可达的各顶点的最短路径,直到所有顶点计算完成为止。

四、实验步骤
1.输入e条弧,生成AOE-网的存储结构。
2.初始化: S ← { v0 };
dist[j] ← Edge[0][j], j = 1, 2, …, n-1; // n为图中顶点个数
3.求出最短路径的长度:
dist[k] ← min { dist[i] }, i  V- S ;
S ← S U { k };
4.修改从v0到V-S集合中各顶点的最短路径:
dist[i] ← min{ dist[i], dist[k] + Edge[k][i] },
对于每一个 i 属于 V- S ;
5.判断:若 S = V, 则算法结束,否则转 2。



实验七 二叉排序树

一、实验目的
熟悉二叉排序树的使用。
掌握如何使用C语言实现二叉树的说明、创建以及二叉排序树的生成等操作。

二、实验要求
熟悉C语言编程。

三、实验内容
给定一个记录关键字的值,与二叉排序树的根结点值比较,如果小于根结点的值,则向左子树查找;如果大于根结点的值,则向右子树查找。如果查找到叶子结点leaf,仍没有找到记录,则:如果关键字的值小于leaf的值,则插入该leaf结点的左边,做leaf的左孩子,否则做leaf的右孩子。

四、实验步骤
1.用C语言实现二叉树的说明
2.直接将输入的值作为根结点的值
3.与根结点比较,小于则放到左子树上,大于则放到右子树上。



实验八 希尔排序

一、实验目的
熟悉希尔排序的使用。
掌握如何使用C语言实现若干记录的排序。

二、实验要求
熟悉C语言编程。

三、实验内容
先将整个待排记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行一次直接插入排序。

四、实验步骤
1.输入待排序记录
2.首先取一个整数 gap < n(待排序记录数) 作为间隔, 将全部记录分为 gap 个子序列, 所有距离为 gap 的记录放在同一个子序列中
3.在每一个子序列中分别施行直接插入排序。
4.然后缩小间隔 gap, 例如取 gap = gap/2
5.重复上述的子序列划分和排序工作,直到最后取gap = 1, 将所有记录放在同一个序列中排序为止。

实验九 快速排序

一、实验目的
熟悉快速排序的使用。
掌握如何使用C语言实现若干记录的排序。

二、实验要求
熟悉C语言编程。

三、实验内容
通过一趟将待排记录分割成独立的两个部分,其中一部分记录的关键字均比另一部分记录的关键字小。再对两个部分分别进行快速排序。

四、实验步骤
1.输入待排序的记录,并选择第一个记录作为pivotkey记录
2.从high指向的记录开始,向前找到第一个关键字的值小于Pivotkey的记录,将其放到low指向的位置,low+1
3.从low指向的记录开始,向后找到第一个关键字的值大于Pivotkey的记录,将其放到high指向的位置,high-1
4.重复2,3,直到low=high,将枢轴记录放在low(high)指向的位置
5.重复2,3,4,直到整个记录有序为止



实验十 堆排序

一、实验目的
熟悉堆排序的使用。
掌握如何使用C语言实现若干记录的排序。

二、实验要求
熟悉C语言编程。

三、实验内容
首先将一个无序序列建成一个堆;然后输出堆顶元素;在输出堆顶元素之后,调整剩余的元素成为一个新堆。

四、实验步骤
1.输入记录,按顺序创建一个完全二叉树
2.根据筛选算法,从最后一个结点开始,一直到根结点,逐步筛选,建造初始堆。
3.输出堆顶记录,将最后一个结点放到堆顶,并做筛选,重新建造一个堆
4.直到所有记录输出为止

我这个是用文件来操作的,文件“1”,是A集合,文件“2”是B集合,3、4、5分别是并交补。但是你说的和计算机对话方式,我没时间搞,这个是我帮同学做的一个毕业设计的题目。程序跑完之后看文件就行了

#include
#include

#define DBG //打印日志开关,如不需打印,请注释此行

//Macro List
#define FILE_A "1" //文件名,尽量用英文
#define FILE_B "2"
#define FILE_C "3"
#define FILE_D "4"
#define FILE_E "5"
#define MAX_FILE_SIZE 50*1024 //最大文件长度,可配置
#define MAX_COLUMN_SIZE 50 //最大文件宽度,可配置
#define DELIM "
" //串分隔符

//Function List
void GetInterSection(char * A,char * B, char * C); //交集,C为结果串
void GetDeffSection(char * A, char * B, char * C); //差集
bool GetNextString(char * Input,char * Output); //从Input串中读取一行放到Ouput串中
bool SearchString(char * Input,char * Key); //在Input串中查找串Key
void AddToOutputString(char * String,char * Key); //将Key加入到String串中,作为输出到文件的串
void WriteToFile(char * FileName, char * C); //将串C写入文件

void main()
{
FILE * fp = NULL;
char pfA[MAX_FILE_SIZE];
char pfB[MAX_FILE_SIZE];
char pfC[MAX_FILE_SIZE]; //文本输出串

memset(pfA,'\0',MAX_FILE_SIZE); //初始化
memset(pfB,'\0',MAX_FILE_SIZE);
memset(pfC,'\0',MAX_FILE_SIZE);

fp = fopen(FILE_A,"r"); //打开文件,只读
fread(pfA,MAX_FILE_SIZE,1,fp); //存到串pfA
fclose(fp);
#ifdef DBG
printf("pfA =
%s
",pfA);
#endif
fp = fopen(FILE_B,"r");
fread(pfB,MAX_FILE_SIZE,1,fp);
fclose(fp);
#ifdef DBG
printf("pfB =
%s
",pfB);
#endif

GetInterSection(pfA,pfB,pfC); //求交
#ifdef DBG
printf("pfC =
%s
",pfC);
#endif
WriteToFile(FILE_C,pfC);
memset(pfC,'\0',MAX_FILE_SIZE);



GetDeffSection(pfA,pfB,pfC); //求差
#ifdef DBG
printf("pfC =
%s
",pfC);
#endif
WriteToFile(FILE_D,pfC);
memset(pfC,'\0',MAX_FILE_SIZE);



GetDeffSection(pfB,pfA,pfC); //求差
#ifdef DBG
printf("pfC =
%s
",pfC);
#endif
WriteToFile(FILE_E,pfC);
memset(pfC,'\0',MAX_FILE_SIZE);

}

void GetInterSection(char * A,char * B, char * C)
{
char StringA[MAX_COLUMN_SIZE];
char StringB[MAX_COLUMN_SIZE];

memset(StringA,'\0',MAX_COLUMN_SIZE);
memset(StringB,'\0',MAX_COLUMN_SIZE);

while(GetNextString(A,StringA))
{
A += strlen(StringA) + 1;
if(SearchString(B,StringA))
{
AddToOutputString(C,StringA);
}
}
}
void GetDeffSection(char * A, char * B, char * C)
{
char StringA[MAX_COLUMN_SIZE];
char StringB[MAX_COLUMN_SIZE];

memset(StringA,'\0',MAX_COLUMN_SIZE);
memset(StringB,'\0',MAX_COLUMN_SIZE);

while(GetNextString(A,StringA))
{
A += strlen(StringA) + 1;
if(!SearchString(B,StringA))
{
AddToOutputString(C,StringA);
}
}
}
bool GetNextString(char * Input,char * Output)
{
char * pString = NULL;
char tmpString[MAX_FILE_SIZE];

memset(tmpString,'\0',MAX_FILE_SIZE);
strcpy(tmpString,Input);


pString = strtok(tmpString,DELIM);
if(pString == NULL || pString[0] == 13)
{
return false;
}

strcpy(Output,pString);

#ifdef DBG
printf("NextStr = [%s][%X]
",Output,Output[0]);
#endif

return true;
}
bool SearchString(char * Input,char * Key)
{
char tmpstr[MAX_COLUMN_SIZE];

sprintf(tmpstr,"%s
",Key);

if(strstr(Input,tmpstr) != NULL)
{
#ifdef DBG
printf("String [%s] Found...
",Key);
#endif
return true;
}
return false;
}
void AddToOutputString(char * String,char * Key)
{
strcat(String,Key);
strcat(String,DELIM);
}
void WriteToFile(char * FileName, char * C)
{
FILE * fp = NULL;

fp = fopen(FileName,"w");

fwrite(C,strlen(C),1,fp);

fclose(fp);

}

用TURBO C 2.0 或者 WIN-TC 或者visual c++都行。
看看这个也许你会明白的更多一些。
实验一 多项式相加

一、实验目的
熟悉链表的使用。
掌握如何使用C语言实现链表的说明、创建以及结点的插入和删除等操作。

二、实验要求
熟悉C语言编程。

三、实验内容
对于两个一元多项式中所有指数相同的项,对应系数相加,若其和不为零,则构成“和多项式”的一项;对于两个一元多项式中所有指数不相同的项,则分别复抄到“和多项式”中去。

四、实验步骤
1. 用链表作一元多项式的数据结构,用C语言对链表作说明
2. 生成输入一元多项式的函数
3. 输入一元多项式A(x)和B(x)
4. 以一元多项式A(x)为和多项式,将B(x)多项式中系数加入到A(x)中去

实验二 后缀表达式计算

一、实验目的
熟悉栈的使用。
掌握如何使用C语言实现栈的说明、创建以及进栈和出栈等操作。

二、实验要求
熟悉C语言编程。

三、实验内容
先将中缀表达式(就是我们通常所见的)转换为后缀表达式,比如 a+b*c+d 要变成 abc*+d+;转换的方法用栈来实现,涉及到运算符的优先级;然后用另一个栈来对后缀表达式计算结果

四、实验步骤
1.读入字母/数字--〉字母/数字进栈
2.读入运算符--〉退出两个字母/数字,用运算符计算结果,并将结果进栈
3.栈能刚好退完,则最后的即为结果。否则表明表达式有误

实验三 Kmp算法

一、实验目的
熟悉字符串的使用。
掌握如何kmp算法实验字符串的模式匹配。

二、实验要求
熟悉C语言编程。

三、实验内容
求出子串(模式串)的next,利用kmp算法实验模式与主串的匹配算法。

四、实验步骤
1.生成模式串的next函数
2.从第1个字符开始,进行模式串与主串的比较,
3.如果出现失配,将模式串的第next[j]位置开始,继续与主串进行比较。

实验四 Huffman 编码

一、实验目的
熟悉Huffman编码方法。
了解并弄懂Huffman编码实现信息的无损压缩原理。

二、实验要求
熟悉C语言编程。

三、实验内容
1.根据给定的n个权值(w1, w2, …, wn)构成n棵二叉树的集合F=,其中每棵二叉树Ti中只有一个带树为Ti的根结点
2.在F中选取两棵根结点的权值最小的树作为左右子树构造一棵新的二叉树,且置其根结点的权值为其左右子树权值之和
3.在F中删除这两棵树,同时将新得到的二叉树加入F中
4.重复2, 3,直到F只含一棵树为止

四、实验步骤
1.用C语言实现二叉树的说明
2.输入n个权值,并生成n个二叉树
3.对n个二叉树逐步生成Huffman树
4.对Huffman树的每个叶子结点生成编码

实验五 关键路径

一、实验目的
熟悉关键路径的实现方法。
了解AOE-网以及关键路径在工程实践中的应用。

二、实验要求
熟悉C语言编程。

三、实验内容
根据输入的弧,生成AOE-网。从始点开始,找出到终点的多条路径,求这些路径上的关键活动。由关键活动组成的从始点到终点的路径,即为关键路径。

四、实验步骤
1.输入e条弧,生成AOE-网的存储结构。
2.从始点v0出发,令ve[0]=0,按拓扑有序求ve[j]
3.从终点vn-1出发,令vl[n-1]=ve[n-1],按逆拓扑有序求vl[i]
4.根据各顶点的ve和vl值,求每条弧(活动)ai的最早开始时间e[ai]和最迟开始时间l[ai]
5.如果e[ai]=l[ai],则ai为关键活动

实验六 最短路经

一、实验目的
熟悉最短路径的实现方法。
了解AOE-网以及最短路径在求解实际问题中的应用。

二、实验要求
熟悉C语言编程。

三、实验内容
从始点v0开始,逐步求v0到其它可达的各顶点的最短路径,直到所有顶点计算完成为止。

四、实验步骤
1.输入e条弧,生成AOE-网的存储结构。
2.初始化: S ← ;
dist[j] ← Edge[0][j], j = 1, 2, …, n-1; // n为图中顶点个数
3.求出最短路径的长度:
dist[k] ← min , i  V- S ;
S ← S U ;
4.修改从v0到V-S集合中各顶点的最短路径:
dist[i] ← min,
对于每一个 i 属于 V- S ;
5.判断:若 S = V, 则算法结束,否则转 2。

实验七 二叉排序树

一、实验目的
熟悉二叉排序树的使用。
掌握如何使用C语言实现二叉树的说明、创建以及二叉排序树的生成等操作。

二、实验要求
熟悉C语言编程。

三、实验内容
给定一个记录关键字的值,与二叉排序树的根结点值比较,如果小于根结点的值,则向左子树查找;如果大于根结点的值,则向右子树查找。如果查找到叶子结点leaf,仍没有找到记录,则:如果关键字的值小于leaf的值,则插入该leaf结点的左边,做leaf的左孩子,否则做leaf的右孩子。

四、实验步骤
1.用C语言实现二叉树的说明
2.直接将输入的值作为根结点的值
3.与根结点比较,小于则放到左子树上,大于则放到右子树上。

实验八 希尔排序

一、实验目的
熟悉希尔排序的使用。
掌握如何使用C语言实现若干记录的排序。

二、实验要求
熟悉C语言编程。

三、实验内容
先将整个待排记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行一次直接插入排序。

四、实验步骤
1.输入待排序记录
2.首先取一个整数 gap < n(待排序记录数) 作为间隔, 将全部记录分为 gap 个子序列, 所有距离为 gap 的记录放在同一个子序列中
3.在每一个子序列中分别施行直接插入排序。
4.然后缩小间隔 gap, 例如取 gap = gap/2
5.重复上述的子序列划分和排序工作,直到最后取gap = 1, 将所有记录放在同一个序列中排序为止。

实验九 快速排序

一、实验目的
熟悉快速排序的使用。
掌握如何使用C语言实现若干记录的排序。

二、实验要求
熟悉C语言编程。

三、实验内容
通过一趟将待排记录分割成独立的两个部分,其中一部分记录的关键字均比另一部分记录的关键字小。再对两个部分分别进行快速排序。

四、实验步骤
1.输入待排序的记录,并选择第一个记录作为pivotkey记录
2.从high指向的记录开始,向前找到第一个关键字的值小于Pivotkey的记录,将其放到low指向的位置,low+1
3.从low指向的记录开始,向后找到第一个关键字的值大于Pivotkey的记录,将其放到high指向的位置,high-1
4.重复2,3,直到low=high,将枢轴记录放在low(high)指向的位置
5.重复2,3,4,直到整个记录有序为止

实验十 堆排序

一、实验目的
熟悉堆排序的使用。
掌握如何使用C语言实现若干记录的排序。

二、实验要求
熟悉C语言编程。

三、实验内容
首先将一个无序序列建成一个堆;然后输出堆顶元素;在输出堆顶元素之后,调整剩余的元素成为一个新堆。

四、实验步骤
1.输入记录,按顺序创建一个完全二叉树
2.根据筛选算法,从最后一个结点开始,一直到根结点,逐步筛选,建造初始堆。
3.输出堆顶记录,将最后一个结点放到堆顶,并做筛选,重新建造一个堆
4.直到所有记录输出为止


数据结构试验怎么做?视频

相关评论:
  • 17286255388数据结构顺序循环队列中取模(求余)问题,C语言
    岑纯秋因为是循环队列 所以 完全有可能出现 队头在队尾后面的情况,即R<F 比如 一共10个元素 M=10 先入队9个元素,队头指向最后一个 即9 然后 出队5个元素,队尾指向5 再入队三个元素, 队头指向2 这是队内实际个数为(2-5+10)%10 = 7个 至于为什么要加上 是因为 当F=9 R=5的时候 (9...

  • 17286255388光盘的数据结构
    岑纯秋光盘的数据结构包含几个部分:mbr区、DBR区、FAT表、数据区 MBR就是记录光盘的分区信息和大小,DBR区是引导扇区,记录光盘的文件格式、定义簇和扇区的大小,FAT表是记录文件的存储位置和大小,便于系统查找和定位文件位置。数据区只是存放真正的数据 ...

  • 17286255388西北工业大学有哪些教授的课是必须要去蹭的?
    岑纯秋水拓画就是在盘子里倒一种粘稠的透明物质,然后在水面(其实不是水)上倒各种颜料,用塑料小棍把颜料划成想要的形状,然后把布料铺在水面,颜料和“水”不互溶,就会粘在布料上,原理和美甲有点像,我们当时是用这个布料来做一个本子的封面,老师会教一些基本的画法,教怎么粘本子。然后就是体育课...

  • 17286255388正交实验怎么设计?
    岑纯秋如L8(4×24) ,此表的5 列中有1 列为4 水平,4 列为2水平。根据正交表的数据结构看出,正交表是一个n 行c 列的表,其中第j 列由数码1,2,… Sj 组成,这些数码均各出现N\/S 次,例如表11 中,第二列的数码个数为3,S=3 ,即由1、2、3 组成,各数码均出现N\/3=9\/3=3次。

  • 17286255388数字逻辑 数据结构 汇编语言这些科目之间有什么联系吗?
    岑纯秋这样可以学的更好。至于学习方法:数据结构要多上机,把一些算法用一种语言编好程序,上机运行并想想有没有更简单算法。汇编语言要靠记忆+上机+自己设计单片机的控制程序。而数字逻辑要在重视理论的基础上更加重视硬件的试验,这样可以为自己以后的硬件方面甚至电脑硬件维修等方面打下坚实基础。

  • 17286255388数据结构C语言版迷宫问题
    岑纯秋该参数就是指向字符串的指针。你的最后问题问的就有点没头绪了,学习的过程并不是你想的那样的,不见得数据结构学完之后就能编写高质量程序,写程序和看程序是相辅相成的,写而不学则怠,学而不写则罔。可以尝试的写写,自己找不到思路可以看看别人是怎么想的,自己多做做总结。

  • 17286255388什么是黑盒测试和白盒测试?
    岑纯秋黑盒测试:是通过使用整个软件或某种软件功能来严格地测试, 而并没有通过检查程序的源代码或者很清楚地了解该软件的源代码程序具体是怎样设计的。测试人员通过输入他们的数据然后看输出的结果从而了解软件怎样工作。在测试时,把程序看作一个不能打开的黑盆子,在完全不考虑程序内部结构和内部特性的情况下,...

  • 17286255388HyperLoglog
    岑纯秋在数据量比较小的情况下, set 这种数据结构 可以很好的统计;然而当用户量大到 千万级或上亿级别 的时候使用set的话会占用较大的空间可以粗略计算下:假设 10000000 个用户,key为long(按8字节算),value 为bool (4字节,单独的bool类型),java为例,不考虑内存对齐,补考set具体实现封装entry等...

  • 17286255388怎么写c语言综合实验设计报告?
    岑纯秋此外,本实验的全过程能让自己了解正式的程序、任务和报告等的完成流程。通过自己独立完成这个实验,再和标准的数据结构代码比较,找出自己代码的亮点、不足以及欠缺,让自己明白哪些地方是自己想不到的,哪些方法是自己不能想到的,并以此学习好的编程思想和优秀的编程技巧和编程风格。本次试验中:正式的...

  • 17286255388SPSS分析中解释的总方差和旋转成分矩阵要怎么进行解释?就是说怎么对...
    岑纯秋最大方差旋转只是其中的一种旋转方法,因为该方法旋转后的结果很清楚,所以一般默认选择都是这种方法 至于做主成分分析,是需要看原始数据情况的,如果原始数据变量就很少,不超过三五个这样的,就没必要做主成分分析。

  • 相关主题精彩

    版权声明:本网站为非赢利性站点,内容来自于网络投稿和网络,若有相关事宜,请联系管理员

    Copyright © 喜物网