最新版九江学院 数据结构 实验报告 完整答案Word文档格式.docx

上传人:b****5 文档编号:21374347 上传时间:2023-01-30 格式:DOCX 页数:80 大小:182.99KB
下载 相关 举报
最新版九江学院 数据结构 实验报告 完整答案Word文档格式.docx_第1页
第1页 / 共80页
最新版九江学院 数据结构 实验报告 完整答案Word文档格式.docx_第2页
第2页 / 共80页
最新版九江学院 数据结构 实验报告 完整答案Word文档格式.docx_第3页
第3页 / 共80页
最新版九江学院 数据结构 实验报告 完整答案Word文档格式.docx_第4页
第4页 / 共80页
最新版九江学院 数据结构 实验报告 完整答案Word文档格式.docx_第5页
第5页 / 共80页
点击查看更多>>
下载资源
资源描述

最新版九江学院 数据结构 实验报告 完整答案Word文档格式.docx

《最新版九江学院 数据结构 实验报告 完整答案Word文档格式.docx》由会员分享,可在线阅读,更多相关《最新版九江学院 数据结构 实验报告 完整答案Word文档格式.docx(80页珍藏版)》请在冰豆网上搜索。

最新版九江学院 数据结构 实验报告 完整答案Word文档格式.docx

7.2实验准备43

7.3实验任务43

实验8排序53

8.1实验目的53

8.2实验准备53

8.3实验任务53

实验9综合实验59

9.1实验目的59

9.2实验预习59

9.3实验任务59

实验1函数、指针、结构体复习

院(系):

信息科学与技术学院课程名称:

数据结构教师签名:

班级

B1131

学号

实验室

专业

姓名

计算机号

实验名称

所用软件

实验成绩

1.1实验目的

1.掌握C语言的语法并由算法形成相应的程序。

2.熟练掌握C语言函数调用的相关知识点。

3.熟练掌握C语言的指针和结构体相关知识点。

4.理解数据结构的基本概念。

1.2实验准备

1.复习C语言的函数调用、指针、结构体的相关知识点。

2.算法的概念和算法分析等知识。

3.C语言程序设计有关函数及数组等的知识及编程环境的使用方法。

4.复习课堂讲解的理论内容。

1.3实验任务

1.在提示/**********blank**********/下面填写合适的内容完成程序设计。

编写一个程序,判断一个字符串是否为“回文”(顺序和倒读都一样的字符串称为“回文”),并分析算法的时间复杂度。

提示:

实现本程序需要设计两个函数。

①主函数main,数据的输入和输出在该函数中完成。

②自定义函数func,判断串s是否为回文。

采用的方法是:

用flag表示是否为回文。

用i从左向右扫描字符串s,用j从右向左扫描字符串s,若s[i]与s[j]不相等,则flag=0(表示不是回文)并退出循环,否则,继续比较直到i<

j不成立。

/*判断指定字符串是否回文*/

#include<

stdio.h>

intfunc(char*str)

{

inti,j,t,flag;

t=strlen(str);

for(i=0,j=t-1;

i<

=t/2;

i++,j--)

{

if(str[i]==str[j])continue;

else

{flag=0;

break;

}

}

if(i>

=t/2)flag=1;

returnflag;

}

voidmain()

/********************blank********************/

char*s;

intflag;

/*填空位置1,变量定义*/

scanf("

%s"

s);

/*填空位置2,从键盘输入需要判定的字符串*/

flag=func(s);

/*填空位置3,调用func函数*/

if(flag==0)printf("

NO\n"

);

elseprintf("

YES\n"

/*填空位置4,根据返回值flag的值,输出判定结果*/

该算法的时间复杂度是:

_______O_____________。

2.定义函数intf(char*x,chary)判断x所指的字符串是否包含字符y,若是则函数返回1,否则返回0。

写出完整的源程序代码。

string.h>

intf(char*x,chary)/*写出自定义函数f的函数体部分,实现函数功能*/

inti=0,t,flag=0;

while(x[i]!

='

\0'

if(y==x[i]){flag=1;

break;

i++;

char*str,ch;

intt;

gets(str);

scanf("

%c"

&

ch);

t=f(str,ch);

printf("

t=%d\n"

t);

3.用结构体类型编写一个程序,输入一个学生的学号、姓名及3门课的成绩,计算并输出其平均成绩。

structstudent

intid;

charname[10];

floatscore[3];

}s;

main()/*写出main函数的函数体部分,实现函数功能*/

inti,j;

floatsum=0.0,aver;

printf("

Pleaseinputtheid:

"

scanf("

%d"

s.id);

Pleaseinputthename:

s.name);

Pleaseinputthethreescore:

for(i=0;

3;

i++)

%f"

s.score[i]);

sum=sum+s.score[i];

aver=sum/3;

averageis:

%f\n"

aver);

