当前位置:文档之家› 数据结构-顺序串基本操作实验报告

数据结构-顺序串基本操作实验报告

数据结构-顺序串基本操作实验报告
数据结构-顺序串基本操作实验报告

数据结构实验报告

课程数据结构 _ 实验名称顺序串基本操作

院系电信学院专业班级计科10-4

姓名学号

一、实验目的

1)熟悉串的定义和串的基本操作。

2)掌握顺序串的基本运算。

3)加深对串数据结构的理解,逐步培养解决实际问题的编程能力。

二、实验环境

装有Visual C++6.0的计算机。

本次实验共计2学时。

三、实验内容

编写一个程序,实现顺序串的各种基本运算,并在此基础上设计一个主程序。具体如下:

编写串的基本操作函数

顺序串类型定义如下所示:

typedef struct {

char ch[MAX];

int length;

} SeqString;

(1)串赋值Assign(s,t)

将一个字符串常量赋给串s,即生成一个其值等于t的串s

(2)串复制StrCopy(s,t)

将串t赋给串s

(3)计算串长度StrLength(s)

返回串s中字符个数

(4)判断串相等StrEqual(s,t)

若两个串s与t相等则返回1;否则返回0。

(5)串连接Concat(s,t)

返回由两个串s和t连接在一起形成的新串。

(6)求子串SubStr(s,i,j)

返回串s中从第i(1≤i≤StrLength(s))个字符开始的、由连续j个字符组成的子串。

(7)插入InsStr (s,i,t)

将串t插入到串s的第i(1≤i≤StrLength(s)+1)个字符中,即将t的第一个字符作为s的第i个字符,并返回产生的新串

(8)串删除DelStr (s,i,j)

从串s中删去从第i(1≤i≤StrLength(s))个字符开始的长度为j的子串,并返回产生新串。

(9)串替换RepStr (s,s1,s2)

在串s中,将所有出现的子串s1均替换成s2。

(10)输出串DispStr(s)

输出串s的所有元素值

(11)判断串是否为空IsEmpty(s)

为空返回1,不为空返回0

编写主函数

调用上述函数实现下列操作:

(1)建立串s=“abcdefghijklmn”,串s1=“xyz”,串t=“hijk”

(2)复制串t到t1,并输出t1的长度

(3)在串s的第9个字符位置插入串s1而产生串s2,并输出s2

(4)删除s第2个字符开始的5个字符而产生串s3,并输出s3

(5)将串s第2个字符开始的3个字符替换成串s1产生串s4,输出s4

(6)提取串s的第2个字符开始的10个字符而产生串s5,并输出s5

(7)将串s1和串t连接起来而产生串s4,并输出s4

(8)比较串s1和s5是否相等,输出结果

(9)判断s3是否为空

四、源程序代码

#include

#define MAX 100

typedef struct

{

char ch[MAX];

int length;

void StrAssign(SqString &s,char t[]) //串赋值{

int i;

for(i=0;t[i]!='\0';i++)

s.ch[i]=t[i];

s.length=i;

}

void StrCopy(SqString &s,SqString t) //串复制{

int i;

for(i=0;i

s.ch[i]=t.ch[i];

s.length=t.length;

}

int StrEqual(SqString s,SqString t) //判断串相等{

int same=1,i;

if(s.length!=t.length){

same=0;

}

else{

for(i=0;i

if(s.ch[i]!=t.ch[i]){

same=0;

break;

}

}

return(same);

}

int StrLength(SqString s) //计算串长度

{

return(s.length);

}

SqString Concat(SqString s,SqString t) //串连接{

SqString str;

str.length=s.length+t.length;

