实验报告学生.docx

上传人:b****8 文档编号:29742095 上传时间:2023-07-26 格式:DOCX 页数:76 大小:117.66KB
下载 相关 举报
实验报告学生.docx_第1页
第1页 / 共76页
实验报告学生.docx_第2页
第2页 / 共76页
实验报告学生.docx_第3页
第3页 / 共76页
实验报告学生.docx_第4页
第4页 / 共76页
实验报告学生.docx_第5页
第5页 / 共76页
点击查看更多>>
下载资源
资源描述

实验报告学生.docx

《实验报告学生.docx》由会员分享,可在线阅读,更多相关《实验报告学生.docx(76页珍藏版)》请在冰豆网上搜索。

实验报告学生.docx

实验报告学生

 

《数据结构》

实验报告

 

班级学号:

11214030236

姓名:

庄彦兴

 

《数据结构》

实验报告

 

学院:

信息科学与技术学院

专业:

信息系统与信息管理

学期:

2013~2014学年第一学期

班级:

信A1232班

学号:

1124030236

姓名:

庄彦兴

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

院(系):

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

数据结构教师签名:

班级

信A1232

学号

11214030236

实验室

专业

信息系统与信息管理

姓名

庄彦兴

计算机号

实验名称

所用软件

实验成绩

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

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

#include

#include

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********************/

____________________;/*填空位置1:

变量定义*/

____________________;/*填空位置2:

从键盘输入需要判定的字符串*/

____________________;/*填空位置3:

调用func函数*/

____________________;/*填空位置4:

根据返回值flag的值,输出判定结果*/

}

该算法的时间复杂度是:

____________________。

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

写出完整的源程序代码。

#include

#include

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

{

 

}

voidmain()

{

charstr[10],ch;

intt;

gets(str);

scanf("%c",&ch);

t=f(str,ch);

printf("t=%d\n",t);

}

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

写出完整的源程序代码。

#include

structstudent

{

intid;

charname[10];

floatscore[3];

}s;

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

{

 

}

实验2线性表

院(系):

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

数据结构教师签名:

班级

信1232

学号

11214030236

实验室

专业

信息管理与信息系统

姓名

庄彦兴

计算机号

实验名称

所用软件

实验成绩

2.1实验目的

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

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

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

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

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

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

2.2实验准备

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

2.顺序表的基本操作:

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

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

4.链表的基本操作:

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

2.3实验任务

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

(1)源程序代码。

#include

#defineMaxsize100

typedefintdatatype;

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

{

datatypelist[Maxsize];/*定义一个存放顺序表的一维数组list*/

intlast;/*定义线性表的最后一个元素的下标*/

}seqlist;

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

