文档库 最新最全的文档下载
当前位置:文档库 › 《数据结构》实训报告

《数据结构》实训报告

《数据结构》实训报告
《数据结构》实训报告

实验一线性表

1.实验要求

1.1掌握数据结构中线性表的基本概念。

1.2熟练掌握线性表的基本操作:创建、插入、删除、查找、输出、求长度

及合并并运算在顺序存储结构上的实验。

1.3熟练掌握链表的各种操作和应用。

2.实验内容

2.1编写一个函数,从一个给定的顺序表A中删除元素值在x到y之间的所

有元素,要求以较高效率来实现。

2.2试写一个算法,在无头结点的动态单链表上实现线性表插入操作

2.3设计一个统计选票的算法,输出每个候选人的得票结果。

3.实验代码

代码:

#include<>

typedef int elemtype;

#define maxsize 10

int del(int A[],int n,elemtype x,elemtype y)

{

int i=0,k=0;

while(i

{if(A[i]>=x&&A[i]<=y)

k++;

else

A[i-k]=A[i];

i++;

}

return(n-k);

}

void main()

{

int i,j;

int a[maxsize];

printf("输入%d个数:\n",maxsize);

for(i=0;i

scanf("%d,",&a[i]);

j=del(a,maxsize,1,3);

printf("输出删除后剩下的数:\n");

for(i=0;i

printf("%d "\n,a[i]);

}

代码:

INSERT(L,i,b)。

void Insert(Linklist &L,int i,elemtype x)

{

if(!L)

{

L=(Linklist)malloc(sizeof(Lnode));

(*L).data=x;(*L).next=NULL;

}

else

{

if(i==1)

{

s=(Linklist)malloc(sizeof(Lnode));

s->data=x;s->next=L;L=s;

}

else

{

p=L;j=1;

while(p&&j

{j++;p=p->next;}

if(p||j>i-1)

return error;

s=(Linklist)malloc(sizeof(Lnode));

s->data=x;s->next=p->next;p->next=s;

}

}

}

代码:

typedef int elemtype

typedef struct linknode

{

elemtype data;

struct linknode *next;

}nodetype;

nodetype *create()

{

elemtype d;

nodetype h=NULL,*s,*t;

int i=1;

printf("建立单链表:\n");

while(1)

{

printf("输入第%d个结点数据域",i);

scanf("%d",&d);

if(d==0)break;

if(i==1)

{

h=(nodetype *)malloc(sizeof(nodetype));

h->data=d;h->next=NULL;t=h;

}

else

{

s=(nodetype *)malloc(sizeof(nodetype));

s->data=d;s->next=NULL;t->next=s;

t=s;

}

i++;

}

return h;

}

void sat(nodetype *h,int a[])

{

nodetype *p=h;

while(p!=NULL)

{

a[p->data]++;

p=p->next;

}

}

void main()

{

int a[N+1],i;

for(i=0;i

a[i]=0;

nodetype *head;

head=create();

sat(head,a);

printf("候选人:");

for(i=1;i<=N;i++) printf("%3d",i);

printf("\n得票数\n");

for(i=1;i<=N;i++)

printf("%3d",a[i]);

printf("\n");

}

4.实验小结

线性表是最简单的、最常用的一种数据结构,是实现其他数据结构的基础。

实验二栈与队列

1.实验要求

1.1了解栈和队列的特性,以便灵活运用。

1.2熟练掌握栈和有关队列的各种操作和应用。

2.实验内容

2.1设一个算术表达式包括圆括号,方括号和花括号三种括号,编写一个算

法判断其中的括号是否匹配。

3.实验代码

代码:

#include<>

#include<>

#include<>

#define NULL 0

typedef struct list

{

char str;

struct list *next;

}list;

void push(char,list *);

int pop *);

void deal(char *str);

main(void)

{

char str[20];

printf("\n请输入一个算式:\n");

gets(str);

deal(str);

printf("正确!");

getchar();

return 0;

}

void deal(char *str)

{

list *L;

L=(list *)malloc(sizeof(list));

if(!L)

{

printf("错误!");

exit(-2);

}

L->next=NULL;

while(*str)

{

if(*str=='('||*str=='['||*str=='{')

push(*str,L);

else

if(*str==')'||*str==']'||*str=='}')

if(pop(*str,L))

{puts("错误,请检查!");

puts("按回车键退出");

getchar();exit(-2);

}

str++;

}

if(L->next)

{

puts("错误,请检查!");

puts("按任意键退出");

getchar();exit(-2);

}

}

void push(char c,list *L)

{

list *p;

p=(list *)malloc(sizeof(list));

if(!p)

{

printf("错误!");

exit(-2);

}

p->str=c;

p->next=L->next;

L->next=p;

}

#define check(s) if(L->next->str==s){p=l->next;L->next=p->next;free(p);return(0);}

int pop(char c,list *L)

{

list *p;

if(L->next==NULL)return 1;

switch(c)

{

case')':check('(') break;

case']':check('[') break;

case'}':check('{') break;

}

return 1;

4.实验小结

栈和队列是最基础的一种数据结构之一,为实现其他数据结构的奠定基石。

实验三树

1.实验要求

1.1掌握二叉树,二叉树排序数的概念和存储方法。

1.2掌握二叉树的遍历算法。

1.3熟练掌握编写实现树的各种运算的算法。

2.实验内容

2.1编写程序,求二叉树的结点数和叶子数。

2.2编写递归算法,求二叉树中以元素值为X的结点为根的子数的深度。

2.3编写程序,实现二叉树的先序,中序,后序遍历,并求其深度。

3.实验代码

代码:

#include<>

#include<>

struct node{

char data;

struct node *lchild,*rchild;

}bnode;

typedef struct node *blink;

blink creat()

{

blink bt;

char ch;

ch=getchar();

if(ch==' ') return(NULL);

else

{

bt=(struct node *)malloc(sizeof(bnode));

bt->data=ch;

bt->lchild=creat();

bt->rchild=creat();

}

return bt;

}

int n=0,n1=0;

void preorder(blink bt)

{

if (bt)

{

n++;

if(bt->lchild==NULL&&bt->rchild==NULL)

n1++;

preorder(bt->lchild);

preorder(bt->rchild);

}

}

void main()

{

blink root;

root=creat();

preorder(root);

printf("此二叉数的接点数有:%d\n",n);

printf("此二叉数的叶子数有:%d\n",n1);}

代码:

int get_deep(bitree T,int x)

{

if(T->data==x)

{

printf("%d\n",get_deep(T));

exit 1;

}

else

{

if(T->lchild)get_deep(T->lchild,x);

if(T->rchild)get_deep(T->rchild,x);

}

int get_depth(bitree T)

{

if(!T)return 0;

else

{

m=get_depth(T->lchild);

n=get_depth(T->rchild);

return(m>nm:n)+1;

}

}

代码:

#include<>

#include<>

struct node{

char data;

struct node *lchild,*rchild;

}bnode;

typedef struct node *blink;

blink creat()

{

blink bt;

char ch;

ch=getchar();

if(ch==' ') return(NULL);

else

{

bt=(struct node *)malloc(sizeof(bnode));

bt->data=ch;

bt->lchild=creat();

bt->rchild=creat();

}

return bt;

}

void preorder(blink bt)

{

if (bt)

{

printf("%c",bt->data);

preorder(bt->lchild);

preorder(bt->rchild);

}

}

void inorder(blink bt)

{

if(bt)

{

inorder(bt->lchild);

printf("%c",bt->data);

inorder(bt->rchild);

}

}

void postorder(blink bt)

{

if(bt)

{

postorder(bt->lchild);

postorder(bt->rchild);

printf("%c",bt->data);

}

}

int max(int x,int y)

{

if(x>y)

return x;

else

return y;

}

int depth(blink bt)

{

if (bt)

return 1+max(depth(bt->lchild),depth(bt->rchild)); else

return 0;

}

void main()

{

blink root;

root=creat();

printf("\n");

printf("按先序排列:");

preorder(root);printf("\n");

printf("按中序排列:");

inorder(root);printf("\n");

printf("按后序排列:");

postorder(root);printf("\n");

printf("此二叉数的深度是:");

printf("depth=%d\n",depth(root));

}

4.实验小结

通过本章学习实验,对树有了初步的认识。树就是一种非线性的数据结构,描述了客观世界中事物之间的层次关系。这种结构有着广泛的应用,一切具有层次关系的问题都可以用树来表示。

实验四图

1.实验要求

1.1熟悉图的各种存储方法。

1.2掌握遍历图的递归和非递归的算法。

1.3理解图的有关算法。

2.实验内容

2.1写出将一个无向图的邻接矩阵转换成邻接表的算法。

2.2以邻接表作存储结构,给出拓扑排序算法的实现。

3.实验代码

代码:

void mattolist(int a[][],adjlist b[],int n) /*n为图的结点个数*/

{

for(i=0;i

for(i=0;i=0;j--)

if(a[i][j]!=0)

{p=(arcnodetp *)malloc(sizeof(arcnodetp));/*产生邻接点*/

p->adjvex=j;

p->nextare=b[i].firstare;

b[i].firstarc=p;

}

}

代码:

typedef struct vexnode

{

VertexType vertex;

int in;/*增加一个入度域*/

ArecNodeTp * fristarc;

}AdjList[vnum];

typedef struct graph

{

AdjList adjlist;

int vexnum,arcnum;

}GraphTp;

Top_Sort(GraphTp g)

{

LstackTp *p;/*建立入度为0的顶点栈S*/

int m,i,v;

initStack(S);

for(i=0;i<;i++)

if[i].in==0)/*if(w的入度==0)*/

push(S,&v);/*w入S栈*/

m=0;

whlie(!EmptyStack(S)){

Pop(S,&v)ristarc;/*p=图g中顶点v的第一个邻接点*/

while(p!=NULL){n)--;/*p的入度--*/

if[p->adjvex].in==0)/*if(p的入度==0)*/

Push(S,p->adjvex);/*p入S栈*/

p=p->nextarc;/*p=图g中的顶点v的下一个邻接点*/

}

}

if(m< return 0;/*图含有环*/

else return 1;

}

4.实验小结

通过本章学习实验,对图有了具体的认识。图也是一种非线性的数据结构,这种结构有着广泛的应用,一切具有关系的问题都可以用图来表示。

实验五查找

1.实验要求

1.1掌握顺序查找、二分法查找、分块查找和哈希表查找的算法。

1.2能运用线性表的查找方法解决实际问题。

2.实验内容

2.1编写一个算法,利用二分查找算法在一个有序表中插入一个元素

X,并保持表的有序性。

2.2根据给定的数据表,先建立索引表,然后进行分块查找。

3.实验代码

代码:

#include <>

#include <>

#define MAXNUM 20

int input(int *);/*输入数据*/

int search(int *,int,int);/*查找插入位置*/

void plug(int *,int,int);/*插入数据*/

void main(void)

{

int data[MAXNUM],m;

int insert=1;

m=input(data);

printf("Input the insert num:");

scanf("%d",data);

insert=search(data,1,m);/*返回插入位置*/

plug(data,insert,m);

for(insert=1;insert<=m+1;insert++)/*显示数据*/

printf("%3d",*(data+insert));

getch();

}

int input(int *data)

{

printf("\nInput the max num:");

scanf("%d",&m);

printf("input data\n");

for(i=1;i<=m;i++)

scanf("%d",data+i);

return m;

}

int search(int *data,int low,int high)/*递归查找插入位置*/

{

int mid;

if(low>high) return low;/*没有找到插入数据,返回low*/

else{

mid=(low+high)/2;

if(*(data+mid)==*data) retun mid;/*找到插入数据,返回mid*/ else if(*(data+mid)<*data)

else if(*()data+mid)>*data)

}

search(data,low,high);

}

void plug(int *data,int insert,int m)

{

int i;

for(i=m;i>insert;i--)

*(data+i+1)=*(data+i);

*(data+insert)=*data

}

代码:

#include <>

#include <>

#definr N 18 /*元素个数*/

#definr Blocknum 3 /*分块数*/

typedef struct indexterm

{

int key;/*最大关键字*/

int addr;/*块的起始地址*/

}index; /*索引表数据类型*/

index * CreateList(int data[],int n)/*建索引表*/

{

index *p;

int m,j,k;

m=n/BlockNum;/*分为BlockNum块,每块有m个元素*/

p=(index *)malloc(BlockNum *sizeof(index));

for(k=0;k

(p+k)->key=dat a[m*k];

(p+k)->addr=m*k;

for(j=m*k;j

if(data[j]>(p+k)->key)

(p+k)->key=data[j];/*块的最大关键字*/

}

return p;

}

int BlockSearch(index *list,int rectab[],int n,int m,int k)/*分块查找*/ {

int low=0,high=m-1,mid,i;

int b=n/m;/*每块有b个元素*/

while(low<=high){/*块间折半查找*/

mid=(low+high)/2;

if((list+mid)->key>=k)

high=mid+1;

else low=mid+1;

}

if(low

for(i=(list+low)->addr;i<=(list+low)->adder+b-1&&rectab[i]!=k;i++);

if(i<=(list+low)->addr+b-1)

return i;

else return -1;

}

return -1;

}

void main()

{

int record[N]={22,12,13,8,9,20,33,42,44,38,24,48,60,58,74,49,86,53};

int key;

index *list;

printf("please input key:\n");

scanf("%d",&key);

list=CreateList(record,N);

printf("data postion id %d\n",BlockSearch(list,record,N,BlockNum,key));

}

4.实验小结

通过本章的学习,对排序有较高层次的理解与认识,从平时的练习中可以看出排序是数据处理中经常用到的重要运算。有序的顺序表可以采用查找效率较高的折半查找法,而无序的顺序表只能用效率较低的顺序查找法。

数据结构实验报告格式

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

网络综合实训报告

网络综合实训报告 网络综合实训报告 篇一: 网络综合实训报告 西安航空职业技术学院 网络综合实训课程 课程设计说明书 设计题目: 学校网络综合设计 专业: 网 班级学号: 02211 姓名: 赵 指导教师: 杨婵 201X 年 05 月 21 日 教务处印制 西安航空职业技术学院 课程设计任务书 课题名称:

设计内容: 1.综合布线及网络拓扑的设计 服务器的配置与调试 3.路由器级交换机的配置 4.网络安全技术的应用 技术条件或要求: 能实现局域网的互通,各个vlan间能相互访问整个局域网能访问外网。 指导教师(签名): 教研室主任(签名): 开题日期: 年月 12日完成日期: 年月 23 日 篇二: 网路工程专业综合实验报告 专业综合实验报告 课程名称: 专业综合实验课题名称: 校园网—接入层和汇聚层姓名: 班级: 带教老师:报告日期: 201X.1 9--201X.1

电子信息学院 目录 一、综合实验的目的和意义 5 2校园网规划. 7 3网络技术指导与测试分析 9 三、综合实验的步骤与方法 . 六、结果分析与实验体会.. 1 1.1 网络设计与实践的实训意义 .. 3 3项目3-永久链路模块端接 . 38 4.1项目1-WWW服务配置 .. 38 4.2项目2-电子邮件服务配置 .. 55 参考文献 0 实训报告 .. 4 3.校园网功能需求 5 (二)网络规划与设计 .. 6 1.网络拓扑图. 10 (三)服务器配置 .. 20 五、实训结果 26 六、实训总结及体会 26 实训报告 一、实训目的 本次实训其目的主要是为了培养学生的实际动手操作与实践能力,增 强学生的团队合作意识。通过模拟案例形式密切联系实际,潜移默化

数据结构实验报告

数据结构实验报告 一.题目要求 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

数据结构实验报告全集

数据结构实验报告全集 实验一线性表基本操作和简单程序 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始终指向生成的单链表的最后一个节点

数据结构实训报告

《数据结构与算法分析》 课程设计 题目:文字处理程序(字符串的应用) 学生姓名:林武祥 学号:16230243008 专业班级: B16软件工程1班 指导教师:颜慧 学院: 大数据与计算机学院 2017年12月

目录 一、课程设计题目 (1) 二、开发背景 (1) 三、项目总体设计 (1) 3.1需求分析 (1) 3.2系统功能模块设计 (1) 四、详细实现步骤和流程图 (2) 4.1功能实现展示 (2) 4.2流程图框架 (4) 五、部分具体代码分析及实现 (5) 六、项目总结 (9) 七、参考文献 (9)

一、课程设计题目 文字处理程序(字符串的应用)及简单文本编辑器 二、开发背景 由于对于现在的电脑族对电脑的使用频率逐年增大,对电脑的需要具有依赖性。其中不乏有对文本的编辑的需求,因此,本次实训周做了一款简单的文本编辑器的应用程序,对文本编辑器的相关功能做了一定的实现,既简单又实用。 本软件为一个简单而且很实用的文本编辑的工具,不但可以进行一些文字的输入和文本的读取,而且,该文本编辑器也可以对文本进行一些保存、另存、剪切、粘贴、删除等常规的操作,是一款比较适合广大普通用户和非计算机专业的用户和文本编辑的处理软件,本软件不但界面友好,功能齐全,而且操作简单。 三、项目总体设计 3.1需求分析 文字处理程序运行后弹出文本编辑器的主界面,由键盘输入或以打开的方式输入或显示文本文件内容。其中程序基本操作:包括文本的复制、粘贴、剪切、删除、查找、替换等功能。统计功能:分别统计出文本文件中的各类字符的个数,包括英文字母个数、空格个数、汉字个数、标点符号个数、总字数等并显示统计信息;允许用户统计某一字符串在文章中出现的次数,并显示统计信息;加密和解密:用户可对指定文本文件进行加密和解密操作;用户可保存该文件。 3.2系统功能模块设计

数据结构实验报告模板

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);//重载赋

《网络操作系统(Windows-server-)》实训指导书

目录 《网络操作系统(WINDOWS SERVER 2012)》课程实训指导书 (1) 一、实训目的与要求 (1) 二、实训内容 (1) 三、参考课时 (1) 四、实训考核与组织 (1) 五、说明 (2) 六、实训项目 (2) 实训项目一 WINDOWS SERVER 2012的安装与配置 (3) 实训项目二 DNS域名服务的实现 (5) 实训项目三 DHCP服务器的配置与管理的实现 (8) 实训项目四 WINS服务器的配置 (10) 实训项目五 WINDOWS SERVER 2012活动目录的实现 (12) 实训项目六 WINDOWS SERVER 2012磁盘管理的实现 (16) 实训项目七 WINDOWS SERVER 2012文件管理 (18) 一、实训目的与要求 (18) 实训项目八 IIS服务器的应用实现 (21) 一、实训目的与要求 (21) 在网站中放置一些网页,打开浏览器访问该网站。(在本机上访问可使用“,在其它计算机上访问可使用“ FTP服务器的配置的实现 (22)

《网络操作系统(Windows Server 2012)》课程实训指导书一、实训目的与要求 网络操作系统(Windows Server 2012)实训以Windows Server 2012为操作平台,全面介绍与Windows Server 2012网络系统管理有关的知识和 Windows Server 2012系统管理的基本技能,最终使学生掌握解决一般网络系统管理中遇到的问题的能力。 二、实训内容 Windows Server 2012 网络操作系统实训分为:Windows Server 2012的安装与配置、DNS域名服务的实现、DHCP服务器的配置与管理的实现、WINS服务器的配置、Windows Server 2012的相关管理、以及各种服务器的配置与应用。 三、参考课时 四、实训考核与组织

数据结构实验总结报告

数据结构实验总结报告 李博杰PB10000603 一、调试过程中遇到哪些问题? (1)在二叉树的调试中,从广义表生成二叉树的模块花了较多时间调试。 由于一开始设计的广义表的字符串表示没有思考清晰,处理只有一个孩子的节点时发生了混乱。调试之初不以为是设计的问题,从而在代码上花了不少时间调试。 目前的设计是: Tree = Identifier(Node,Node) Node = Identifier | () | Tree Identifier = ASCII Character 例子:a(b((),f),c(d,e)) 这样便消除了歧义,保证只有一个孩子的节点和叶节点的处理中不存在问题。 (2)Huffman树的调试花了较长时间。Huffman编码本身并不难处理,麻烦的是输入输出。 ①Huffman编码后的文件是按位存储的,因此需要位运算。 ②文件结尾要刷新缓冲区,这里容易引发边界错误。 在实际编程时,首先编写了屏幕输入输出(用0、1表示二进制位)的版本,然后再加入二进制文件的读写模块。主要调试时间在后者。 二、要让演示版压缩程序具有实用性,哪些地方有待改进? (1)压缩文件的最后一字节问题。 压缩文件的最后一字节不一定对齐到字节边界,因此可能有几个多余的0,而这些多余的0可能恰好构成一个Huffman编码。解码程序无法获知这个编码是否属于源文件的一部分。因此有的文件解压后末尾可能出现一个多余的字节。 解决方案: ①在压缩文件头部写入源文件的总长度(字节数)。需要四个字节来存储这个信息(假定文件长度不超过4GB)。 ②增加第257个字符(在一个字节的0~255之外)用于EOF。对于较长的文件,会造成较大的损耗。 ③在压缩文件头写入源文件的总长度%256的值,需要一个字节。由于最后一个字节存在或不存在会影响文件总长%256的值,因此可以根据这个值判断整个压缩文件的最后一字节末尾的0是否在源文件中存在。 (2)压缩程序的效率问题。 在编写压缩解压程序时 ①编写了屏幕输入输出的版本 ②将输入输出语句用位运算封装成一次一个字节的文件输入输出版本 ③为提高输入输出效率,减少系统调用次数,增加了8KB的输入输出缓存窗口 这样一来,每写一位二进制位,就要在内部进行两次函数调用。如果将这些代码合并起来,再针对位运算进行一些优化,显然不利于代码的可读性,但对程序的执行速度将有一定提高。

《网络操作系统Windowsserver 》实训指导书

目录 二、实训内容........................................................ 三、参考课时........................................................ 四、实训考核与组织.................................................. 五、说明............................................................ 六、实训项目........................................................ 实训项目一WindowsServer2012的安装与配置........................... 实训项目二DNS域名服务的实现....................................... 实训项目三DHCP服务器的配置与管理的实现............................ 实训项目四WINS服务器的配置........................................ 实训项目五WindowsServer2012活动目录的实现......................... 实训项目六WindowsServer2012磁盘管理的实现......................... 实训项目七WindowsServer2012文件管理............................... 实训项目八IIS服务器的应用实现..................................... 实训项目九FTP服务器的配置的实现...................................

最新数据结构实训总结

精品文档 这次课程设计的心得体会通过实习我的收获如下1、巩固和加深了对数据结构的理解,提高综合运用本课程所学知识的能力。2、培养了我选用参考书,查阅手册及文献资料的能力。培养独立思考,深入研究,分析问题、解决问题的能力。3、通过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。4、通过课程设计,培养了我严肃认真的工作作风,逐步建立正确的生产观念、经济观念和全局观念。从刚开始得觉得很难,到最后把这个做出来,付出了很多,也得到了很多,以前总以为自己对编程的地方还不行,现在,才发现只要认真做,没有什么不可能。 编程时要认真仔细,出现错误要及时找出并改正,(其中对英语的要求也体现出来了,因为它说明错误的时候都是英语)遇到问题要去查相关的资料。反复的调试程序,最好是多找几个同学来对你的程序进行调试并听其对你的程序的建议,在他们不知道程序怎么写的时候完全以一个用户的身份来用对你的用户界面做一些建议,正所谓当局者迷旁观者清,把各个注意的问题要想到;同时要形成自己的编写程序与调试程序的风格,从每个细节出发,不放过每个知识点,注意与理论的联系和理论与实践的差别。另外,要注意符号的使用,注意对字符处理,特别是对指针的使用很容易出错且调试过程是不会报错的,那么我们要始终注意指针的初始化不管它怎么用以免不必要麻烦。 通过近两周的学习与实践,体验了一下离开课堂的学习,也可以理解为一次实践与理论的很好的连接。特别是本组所做的题目都是课堂上所讲的例子,在实行之的过程中并不是那么容易事让人有一种纸上谈兵的体会,正所谓纸上得来终觉浅绝知此事要躬行。实训过程中让我们对懂得的知识做了进一步深入了解,让我们的理解与记忆更深刻,对不懂的知识与不清楚的东西也做了一定的了解,也形成了一定的个人做事风格。 通过这次课程设计,让我对一个程序的数据结构有更全面更进一步的认识,根据不同的需求,采用不同的数据存储方式,不一定要用栈,二叉树等高级类型,有时用基本的一维数组,只要运用得当,也能达到相同的效果,甚至更佳,就如这次的课程设计,通过用for的多重循环,舍弃多余的循环,提高了程序的运行效率。在编写这个程序的过程中,我复习了之前学的基本语法,哈弗曼树最小路径的求取,哈弗曼编码及译码的应用范围,程序结构算法等一系列的问题它使我对数据结构改变了看法。在这次设计过程中,体现出自己单独设计模具的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,也从中发现自己平时学习的不足和薄弱环节,从而加以弥补。 精品文档

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

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;

2018数据结构实训题目

以下共15个题目,同一个班上做同一个题目的人数最多3个,每人必须独立完成。题目一、停车场模拟程序 题目二、杂货店排队模拟程序 如果有朋友正在排队,则可以插队。 题目三、哈希表存储的电话号码查询

基本要求: ?设每个记录有以下数据项:用户名、电话、地址; ?从键盘输入各记录,以电话号码为关键字建立哈希表; ?采用链地址法方法解决冲突; ?能够查找并显示给定电话号码的相关记录。 题目四、信科校园导游咨询模拟系统 基本要求: ?系统中记录了校园中的教学楼、图书馆、食堂、田径场、篮球场、超市、医务室等 坐标信息和连接这些坐标的路径信息 ?每条路径包含两个坐标间的距离和预计消耗的卡路里 ?能进行坐标点的增加和删除 ?能够满足不同用户的查询,如:两坐标之间的最高卡路里路线和最短距离路线 题目五、哈夫曼编码和译码 基本要求: ?输入为:一段英文或中文的文章(原文) ?对输入的文章构造哈夫曼树 ?生成对应的编码 ?输出为:原文所对应的编码(译文) ?根据已经生成的编码表,输入任意的译文可以得到对应的原文 题目六、舞伴配对问题 基本要求: ?所有参加舞会的人按性别分为两队 ?排队的先后次序,按不同规则可分为:时间先后、从高到矮的顺序 ?第一轮舞曲开始的时候,舞场上最多容纳N对舞者,则两队中的前N个可以在舞 场上跳舞,其余人员等待下轮舞曲开始后才能进入舞场。第一轮舞曲结束后,前N个挑完舞曲的人可以选择离开或是继续排队等待下一轮舞曲开始后跳舞。 题目七、表达式求值问题 基本要求: ?输入为:任意的中缀表达式 ?对输入表达式做合法性判断,不合法的如:(a+b ,a++b等 ?对合法的表达式进行中缀转后缀的处理 ?再对后缀表达式进行计算 ?输出整个表达式的值,如:(—2+3)*4 = 4 题目八、基于双向链表的约瑟夫生者死者游戏

数据结构实验报告.

实验目的 (1)学会用先序创建一棵二叉树。 (2)学会采用递归算法对二叉树进行先序、中序、后序遍历。 (3)学会打印输出二叉树的遍历结果。 实验内容 【问题描述】建立一棵二叉树,并对其进行遍历(先序、中序、后序),打印输出遍历结果。 【基本要求】 从键盘接受输入(先序),以二叉链表作为存储结构,建立二叉树(以先序来建立),并采用递归算法对其进行遍历(先序、中序、后序),将遍历结果打印输出。 【测试数据】 ABCффDEфGффFффф(其中ф表示空格字符) 则输出结果为先序:ABCDEGF 中序:CBEGDFA 后序:CGBFDBA 【选作内容】 采用非递归算法实现二叉树遍历。 实验步骤 (一)需求分析 1、在这个过程中,接受遍历的二叉树是从键盘接受输入(先序),以二叉链表作为存储结构,建立的二叉树。因此,首先要创建一棵二叉树,而这棵二叉树是先序二叉树。本演示程序中,集合的元素设定为大写字母ABCDEFG,输出的先序,中序,后序遍历分别为ABCDEGF,CBEGDFA,CGBFDBA。二叉树可以表示为:

接受的输入数据在进行递归的先序,中序,后序遍历后,分别将结果打印出来。 2、在程序运行的过程中可以看到,以计算机提示用户执行的方式进行下去,即在计算机终端上提示“输入二叉树的先序序列”后,由用户在键盘上输入ABC##DE#G##F###,之后相应的选择遍历及遍历结果显示出来。 3、程序执行的命令包括:首先是二叉树的先序序列被创建输入,其次是对输入进去的先序序列有次序的进行先序,中序,后序遍历。最后是打印出二叉树的遍历结果。 4、测试数据 (1)在键盘上输入的先序序列ABC##DE#G##F### (2)先序遍历结果ABCDEGF

数据结构实验报告图实验

图实验 一,邻接矩阵的实现 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;

数据结构实训

高职学院 计算机专业类 课程设计报告 (2012 -2013学年第1学期) 课程设计类型:数据结构 题目:栈+串+队列+线性表+后缀表达式求值 学号: 姓名: 专业:计算机应用技术 指导教师: 课程设计日期:高职学院制 目录 1. 问题分析..................................... 错误!未定义书签。

问题描述·················错误!未定义书签。 要求分析·················错误!未定义书签。 2. 总体设计..................................... 错误!未定义书签。 功能分析·················错误!未定义书签。 3. 详细设计..................................... 错误!未定义书签。 程序结构图················错误!未定义书签。 程序流程图················错误!未定义书签。 4. 功能测试..................................... 错误!未定义书签。 本系统的主界面··············错误!未定义书签。 栈子系统界面···············错误!未定义书签。 串子系统界面···············错误!未定义书签。 队列子系统界面··············错误!未定义书签。 线性表子系统界面·············错误!未定义书签。 后缀表达式求值子系统界面·········错误!未定义书签。 退出系统·················错误!未定义书签。 5. 课程设计小结................................. 错误!未定义书签。参考文献..................................... 错误!未定义书签。附录:源代码清单................................ 错误!未定义书签。

数据结构C语言版实验报告完整版

数据结构C语言版实验 报告 HEN system office room 【HEN16H-HENS2AHENS8Q8-HENH1688】

数据结构(C语言版) 实验报告 专业:计算机科学与技术、软件工程 学号:_______________________ 班级:_________软件二班______________ 姓名:________朱海霞______________ 指导教师:___刘遵仁________________ 青岛大学信息工程学院 2013年10月 实验1 实验题目:顺序存储结构线性表的插入和删除 实验目的: 了解和掌握线性表的逻辑结构和顺序存储结构,掌握线性表的基本算法及相关的时间性能分析。 实验要求: 建立一个数据域定义为整数类型的线性表,在表中允许有重复的数据;根据输入的数据,先找到相应的存储单元,后删除之。 实验主要步骤: 1、分析、理解给出的示例程序。 2、调试程序,并设计输入一组数据(3,-5,6,8,2,-5,4,7,- 9),测试程序的如下功能:根据输入的数据,找到相应的存储单元并删除,显示表中所有的数据。 程序代码: #include<> #include<> #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10

typedef struct{ int* elem; int length; int listsize; }Sqlist; int InitList_Sq(Sqlist &L){ =(int*)malloc(LIST_INIT_SIZE*sizeof(int)); if(! return -1; =0; =LIST_INIT_SIZE; return OK; } int ListInsert_Sq(Sqlist&L,int i,int e){ if(i<1||i>+1) return ERROR; if=={ int *newbase; newbase=(int*)realloc,+LISTINCREMENT)*sizeof(int)); if(!newbase) return -1; =newbase; +=LISTINCREMENT; } int *p,*q; q=&[i-1]); for(p=&[]);p>=q;--p) *(p+1)=*p; *q=e; ++; return OK; } int ListDelete_Sq(Sqlist &L,int i,int e){ int *p,*q; if(i<1||i>return ERROR; p=&[i-1]); e=*p; q=+; for(++p;p<=q;++p) *(p-1)=*p; ; return OK; } int main(){ Sqlist L; InitList_Sq(L);ertex=a; irstedge=NULL; irstedge; G->adjlist[i].firstedge=s; irstedge;

数据结构实验报告 - 答案汇总

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

专业班级学号姓名 实验1 实验题目:单链表的插入和删除 实验目的: 了解和掌握线性表的逻辑结构和链式存储结构,掌握单链表的基本算法及相关的时间性能分析。 实验要求: 建立一个数据域定义为字符串的单链表,在链表中不允许有重复的字符串;根据输入的字符串,先找到相应的结点,后删除之。 实验主要步骤: 1、分析、理解给出的示例程序。 2、调试程序,并设计输入数据(如:bat,cat,eat,fat,hat,jat,lat,mat,#),测试程序 的如下功能:不允许重复字符串的插入;根据输入的字符串,找到相应的结点并删除。 3、修改程序: (1)增加插入结点的功能。 (2)将建立链表的方法改为头插入法。 程序代码: #include"stdio.h" #include"string.h" #include"stdlib.h" #include"ctype.h" typedef struct node //定义结点 { char data[10]; //结点的数据域为字符串 struct node *next; //结点的指针域 }ListNode; typedef ListNode * LinkList; // 自定义LinkList单链表类型 LinkList CreatListR1(); //函数,用尾插入法建立带头结点的单链表 LinkList CreatList(void); //函数,用头插入法建立带头结点的单链表 ListNode *LocateNode(); //函数,按值查找结点 void DeleteList(); //函数,删除指定值的结点 void printlist(); //函数,打印链表中的所有值 void DeleteAll(); //函数,删除所有结点,释放内存

数据结构课实训报告报告

数据结构实训报告 题目: 用C 实现外部流文件的引用 一、课程设计题目: 二、问题描述: 1、外部流文件的引用。 2、输入,输出控件化。 三、问题分析 以明确的无歧义的陈述说明课程设计的任务,强调的是程序要做什么? 我们小组认为,本题的要求是在于用JAVA 实现对外部数据库的调用,更新,排序以及删除。在一开始,我们打算用本学期所学习的数据结构方面的知识再结合上学期所学的JAVA 控件知识来实现这道题目(见图) ,但是在调试过程中遇到了很大的问题,不得不中

途换别的方式进行算法实现。

并明确规定: 1、输入的形式和输入值的范围;数据库表格的形式输入,并依照数据库表格字段值的规定来规定输入值。 2、输出的形式;用JAVA语言来进行窗口式的调用。 3、程序所能达到的功能;在JAVA界面进行对外部数据库的简单应用。比如进行查询,更新,排序以及删除。 4、算法涉及的基本理论分析:窗口界面是基于事件的程序,用户对具体图形组件的选择和激活,产生事件。在程序中创建监听器类并注册事件,并实例化。 5、题目研究和实现的价值。我们小组认为,本题的研究价值在于,此题目设计多个程序的跨平台应用,通过JAVA程序对数据库的加载和调用,实现后台调用和操作数据库。实现的价值是,通过这个简单的程序初步认识到编程这项工作在将来的程序开发中的作用和价值。

四、算法设计 1、概要设计 阐述说明本算法中用到的所有数据结构的定义及其含义、主程序的流程以及各程序模块之间的层次(调用)关系。 因为涉及到外部文件流的引用,所以我们小组进行的方式是用JAVA命令式的程序对数据库进行创建,删除,插入以及查找。 我们用了四个小程序来进行对数据库的调用,分别是见图。 2、详细设计 (1)实现概要设计中定义的所有数据类型;货号(char),品名(char),进口(boolean),单价(integer),数量(integer),开单日期(date),生产单位(char)。 (2)所有函数的接口描述;ListSelectionListener,WindowListener,处理窗口时间的监听器类。 (3)所有函数的算法描述(只需要写出伪码算法);函数为调用数据库和对数据库操作以及构造用户图形界面。 (3)对主程序和其他模块也都需要写出伪码算法(伪码算法达到的详细程度建议为:按照伪码算法可以在计算机键盘直接输入高级程序设计语言程序),可采用流程图、N –S 图或PAD图进行描述;操作数据库的主程序为两个类,其中try类是对数据库进行加载桥接以及创建,catch类是依照算法的健壮性,对错误情况的处理。 (4)画出函数的调用关系图。无。 五、算法实现 创建数据表程序J_AccessCreateTable import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; public class J_AccessCreateTable{

计算机网络实训报告

南昌工程学院 《计算机网络》实训报告实训起止时间:2019年12月16号至2019年12月20日

目录 一、实训时间 (1) 二、实训地点 (1) 三、实训目的 (1) 四、实训情况简介 (1) 五、实训内容 (2) 六、实训小结或体会 (8) 七、部门主管 (10) 八、参考文献 (10) 九、指导教师评阅 (11)

一、实训时间 2019年12月16号至 2019年12月20日。 二、实训地点 三、实训目的 通过本实训,掌握测试常用设备得使用和使用技巧,掌握局域网组建,掌握局域网组建中网络操作系统软件得的安装,设置和维护使用,掌握网络服务的安装与配置。初步接触网络管理方法及网络工程技术基本知识,强化学生的网络环境配置能力。通过综合训练,加强实践环节,使得课堂上学得的理论在实践中灵活运用,培养学生的网络操作综合能力,以满足和适应社会对学生得基本要求。 具体包括,掌握网络模拟软件的安装与配置,理解常用的网络服务(DHCP,静态路由,VLAN等)的工作原理,学会安装,配置,管理和使用他们,并学会使用常用的网络命令,并利用它们及相关软件分析,检测并排除网络故障。 四、实训情况简介 本次计算机网络实训一共持续了5天。 第一天,由于给我们上课的老师并不是我们平常给我们上课的老师,而是学校请的培训机构的老师,所以开始的时候不免需要一番介绍以及大致此次实训的介绍,还有实训模拟软件eNSP,Oracle VM VirtualBox等软件的安装与配置。 第二天正式开始了实训,这一天做的是DHCP服务器的配置,通过DHCP动态主机配置协议来给该路由器下的主机动态分配IP地址和DNS地址。 第三天配置静态路由,手动给网络拓扑上的各个路由器配置路由,以使不同网段下的主机可以相互通信。 第四天配置VLAN分组,在逻辑上把网络上的主机划分分组,来隔绝广播域,提高通信的带宽。

相关文档