for(i=0;i

str.ch[i]=s.ch[i];

for(i=0;i

str.ch[s.length+i]=t.ch[i];

return str;

}

SqString SubStr(SqString s,int i,int j)//求子串

{

SqString str;

int k;

str.length=0;

if(i<=0||i>s.length||j<0||i+j-1>s.length)

return str;

for(k=i-1;k

str.ch[k-i+1]=s.ch[k];

str.length=j;

return str;

}

SqString InsStr(SqString s1,int i,SqString s2) //插入{

int j;

SqString str;

str.length=0;

if(i<=0||i>s1.length+1)

return str;

for(j=0;j

str.ch[j]=s1.ch[j];

for(j=0;j

str.ch[i+j-1]=s2.ch[j];

for(j=i-1;j

str.ch[s2.length+j]=s1.ch[j];

str.length=s1.length+s2.length;

return str;

}

SqString DelStr(SqString s,int i,int j) //删除

{

int k;

SqString str;

str.length=0;

if(i<=0||i>s.length||i+j>s.length+1)

return str;

for(k=0;k

str.ch[k]=s.ch[k];

for(k=i+j-1;k

str.ch[k-j]=s.ch[k];

str.length=s.length-j;

return str;

}

SqString RepStr(SqString s,int i,int j,SqString t) //替换{

int k;

SqString str;

str.length=0;

if(i<=0||i>s.length||i+j-1>s.length)

return str;

for(k=0;k

str.ch[k]=s.ch[k];

for(k=0;k

str.ch[i+k-1]=t.ch[k];

for(k=i+j-1;k

str.ch[t.length+k-j]=s.ch[k];

str.length=s.length-j+t.length;

return str;

}

void DispStr(SqString s) //输出串所有元素

{

int i;

if(s.length>0){

for(i=0;i

printf("%c",s.ch[i]);

printf("\n");

}

}

int IsEmpty(SqString s) //判断串是否为空

{

if(s.length>0)

return 0; //不为空

else

return 1; //为空

}

int main(void)

{

void StrAssign(SqString &s,char t[]);//串赋值

void StrCopy(SqString &s,SqString t);//串复制

int StrEqual(SqString s,SqString t);//判断串相等

int StrLength(SqString s);//计算串长度

SqString Concat(SqString s,SqString t);//串连接

SqString SubStr(SqString s,int i,int j);//求子串

SqString InsStr(SqString s1,int i,SqString s2);//插入

SqString DelStr(SqString s,int i,int j);//删除

SqString RepStr(SqString s,int i,int j,SqString t);//替换

void DispStr(SqString s);//输出串所有元素

int IsEmpty(SqString s);//判断串是否为空

char ch1[]="abcdefghijklmn",ch2[]="xyz",ch3[]="hijk";

SqString s,s1,s2,s3,s4,s5,s6,t,t1,t2;

int longth,same,kong;

StrAssign(s,ch1); //建立串s="abcdefghijklmn"

StrAssign(s1,ch2); //建立串s1="xyz"

StrAssign(t,ch3); //建立串t="hijk"

StrCopy(t1,t); //将串t复制给t1

printf("串t1: ");

DispStr(t1);

longth=StrLength(t1); //求串t1的长度

printf("串t1的长度为:%d\n",longth);

printf("串s: ");

DispStr(s);

s2=InsStr(s,9,s1); //将串s1插入串s的第9个位置,得串s2

printf("串s2:");

DispStr(s2); //输出串s2

s3=DelStr(s,2,5); //删除s第2个字符开始的5个字符而产生串s3,并输出s3 printf("串s3:");

DispStr(s3); //输出串s3

s4=RepStr(s,2,5,s1); //用串s1替换串s中从第2个字符起连续5个字符得到新串s4 printf("串s4:");

DispStr(s4); //输出串s4

s5=SubStr(s,2,10); //提取串s中第2个字符开始的10个字符而产生串s5

printf("串s5:");

DispStr(s5); //输出串s5

s6=Concat(s1,t); //连接串s1和t而产生串s6

printf("串s6:");

DispStr(s6); //输出串s6

same=StrEqual(s1,s5); //判断s1、s5是否相等

if(same==1)

printf("串s1、s5相等!");

else

printf("串s1、s5不相等!");

kong=IsEmpty(s3); //判断s3是否为空

if(kong==1)

printf("\n串s3为空!");

else

printf("\n串s3不为空!\n");

}

数据结构实验报告格式

《数据结构课程实验》大纲 一、《数据结构课程实验》的地位与作用 “数据结构”是计算机专业一门重要的专业技术基础课程,是计算机专业的一门核心的关键性课程。本课程较系统地介绍了软件设计中常用的数据结构以及相应的存储结构和实现算法,介绍了常用的多种查找和排序技术,并做了性能分析和比较,内容非常丰富。本课程的学习将为后续课程的学习以及软件设计水平的提高打下良好的基础。 由于以下原因,使得掌握这门课程具有较大的难度: (1)内容丰富,学习量大,给学习带来困难; (2)贯穿全书的动态链表存储结构和递归技术是学习中的重点也是难点; (3)所用到的技术多,而在此之前的各门课程中所介绍的专业性知识又不多,因而加大了学习难度; (4)隐含在各部分的技术和方法丰富,也是学习的重点和难点。 根据《数据结构课程》课程本身的技术特性,设置《数据结构课程实验》实践环节十分重要。通过实验实践内容的训练,突出构造性思维训练的特征, 目的是提高学生组织数据及编写大型程序的能力。实验学时为18。 二、《数据结构课程实验》的目的和要求 不少学生在解答习题尤其是算法设计题时,觉得无从下手,做起来特别费劲。实验中的内容和教科书的内容是密切相关的,解决题目要求所需的各种技术大多可从教科书中找到,只不过其出现的形式呈多样化,因此需要仔细体会,在反复实践的过程中才能掌握。 为了帮助学生更好地学习本课程,理解和掌握算法设计所需的技术,为整个专业学习打好基础,要求运用所学知识,上机解决一些典型问题,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握所用到的一些技术。数据结构中稍微复杂一些的算法设计中可能同时要用到多种技术和方法,如算法设计的构思方法,动态链表,算法的编码,递归技术,与特定问题相关的技术等,要求重点掌握线性链表、二叉树和树、图结构、数组结构相关算法的设计。在掌握基本算法的基础上,掌握分析、解决实际问题的能力。 三、《数据结构课程实验》内容 课程实验共18学时,要求完成以下六个题目: 实习一约瑟夫环问题(2学时)

数据结构实验报告--图

. 数据结构实验报告 图

一、实验目的 1、熟悉图的结构和相关算法。 二、实验内容及要求 1、编写创建图的算法。 2、编写图的广度优先遍历、深度优先遍历、及求两点的简单路径和最短路径的算法。 三、算法描述 1、图的邻接表存储表示: 对图的每个顶点建立一个单链表,第i个单链表表示所有依附于第i个点的边(对于有向图表示以该顶点为尾的弧);链表的每个节点存储两个信息,该弧指向的顶点在图中的位置(adjvex)和指向下一条弧的指针(nextarc)。每个连表的头结点存储顶点的数据:顶点信息(data)和指向依附于它的弧的链表域。 存储表示如下: typedef struct ArcNode { int adjvex; // 该弧所指向的顶点的位置 struct ArcNode *nextarc; // 指向下一条弧的指针 // InfoType *info; // 该弧相关信息的指针 } ArcNode; typedef struct VNode { char data; // 顶点信息 int data2; int sngle; ArcNode *firstarc; // 指向第一条依附该顶点的弧 } VNode, AdjList[MAX_NUM]; typedef struct { AdjList vertices; int vexnum, arcnum; int kind; // 图的种类标志 } ALGraph; 2、深度优先搜索: 假设初始态是图中所有定点未被访问,从图中的某个顶点v开始,访问此顶点,然后依次从v的未访问的邻接点出发深度优先遍历,直至途中所有和v有相同路径的点都被访问到;若图中仍有点未被访问,则从图中另选一个未被访问的点作为起点重复上述过程,直到图中所有点都被访问到。为了便于区分途中定点是否被访问过,需要附设一个访问标致数组visited [0..n-1],将其初值均设为false,一旦某个顶点被访问,将对应的访问标志赋值为true。 2、广度优先搜索: 假设初始态是图中所有顶点未被访问,从图中的某个顶点v开始依次访问v的各个未被访问的邻接点,然后分别从这些邻接点出发以此访问他们的邻接点,并使“先被访问的邻接顶点”先于“后被访问的邻接顶点”被访问,直至图中所有已被访问过的顶点的邻接顶点都被访问。若图中仍有未被访问的顶点,选择另一个未被访问的顶点开始,重复上述操作,直到图中所有顶点都被访问。为了使“先

数据库和数据结构实验报告

. 西华大学实验报告(计算机类) 开课学院及实验室:实验时间:年月日 一、实验目的 通过练习让学生对数据库、数据库和表的关系、数据词典、参照完整性和视图有较好的理解和掌握。 二、内容与设计思想 实验内容: 1.数据库设计器 2.数据库的创建 3.设定数据词典 4.参照完整性的设置 5.视图的创建和修改 三、使用环境 Windos XP操作系统;Visual ProFox 6.0 四、核心代码及调试过程 例3-27创建项目管理器SBGL,要求添入数据库sbsj,并查看该数据库。 图一 图二、“项目管理器”的数据选项卡 图三、“项目管理器”中的数据库与数据库表 例3-28从sbsj数据库所属的sb和zz两个表中抽取编号、名称和增值3个字段。,组成名称 为“我的视图”的SQL视图。 open database sbsj create sql view 我的视图; as select sb.编号,sb.名称,zz.增值from sb,zz where sb.编号=zz.编号

如有你有帮助,请购买下载,谢谢! 例3-29根据例3-28的查询要求,用视图设计器建立视图1,然后修改其中车床的增值来更新zz表原来的增值 图一、视图设计器-视图1 图二、视图设计器-视图1 图三、增值表 图四 图五、视图设计器更新源表数据 19.根据图3.30所示数据库sbsj的永久关系,若利用参照完整性生成器来删除sb。dbf的第一个记录,对其他3个表会否产生影响,是分级、限制和忽略3中情况来说明。 图一、数据库设计器 图二、sbsj.dbc“永久关系的参照完整性生成器” 级联:相关子表中的记录将自动删除 限制:子表有相关记录,在父表中删除记录就会产生“触发器失败”的提示信息 忽略:父表删除记录,与子表记录无关 五、总结 (自己写一些收获和体会) 通过这次上机练习让我学会了怎样在数据库中添加项目管理器、表的数据完整性的概念以及视图的各种操作,让我更容易的掌握理论知识的难点和一些基本命令的使用方法,以及一些平时在课堂上不注意的问题。在上机练习的过程中需要对每个细节都要留心,认真做好每一步这样才不至于出错,这就加强了平时不注意的问题得到回应,从而加深了细节问题的处理方式。在上机的学习之后更加了解了数据库表及其数据完整性是vfp重要的一个对象,命令熟练操作直接关系到数据库的成败。 第三次的上机操作,我了解了命令的使用方式对于建立数据库表及其数据完整性很重要,要学好各种命令以及数据库表及其数据完整性的使用方法,还需在多做习题加强学习。 六、附录

数据结构实验报告

数据结构实验报告 一.题目要求 1)编程实现二叉排序树,包括生成、插入,删除; 2)对二叉排序树进行先根、中根、和后根非递归遍历; 3)每次对树的修改操作和遍历操作的显示结果都需要在屏幕上用树的形状表示出来。 4)分别用二叉排序树和数组去存储一个班(50人以上)的成员信息(至少包括学号、姓名、成绩3项),对比查找效率,并说明在什么情况下二叉排序树效率高,为什么? 二.解决方案 对于前三个题目要求,我们用一个程序实现代码如下 #include #include #include #include "Stack.h"//栈的头文件,没有用上 typedefintElemType; //数据类型 typedefint Status; //返回值类型 //定义二叉树结构 typedefstructBiTNode{ ElemType data; //数据域 structBiTNode *lChild, *rChild;//左右子树域 }BiTNode, *BiTree; intInsertBST(BiTree&T,int key){//插入二叉树函数 if(T==NULL) { T = (BiTree)malloc(sizeof(BiTNode)); T->data=key; T->lChild=T->rChild=NULL; return 1; } else if(keydata){ InsertBST(T->lChild,key); } else if(key>T->data){ InsertBST(T->rChild,key); } else return 0; } BiTreeCreateBST(int a[],int n){//创建二叉树函数 BiTreebst=NULL; inti=0; while(i

数据结构上机实验报告

数据结构上机实验报告 学院:电子工程学院 专业:信息对抗技术 姓名:

学号: 教师:饶鲜日期:

目录 实验一线性表................................................. - 4 - 一、实验目的................................................ - 4 - 二、实验代码................................................ - 4 - 三、实验结果............................................... - 14 - 四、个人思路............................................... - 15 -实验二栈和队列.............................................. - 15 - 一、实验目的............................................... - 15 - 二、实验代码............................................... - 16 - 三、实验结果............................................... - 24 - 四、个人思路............................................... - 25 -实验三数组.................................................. - 26 - 一、实验目的............................................... - 26 - 二、实验代码............................................... - 26 - 三、实验结果............................................... - 28 - 四、个人思路............................................... - 28 -实验四树.................................................... - 29 - 一、实验目的............................................... - 29 - 二、实验代码............................................... - 29 -

数据结构实验报告图实验

邻接矩阵的实现 1. 实验目的 (1)掌握图的逻辑结构 (2)掌握图的邻接矩阵的存储结构 (3)验证图的邻接矩阵存储及其遍历操作的实现2. 实验内容 (1)建立无向图的邻接矩阵存储 (2)进行深度优先遍历 (3)进行广度优先遍历3.设计与编码MGraph.h #ifndef MGraph_H #define MGraph_H const int MaxSize = 10; template class MGraph { public: MGraph(DataType a[], int n, int e); ~MGraph(){ void DFSTraverse(int v); void BFSTraverse(int v); private: DataType vertex[MaxSize]; int arc[MaxSize][MaxSize]; }

int vertexNum, arcNum; }; #endif MGraph.cpp #include using namespace std; #include "MGraph.h" extern int visited[MaxSize]; template MGraph::MGraph(DataType a[], int n, int e) { int i, j, k; vertexNum = n, arcNum = e; for(i = 0; i < vertexNum; i++) vertex[i] = a[i]; for(i = 0;i < vertexNum; i++) for(j = 0; j < vertexNum; j++) arc[i][j] = 0; for(k = 0; k < arcNum; k++) { cout << "Please enter two vertexs number of edge: " cin >> i >> j; arc[i][j] = 1; arc[j][i] = 1; } }

数据结构实验报告全集

数据结构实验报告全集 实验一线性表基本操作和简单程序 1.实验目的 (1)掌握使用Visual C++ 6.0上机调试程序的基本方法; (2)掌握线性表的基本操作:初始化、插入、删除、取数据元素等运算在顺序存储结构和链表存储结构上的程序设计方法。 2.实验要求 (1)认真阅读和掌握和本实验相关的教材内容。 (2)认真阅读和掌握本章相关内容的程序。 (3)上机运行程序。 (4)保存和打印出程序的运行结果,并结合程序进行分析。 (5)按照你对线性表的操作需要,重新改写主程序并运行,打印出文件清单和运行结果 实验代码: 1)头文件模块 #include iostream.h>//头文件 #include//库头文件-----动态分配内存空间 typedef int elemtype;//定义数据域的类型 typedef struct linknode//定义结点类型 { elemtype data;//定义数据域 struct linknode *next;//定义结点指针 }nodetype; 2)创建单链表

nodetype *create()//建立单链表,由用户输入各结点data域之值,//以0表示输入结束 { elemtype d;//定义数据元素d nodetype *h=NULL,*s,*t;//定义结点指针 int i=1; cout<<"建立一个单链表"<> d; if(d==0) break;//以0表示输入结束 if(i==1)//建立第一个结点 { h=(nodetype*)malloc(sizeof(nodetype));//表示指针h h->data=d;h->next=NULL;t=h;//h是头指针 } else//建立其余结点 { s=(nodetype*) malloc(sizeof(nodetype)); s->data=d;s->next=NULL;t->next=s; t=s;//t始终指向生成的单链表的最后一个节点

顺序结构实验报告

程序设计基础 实验报告 实验编号 1905B000201 实验名称顺序结构 实验地点软件技术实验室(2) 班级19软嵌2班 学号 姓名

一、实验目的: 1、掌握编程环境的使用 2、掌握基本数据类型、变量的定义和赋值; 3、掌握输入输出语句 4、理解顺序结构的使用 二、实验内容: 问题1: 源代码: #include void main() { int num1,num2,sum,min,mul,yushu; float shang; printf("Enter num1:"); scanf("%d",&num1); printf("Enter num2:"); scanf("%d",&num2); sum=num1+num2; min=num1-num2; mul=num1*num2; shang= (float)num1/num2; yushu=num1%num2; printf("%d+%d=%d\n",num1,num2,sum); printf("%d-%d=%d\n",num1,num2,min);

printf("%d*%d=%d\n",num1,num2,mul); printf("%d/%d=%.2f\n",num1,num2,shang); printf("%d%%%d=%d\n",num1,num2,yushu); return 0; } 输入:5 3 结果: 问题2: 源代码: #include int main() { int time1, time2,m,n; printf("Enter time1:"); scanf( "%d" ,&time1); printf("Enter time2:"); scanf("%d",&time2); m=(time2-time1)/100;

数据结构实验报告-串

实验四串 【实验目的】 1、掌握串的存储表示及基本操作; 2、掌握串的两种模式匹配算法:BF和KMP。 3、了解串的应用。 【实验学时】 2学时 【实验预习】 回答以下问题: 1、串和子串的定义 串的定义:串是由零个或多个任意字符组成的有限序列。 子串的定义:串中任意连续字符组成的子序列称为该串的子串。 2、串的模式匹配 串的模式匹配即子串定位是一种重要的串运算。设s和t是给定的两个串,从主串s的第start个字符开始查找等于子串t的过程称为模式匹配,如果在S中找到等于t的子串,则称匹配成功,函数返回t在s中首次出现的存储位置(或序号);否则,匹配失败,返回0。 【实验内容和要求】 1、按照要求完成程序exp4_1.c,实现串的相关操作。调试并运行如下测试数据给出运行结果: ?求“This is a boy”的串长; ?比较”abc 3”和“abcde“; 表示空格 ?比较”english”和“student“; ?比较”abc”和“abc“; ?截取串”white”,起始2,长度2; ?截取串”white”,起始1,长度7; ?截取串”white”,起始6,长度2; ?连接串”asddffgh”和”12344”; #include #include #define MAXSIZE 100 #define ERROR 0 #define OK 1 /*串的定长顺序存储表示*/

typedef struct { char data[MAXSIZE]; int length; } SqString; int strInit(SqString *s); /*初始化串*/ int strCreate(SqString *s); /*生成一个串*/ int strLength(SqString *s); /*求串的长度*/ int strCompare(SqString *s1,SqString *s2); /*两个串的比较*/ int subString(SqString *sub,SqString *s,int pos,int len); /*求子串*/ int strConcat(SqString *t,SqString *s1,SqString *s2); /*两个串的连接*/ /*初始化串*/ int strInit(SqString *s) { s->length=0; s->data[0]='\0'; return OK; }/*strInit*/ /*生成一个串*/ int strCreate(SqString *s) { printf("input string :"); gets(s->data); s->length=strlen(s->data); return OK; }/*strCreate*/ /*(1)---求串的长度*/ int strLength(SqString *s) { return s->length; }/*strLength*/ /*(2)---两个串的比较,S1>S2返回>0,s1length&&ilength;i++) { if(s1->data[i]>s2->data[i]) {

数据结构实验报告模板

2009级数据结构实验报告 实验名称:约瑟夫问题 学生姓名:李凯 班级:21班 班内序号:06 学号:09210609 日期:2010年11月5日 1.实验要求 1)功能描述:有n个人围城一个圆圈,给任意一个正整数m,从第一个人开始依次报数,数到m时则第m个人出列,重复进行,直到所有人均出列为止。请输出n个人的出列顺序。 2)输入描述:从源文件中读取。 输出描述:依次从显示屏上输出出列顺序。 2. 程序分析 1)存储结构的选择 单循环链表 2)链表的ADT定义 ADT List{ 数据对象:D={a i|a i∈ElemSet,i=1,2,3,…n,n≧0} 数据关系:R={< a i-1, a i>| a i-1 ,a i∈D,i=1,2,3,4….,n} 基本操作: ListInit(&L);//构造一个空的单链表表L ListEmpty(L); //判断单链表L是否是空表,若是,则返回1,否则返回0. ListLength(L); //求单链表L的长度 GetElem(L,i);//返回链表L中第i个数据元素的值; ListSort(LinkList&List) //单链表排序 ListClear(&L); //将单链表L中的所有元素删除,使单链表变为空表 ListDestroy(&L);//将单链表销毁 }ADT List 其他函数: 主函数; 结点类; 约瑟夫函数 2.1 存储结构

[内容要求] 1、存储结构:顺序表、单链表或其他存储结构,需要画示意图,可参考书上P59 页图2-9 2.2 关键算法分析 结点类: template class CirList;//声明单链表类 template class ListNode{//结点类定义; friend class CirList;//声明链表类LinkList为友元类; Type data;//结点的数据域; ListNode*next;//结点的指针域; public: ListNode():next(NULL){}//默认构造函数; ListNode(const Type &e):data(e),next(NULL){}//构造函数 Type & GetNodeData(){return data;}//返回结点的数据值; ListNode*GetNodePtr(){return next;}//返回结点的指针域的值; void SetNodeData(Type&e){data=e;}//设置结点的数据值; void SetNodePtr(ListNode*ptr){next=ptr;} //设置结点的指针值; }; 单循环链表类: templateclass CirList { ListNode*head;//循环链表头指针 public: CirList(){head=new ListNode();head->next=head;}//构造函数,建立带头节点的空循环链表 ~CirList(){CirListClear();delete head;}//析构函数,删除循环链表 void Clear();//将线性链表置为空表 void AddElem(Type &e);//添加元素 ListNode *GetElem(int i)const;//返回单链表第i个结点的地址 void CirListClear();//将循环链表置为空表 int Length()const;//求线性链表的长度 ListNode*ListNextElem(ListNode*p=NULL);//返回循环链表p指针指向节点的直接后继,若不输入参数,则返回头指针 ListNode*CirListRemove(ListNode*p);//在循环链表中删除p指针指向节点的直接后继,且将其地址通过函数值返回 CirList&operator=(CirList&List);//重载赋

数据结构实验报告-答案

数据结构(C语言版) 实验报告

专业班级学号姓名 实验1 实验题目:单链表的插入和删除 实验目的: 了解和掌握线性表的逻辑结构和链式存储结构,掌握单链表的基本算法及相关的时间性能分析。 实验要求: 建立一个数据域定义为字符串的单链表,在链表中不允许有重复的字符串;根据输入的字符串,先找到相应的结点,后删除之。 实验主要步骤: 1、分析、理解给出的示例程序。 2、调试程序,并设计输入数据(如:bat,cat,eat,fat,hat,jat,lat,mat,#),测 试程序的如下功能:不允许重复字符串的插入;根据输入的字符串,找到相应的结点并删除。 3、修改程序: (1)增加插入结点的功能。 (2)将建立链表的方法改为头插入法。 程序代码: #include"" #include"" #include"" #include"" typedef struct node . . 示意图:

head head head 心得体会: 本次实验使我们对链表的实质了解更加明确了,对链表的一些基本操作也更加熟练了。另外实验指导书上给出的代码是有一些问题的,这使我们认识到实验过程中不能想当然的直接编译执行,应当在阅读并完全理解代码的基础上再执行,这才是实验的意义所在。

实验2 实验题目:二叉树操作设计和实现 实验目的: 掌握二叉树的定义、性质及存储方式,各种遍历算法。 实验要求: 采用二叉树链表作为存储结构,完成二叉树的建立,先序、中序和后序以及按层次遍历 的操作,求所有叶子及结点总数的操作。 实验主要步骤: 1、分析、理解程序。 2、调试程序,设计一棵二叉树,输入完全二叉树的先序序列,用#代表虚结点(空指针), 如ABD###CE##F##,建立二叉树,求出先序、中序和后序以及按层次遍历序列,求 所有叶子及结点总数。 实验代码 #include"" #include"" #include"" #define Max 20 ertex=a; irstedge=NULL; irstedge; G->adjlist[i].firstedge=s; irstedge; R[i] 留在原位

数据结构实验报告图实验

图实验 一,邻接矩阵的实现 1.实验目的 (1)掌握图的逻辑结构 (2)掌握图的邻接矩阵的存储结构 (3)验证图的邻接矩阵存储及其遍历操作的实现 2.实验内容 (1)建立无向图的邻接矩阵存储 (2)进行深度优先遍历 (3)进行广度优先遍历 3.设计与编码 #ifndef MGraph_H #define MGraph_H const int MaxSize = 10; template class MGraph { public: MGraph(DataType a[], int n, int e); ~MGraph(){ } void DFSTraverse(int v); void BFSTraverse(int v); private: DataType vertex[MaxSize]; int arc[MaxSize][MaxSize]; int vertexNum, arcNum; }; #endif #include using namespace std; #include "" extern int visited[MaxSize]; template MGraph::MGraph(DataType a[], int n, int e) { int i, j, k; vertexNum = n, arcNum = e; for(i = 0; i < vertexNum; i++) vertex[i] = a[i]; for(i = 0;i < vertexNum; i++) for(j = 0; j < vertexNum; j++) arc[i][j] = 0;

顺序表的应用数据结构实验报告记录

顺序表的应用数据结构实验报告记录

————————————————————————————————作者:————————————————————————————————日期:

大学数据结构实验报告 课程名称数据结构实验第(三)次实验实验名称顺序表的应用 学生姓名于歌专业班级学号 实验成绩指导老师(签名)日期2018年9月30日一、实验目的 1.学会定义线性表的顺序存储类型,实现C程序的基本结构,对线性表的一些基本操作和具体的函数定义。 2.掌握顺序表的基本操作,实现顺序表的插入、删除、查找以及求并集等运算。 3.掌握对多函数程序的输入、编辑、调试和运行过程。 二、实验要求 1.预习C语言中结构体的定义与基本操作方法。 2.对顺序表的每个基本操作用单独的函数实现。 3.编写完整程序完成下面的实验内容并上机运行。 4.整理并上交实验报告。 三、实验内容: 1.定义一个包含学生信息(学号,姓名,成绩)的顺序表,使其具有如下功能: (1)根据指定学生个数,逐个输入学生信息 (2)逐个显示学生表中所有学生的相关信息 (3)根据姓名进行查找,返回此学生的学号和成绩 (4)根据指定的位置可返回相应的学生信息(学号,姓名,成绩) (5)给定一个学生信息,插入到表中指定的位置 (6)删除指定位置的学生记录 (7)统计表中学生个数 四、实验设计 1.定义一个包含学生信息(学号,姓名,成绩)的顺序表,使其具有如下功能: (1)根据指定学生个数,逐个输入学生信息 for(count=0; count

华仔数据结构实验报告

本科实验报告 课程名称:数据结构 实验项目:线性结构、树形结构、图结构、查找、排序实验地点: 专业班级:学号: 学生姓名: 指导教师: 2011年12 月24 日

实验项目:线性结构 实验目的和要求 熟练掌握线性结构的基本操作在顺序表和链式表上的实现。 二、实验内容和原理 设顺序表递增有序,编写一个程序,将x插入,使之仍然有序。 三、主要仪器设备 使用的计算机:Nopated++ 四、操作方法与实验步骤 #include #define maxlen 50 typedef int elemtype; typedef elemtype sqlist[maxlen]; int creat(sqlist A) { int i,n; printf("Please input length:\n"); scanf("%d",&n); for(i=0;i=A[n-1]) {

A[n]=x; } else { while(A[i]=i;j--) A[j+1]=A[j]; A[i]=x; } return n+1; } void main() { sqlist A; int x,n; n=creat(A); disp(A,n); printf("Please input you want to insert:\n"); scanf("%d",&x); n=Insert(A,n,x); disp(A,n); } 五、实验数据记录和处理 六、实验结果与分析 这个程序为比较基础的程序 七、讨论、心得 该程序可以帮助我加深对线性表的理解,引发我对数据结构这门课的兴趣

数据结构实验报告

南京工程学院实验报告 操作的函数程序清单,分别用顺序表和链表结构完成,并在首页上表明团队名称、成员及个人的工作(函数),未来的成绩评定时将包含这一部分的团队成绩及个人的工作成绩。 一、实验目的 1.熟悉上机环境,进一步掌握语言的结构特点。 2.掌握线性表的顺序存储结构的定义及实现。 3.掌握线性表的链式存储结构——单链表的定义及实现。 4.掌握线性表在顺序存储结构即顺序表中的各种基本操作。 5.掌握线性表在链式存储结构——单链表中的各种基本操作。 二、实验内容 1.顺序线性表的建立、插入及删除。 2.链式线性表的建立、插入及删除。 三、实验步骤 1.建立含n个数据元素的顺序表并输出该表中各元素的值及顺序表的长度。 2.利用前面的实验先建立一个顺序表L={21,23,14,5,56,17,31},然后在第i个位置插入元素68。 3.建立一个带头结点的单链表,结点的值域为整型数据。要求将用户输入的数据按尾插入法来建立相应单链表。 四、程序主要语句及作用(main函数程序清单) 程序1的主要代码(附简要注释) #include #define MAXSIZE 1024 typedef int elemtype; typedef struct{ elemtype vec[MAXSIZE]; int len; }sequenlist; elemtype geti(sequenlist s, int i); elemtype deli(sequenlist *s,int i); elemtype insi(sequenlist *s,int i,int b); int main(int argc, char *argv[]){ int i,n,x; sequenlist a; printf("输入n(n>3):"); scanf("%d",&n);

数据结构图及其应用实验报告+代码

附件2: 北京理工大学珠海学院实验报告 ZHUHAI CAMPAUS OF BEIJING INSTITUTE OF TECHNOLOGY 实验题目图及其应用实验时间 2011.5.10 一、实验目的、意义 (1)熟悉图的邻接矩阵(或邻接表)的表示方法; (2)掌握建立图的邻接矩阵(或邻接表)算法; (3)掌握图的基本运算,熟悉对图遍历算法; (4)加深对图的理解,逐步培养解决实际问题的编程能力 二、实验内容及要求 说明1:学生在上机实验时,需要自己设计出所涉及到的函数,同时设计多组输入数据并编写主程序分别调用这些函数,调试程序并对相应的输出作出分析;修改输入数据,预期输出并验证输出的结果,加深对有关算法的理解。 具体要求: (1)建立图的邻接矩阵(或邻接表); (2)对其进行深度优先及广度优先遍历。 三、实验所涉及的知识点 1.创建一个图: CreateUDN(MGraph &G) 2.查找v顶点的第一个邻接点: FirstAdjVex(MGraph G,int v) 3. 查找基于v顶点的w邻接点的下一个邻接点: NextAdjVex(MGraph G,int v,int w) 4.图的矩阵输出: printArcs(MGraph G) 5:顶点定位: LocateVex(MGraph G,char v) 6. 访问顶点v输出: printAdjVex(MGraph G,int v) 7. 深度优先遍历: DFSTraverse(MGraph G,Status (*Visit)(MGraph G,int v)) 8. 广度优先遍历BFSTraverse(MGraph G,Status (*Visit)(MGraph G,int v)) 9. DFS,从第v个顶点出发递归深度优先遍历图G: DFS(MGraph G,int v) 四、实验记录 1.对顶点的定位其数组下标,利用了找到之后用return立即返回,在当图顶点 多的情况下节省了搜索时间,程序如下 //对顶点v定位,返回该顶点在数组的下标索引,若找不到则返回-1 int LocateVex(MGraph G,char v){ for (int i=0;i

数据结构实验报告及心得体会

2011~2012第一学期数据结构实验报告 班级:信管一班 学号:201051018 姓名:史孟晨

实验报告题目及要求 一、实验题目 设某班级有M(6)名学生,本学期共开设N(3)门课程,要求实现并修改如下程序(算法)。 1. 输入学生的学号、姓名和 N 门课程的成绩(输入提示和输出显示使用汉字系统), 输出实验结果。(15分) 2. 计算每个学生本学期 N 门课程的总分,输出总分和N门课程成绩排在前 3 名学 生的学号、姓名和成绩。 3. 按学生总分和 N 门课程成绩关键字升序排列名次,总分相同者同名次。 二、实验要求 1.修改算法。将奇偶排序算法升序改为降序。(15分) 2.用选择排序、冒泡排序、插入排序分别替换奇偶排序算法,并将升序算法修改为降序算法;。(45分)) 3.编译、链接以上算法,按要求写出实验报告(25)。 4. 修改后算法的所有语句必须加下划线,没做修改语句保持按原样不动。 5.用A4纸打印输出实验报告。 三、实验报告说明 实验数据可自定义,每种排序算法数据要求均不重复。 (1) 实验题目:《N门课程学生成绩名次排序算法实现》; (2) 实验目的:掌握各种排序算法的基本思想、实验方法和验证算法的准确性; (3) 实验要求:对算法进行上机编译、链接、运行; (4) 实验环境(Windows XP-sp3,Visual c++); (5) 实验算法(给出四种排序算法修改后的全部清单); (6) 实验结果(四种排序算法模拟运行后的实验结果); (7) 实验体会(文字说明本实验成功或不足之处)。

三、实验源程序(算法) Score.c #include "stdio.h" #include "string.h" #define M 6 #define N 3 struct student { char name[10]; int number; int score[N+1]; /*score[N]为总分,score[0]-score[2]为学科成绩*/ }stu[M]; void changesort(struct student a[],int n,int j) {int flag=1,i; struct student temp; while(flag) { flag=0; for(i=1;ia[i+1].score[j]) { temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; flag=1; } for(i=0;ia[i+1].score[j]) { temp=a[i]; a[i]=a[i+1]; a[i+1]=temp; flag=1;

数据结构-实验报告顺序表基本运算

(封面) 学生实验报告 学院:国际经贸学院 课程名称:数据结构 专业班级: 09电子商务 姓名: 学号:

学生实验报告 (经管类专业用) 一、实验目的及要求: 1、目的 通过实验,实现顺序表的各种基本运算。 2、内容及要求 编写一个程序,实现顺序表的各种基本运算,并在此基础上设计一个主程序完成下列功能: (1) 初始化顺序表L (2) 依次采用尾插法插入a,b,c,d,e (3) 输出顺序表L (4) 输出顺序表L长度; (5) 判断顺序表L是否为空; (6) 判断顺序表L 的第3个元素; (7) 输出元素‘a’的位置; (8) 在第4个元素位置上插入‘f’元素; (9) 输出顺序表L (10) 删除L的第3个元素; (11) 输出顺序表L (12) 释放顺序表L 二、仪器用具:

三、实验方法与步骤: 一、查阅顺序表等相关资料,熟悉顺序表基本概念和流程 二、“开展”顺序表实验流程 三、整理实验数据和文档,总结实验的过程,编写实验报告 四、实验结果与数据处理: 1、顺序表的代码: #include #include #define MaxSize 50 typedef char ElemType; typedef struct { ElemType data[MaxSize]; int length; } SqList; void InitList(SqList *&L) { L=(SqList *)malloc(sizeof(SqList)); L->length=0; } void DestroyList(SqList *L) { free(L); } int ListEmpty(SqList *L) { return(L->length==0); } int ListLength(SqList *L) { return(L->length); }

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