{

inti;

printf("Pleaseinputthelenoftheseqlist:

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

scanf("%d",&(*L).last);

printf("Pleaseinputtheeveryelementoftheseqlist:

");

for(i=0;i<=(*L).last;i++)/*从键盘输入顺序表的每个元素*/

scanf("%d",&(*L).list[i]);

printf("Outputtheeveryelementoftheseqlist:

\n");

for(i=0;i<=(*L).last;i++)/*顺序表建立成功后,输出整个顺序表*/

printf("%5d",(*L).list[i]);/*运行结果

(1)*/

printf("\n");

}

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

{

if((i<0)||(i>(*L).last))/*判断给定位置是否为合法取值*/

printf("Theplaceisnotcorrect!

\n");

else

printf("%d\n",(*L).list[i]);/*运行结果

(2)*/

}

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

{

if((i<0)||(i>(*L).last))

printf("Theplaceisnotcorrect!

\n");

elseif(i==0)

printf("%d\n",(*L).list[i+1]);

elseif(i==(*L).last)

printf("%d\n",(*L).list[i-1]);

elseif((i>0)&&(i<(*L).last))

printf("%d,%d\n",(*L).list[i-1],(*L).list[i+1]);/*运行结果(3)*/

}

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

{

intm;

for(m=0;m<=(*L).last;m++)

{

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

=key)

continue;

else

{

printf("Seachingisseccessful!

\n");

printf("Theplaceofthesearchkeyis:

%d\n",m);

break;

}

}

if(m>(*L).last)

printf("Theseqlisthasnothekey!

\n");/*运行结果(4)*/

}

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

{

intm;

printf("Outputtheeveryelementoftheseqlistbeforedeleting:

\n");/*删除前输出顺序表中的所有元素*/

for(m=0;m<=(*L).last;m++)

printf("%5d",(*L).list[m]);/*运行结果(5)*/

printf("\n");

for(m=i;m<=(*L).last;m++)/*删除位置之后的所有元素依次左移一位*/

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

(*L).last--;

printf("Outputtheeveryelementoftheseqlistafterdeleting:

\n");/*删除后输出顺序表中的所有元素*/

for(m=0;m<(*L).last;m++)

printf("%5d",(*L).list[m]);/*运行结果(6)*/

printf("\n");

}

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

{

intm;

printf("Outputtheeveryelementoftheseqlistbeforeinserting:

\n");/*插入前输出顺序表中的所有元素*/

for(m=0;m<=(*L).last;m++)

printf("%5d",(*L).list[m]);/*运行结果(7)*/

printf("\n");

(*L).last++;

for(m=(*L).last;m>=i;m--)/*插入位置之后的元素依次右移一位*/

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

(*L).list[i]=e;/*在指定位置i上插入元素e*/

printf("Outputtheeveryelementoftheseqlistafterinserting:

\n");/*插入后输出顺序表中的所有元素*/

for(m=0;m<(*L).last;m++)

printf("%5d",(*L).list[m]);/*运行结果(8)*/

printf("\n");

}

voidmain()

{

seqlist*L,l;/*注意:

l是字母L的小写*/

inti,e;

L=&l;

printf("\n--------------------function:

create--------------------\n");

create(L);/*调用函数create建立一个顺序表*/

printf("\n--------------------function:

access--------------------\n");

printf("Pleaseinputtheposition:

");

scanf("%d",&i);/*从键盘输入访问位置i*/

access(L,i);/*调用函数access根据指定位置访问顺序表*/

printf("\n--------------------function:

before_after--------------------\n");

printf("Pleaseinputtheposition:

");

scanf("%d",&i);/*从键盘输入指定位置i*/

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

printf("\n--------------------function:

search--------------------\n");

printf("Pleaseinputthesearchkey:

");

scanf("%d",&e);/*从键盘输入查找元素e*/

search(L,e);/*调用函数search根据关键字e查找顺序表*/

printf("\n--------------------function:

delete--------------------\n");

printf("Pleaseinputthedeleteposition:

");

scanf("%d",&i);/*从键盘输入删除位置i*/

delete(L,i);/*调用函数delete删除指定位置i的元素*/

printf("\n--------------------function:

insert--------------------\n");

printf("Pleaseinputtheinsertposition:

");

scanf("%d",&i);/*从键盘输入插入位置i*/

printf("Pleaseinputtheinsertelement:

");

scanf("%d",&e);/*从键盘输入插入元素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

5

插入位置i

7

插入元素e

28

(3)运行结果记录。

①Outputtheeveryelementoftheseqlist:

⑤Outputtheeveryelementoftheseqlistbeforedeleting:

⑥Outputtheeveryelementoftheseqlistafterdeleting:

⑦Outputtheeveryelementoftheseqlistbeforeinserting:

⑧Outputtheeveryelementoftheseqlistafterinserting:

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

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

提示:

(1)顺序表中原有数据个数为10个,依次是{1,3,5,7,12,45,67,89,92,99}。

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

(3)注意表长的变化。

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

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

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

图2-1实验运行结果

#defineMaxsize100

#include

typedefintdatatype;

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

{

datatypelist[Maxsize];/*定义一个存放顺序表的一维数组list*/

intlast;/*定义线性表的最后一个元素的下标*/

}seqlist;

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

{

inti;

printf("\n\nPleaseinputthelengthoftheorderedseqlist:

");

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

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

printf("\n\nPleaseinputtheeveryelementoftheorderedseqlist:

");

for(i=0;i<=(*L).last;i++)

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

_____________________;

/*功能:

从键盘输入有序表中的每个元素,{1,3,5,7,12,45,67,89,92,99}*/

}

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

{

inti,j,m,n;

printf("\n\nOutputtheeveryelementoftheseqlistbeforeinserting:

\n");/*插入前输出顺序表中的所有元素*/

for(n=0;n<=(*L).last;n++)

printf("%5d",(*L).list[n]);

printf("\n");

(*L).last++;

for(i=(*L).last-1;i>=0;i--)/*i变量自减*/

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

if(_____________________)/*确定插入位置*/

{

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

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

j=i;

}

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

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

printf("\n\nOutputtheeveryelementoftheseqlistafterinserting:

\n");/*插入后输出顺序表中的所有元素*/

for(n=0;n<=(*L).last;n++)

printf("%5d",(*L).list[n]);

printf("\n\n");

}

voidmain()

{

seqlist*L,l;/*l是字母L的小写*/

inte=25;

L=&l;

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

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

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

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

}

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

(1)源程序代码。

#include"stdio.h"

#include"malloc.h"

typedefintDataType;

typedefstructlinknode

{

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

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

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

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

NODE*createback(NODE*H)/*自定义函数:

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

{

NODE*p,*q;

inti,n;

DataTypee;

H=(NODE*)malloc(LEN);/*为头结点H分配存储空间*/

H->next=NULL;/*从头结点开始建立单链表*/

q=H;

printf("Pleaseinputthelengthofthelinklist:

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

scanf("%d",&n);

printf("Pleaseinputtheeveryelement:

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

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

{

p=(NODE*)malloc(LEN);/*为当前插入链表的结点分配存储空间*/

scanf("%d",&e);

p->data=e;/*指向结点的指针变量p指向当前要插入的结点*/

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

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

}

q->next=NULL;

returnH;

}

voidsearch(NODE*H,DataTypee)/*在单链表中查找指定数据元素e*/

{

NODE*p;

inti=1;

p=H->next;/*指针变量p赋值为头结点的后继,从该位置开始查找整个单链表*/

while(p)/*当p不为空时,执行循环*/

{

if(p->data!

=e)/*指针变量p当前指向结点的数据域不等于查找元素e*/

{

p=p->next;/*指针后移,继续向下查找*/

i++;

continue;

}

else/*否则,查找成功,输出该结点的位置*/

{

printf("Searchingissuccessful!

\n");

printf("Theplaceofthesearchkeyinthememoryis:

%d\n",p);

/*输出该结点在内存中的存储地址,

(2)*/

printf("Theplaceofthesearchkeyinthelistis:

%d\n",i);

/*输出该结点在线性表中的位置,(3)*/

break;

}

}

if(p->next==NULL)

printf("Thelinklisthas

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

当前位置:首页 > 职业教育 > 中职中专

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

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