实验2线性表

2.1实验目的

1.掌握顺序表的基本特点。

2.熟练掌握顺序表的建立、查找、插入和删除等操作。

3.掌握单链表的基本特点。

4.熟练掌握单链表的建立、插入、删除等基本操作。

5.理解循环链表、双向链表的含义及其特点。

6.了解循环链表、双向链表的基本操作。

2.2实验准备

1.线性表顺序存储结构的表示。

2.顺序表的基本操作:

顺序表的建立、查找、插入、删除。

3.线性表链式存储结构的表示。

4.链表的基本操作:

链表的建立、查找、插入、删除。

2.3实验任务

1.实现顺序表的各种基本操作。

(1)源程序代码。

#defineMaxsize100

typedefintdatatype;

typedefstructseqnode/*顺序表的类型定义*/

datatypelist[Maxsize];

/*定义一个存放顺序表的一维数组list*/

intlen;

/*定义线性表的实际长度*/

}seqlist;

voidcreate(seqlist*L)/*建立一个顺序存储的线性表*/

inti;

Pleaseinputthelenoftheseqlist:

"

/*从键盘输入当前顺序表的实际长度*/

(*L).len);

Pleaseinputtheeveryelementoftheseqlist:

for(i=0;

(*L).len;

i++)/*从键盘输入顺序表的每个元素*/

(*L).list[i]);

Outputtheeveryelementoftheseqlist:

\n"

i++)/*顺序表建立成功后,输出整个顺序表*/

%5d"

(*L).list[i]);

/*运行结果

(1)*/

voidaccess(seqlist*L,inti)/*根据指定位置访问线性表*/

if((i<

0)||(i>

(*L).len-1))/*判断给定位置是否为合法取值*/

printf("

Theplaceisnotcorrect!

else

%d\n"

/*运行结果

(2)*/

voidbefore_after(seqlist*L,inti)/*根据指定位置寻找其前趋元素和后继元素*/

(*L).len-1))

elseif(i==0)

(*L).list[i+1]);

elseif(i==(*L).len-1)

(*L).list[i-1]);

elseif((i>

0)&

&

(i<

%d,%d\n"

(*L).list[i-1],(*L).list[i+1]);

/*运行结果(3)*/

voidsearch(seqlist*L,intkey)/*根据给定元素key查找顺序表*/

intm;

for(m=0;

m<

m++)

{

if((*L).list[m]!

=key)

continue;

Seachingisseccessful!

Theplaceofthesearchkeyis:

m);

break;

if(m>

=(*L).len)

Theseqlisthasnothekey!

/*运行结果(4)*/

voiddelete(seqlist*L,inti)/*删除顺序表的元素*/

Outputtheeveryelementoftheseqlistbeforedeleting:

/*删除前输出顺序表中的所有元素*/

(*L).list[m]);

/*运行结果(5)*/

for(m=i;

m++)/*删除位置之后的所有元素依次左移一位*/

(*L).list[m]=(*L).list[m+1];

(*L).len--;

Outputtheeveryelementoftheseqlistafterdeleting:

/*删除后输出顺序表中的所有元素*/

/*运行结果(6)*/

voidinsert(seqlist*L,inti,inte)/*在顺序表指定位置i后插入元素e*/

Outputtheeveryelementoftheseqlistbeforeinserting:

/*插入前输出顺序表中的所有元素*/

/*运行结果(7)*/

(*L).len++;

for(m=(*L).len-1;

m>

=i;

m--)/*插入位置之后的元素依次右移一位*/

(*L).list[m+1]=(*L).list[m];

(*L).list[i]=e;

/*在指定位置i上插入元素e*/

Outputtheeveryelementoftheseqlistafterinserting:

/*插入后输出顺序表中的所有元素*/

/*运行结果(8)*/

staticseqlist*L;

inti,e;

\nfunction:

create\n"

create(L);

/*调用函数create建立一个顺序表*/

access\n"

Pleaseinputtheposition:

i);

/*从键盘输入访问位置i*/

access(L,i);

/*调用函数access根据指定位置访问顺序表*/

before_after\n"

/*从键盘输入指定位置i*/

before_after(L,i);

/*调用函数before_after根据位置i确定前趋元素和后继元素*/

search\n"

Pleaseinputthesearchkey:

e);

/*从键盘输入查找元素e*/

search(L,e);

/*调用函数search根据关键字e查找顺序表*/

delete\n"

Pleaseinputthedeleteposition:

/*从键盘输入删除位置i*/

delete(L,i);

/*调用函数delete删除指定位置i的元素*/

insert\n"

Pleaseinputtheinsertposition:

/*从键盘输入插入位置i*/

Pleaseinputtheinsertelement:

/*从键盘输入插入元素e*/

insert(L,i,e);

/*调用函数insert在插入位置i上插入元素e*/

(2)上机调试上面的源程序,并根据下列原始数据记录程序的运行结果。

原始数据

顺序表的实际长度

10

顺序表的元素

1,2,3,4,5,6,7,8,9,10

访问顺序表的位置i

5

寻找前趋、后继元素的指定位置i

7

查找关键字e

58

删除位置i

插入位置i

插入元素e

28

(3)运行结果记录。

①Outputtheeveryelementoftheseqlist:

12345678910

②6

③7,9

4Theseqlisthasnothekey!

⑤Outputtheeveryelementoftheseqlistbeforedeleting:

⑥Outputtheeveryelementoftheseqlistafterdeleting:

1234578910

⑦Outputtheeveryelementoftheseqlistbeforeinserting:

⑧Outputtheeveryelementoftheseqlistafterinserting:

1234567828910

2.在提示/**********blank**********/下面填写合适的内容完成程序设计。

已知一个有序(升序)的顺序表,现有一个数据e,请将e插入到该顺序表中并要求插入后顺序表依然有序。

(1)顺序表中原有数据个数为10个,依次是{9}。

(2)需要插入的数据e值为25。

(3)注意表长的变化。

(4)有序表的插入,需要分两步完成:

第一步确定插入位置,第二步在插入位置上插入指定的数据。

(5)程序运行结果如图2-1所示。

图2-1实验运行结果

typedefstructseqnode/*顺序表的类型定义*/

voidcreate(seqlist*L)/*根据已知条件建立一个有序的顺序表*/

\n\nPleaseinputthelengthoftheorderedseqlist:

/**********blank**********/

/*从键盘输入有序表的实际长度,已知(*L).len=10*/

\n\nPleaseinputtheeveryelementoftheorderedseqlist:

/**********blank**********/

scanf("

/*从键盘输入有序表中的每个元素,{9}*/

voidinsert(seqlist*L,inte)/*在顺序表指定位置i后插入元素e*/

inti,j,m,n;

\n\nOutputtheeveryelementoftheseqlistbeforeinserting:

for(n=0;

n<

n++)

(*L).list[n]);

for(i=(*L).len-2;

i>

=0;

i--)

/**********blank**********/

If(e<

(*L).list[i])/*确定插入位置*/

(*L).list[i+1]=(*L).list[i];

/*插入位置之后的元素依次右移一位*/

j=i;

(*L).list[j]=e;

/*在确定的插入位置j上插入元素e*/

\n\nOutputtheeveryelementoftheseqlistafterinserting:

\n\n"

staticseqlist*L;

inte=25;

create(L);

/*调用函数create建立有序表*/

insert(L,e);

/*调用函数insert在有序表中插入元素e*/

3.实现单链表的各种基本操作。

#include"

stdio.h"

malloc.h"

typedefintDataType;

typedefstructlinknode

DataTypedata;

/*数据元素的类型,可以替换为任意实际需要的类型*/

structlinknode*next;

/*指示后继结点地址的指针*/

}NODE,*NODEPTR;

/*定义结点类型和指向结点的指针类型*/

#defineLENsizeof(NODE)/*用宏定义一个结点的长度,以便动态分配结点时使用*/

NODEPTRcreateback(NODEPTRH)/*自定义函数:

从链尾插入结点建立链表*/

NODEPTRp,q;

inti,n;

DataTypee;

H=(NODEPTR)malloc(LEN);

/*为头结点H分配存储空间*/

H->

next=NULL;

/*从头结点开始建立单链表*/

q=H;

Pleaseinputthelengthofthelinklist:

/*根据实际情况从键盘输入表长*/

n);

Pleaseinputtheeveryelement:

/*从键盘输入线性表的每个元素*/

for(i=1;

=n;

p=(NODEPTR)malloc(LEN);

/*为当前插入链表的结点分配存储空间*/

p->

data=e;

/*指向结点的指针变量p指向当前要插入的结点*/

q->

next=p;

/*指向结点的指针变量q指向当前插入结点的前趋结点,将p作为其后继赋值,完成当前结点的插入*/

q=p;

/*当前结点完成插入之后,修改指针变量q,为下一次插入做好准备*/

q->

returnH;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1