C语言数据结构实验报告Word文档下载推荐.docx
- 文档编号:18453187
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:49
- 大小:703.87KB
C语言数据结构实验报告Word文档下载推荐.docx
《C语言数据结构实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C语言数据结构实验报告Word文档下载推荐.docx(49页珍藏版)》请在冰豆网上搜索。
12.
13.
14.
15.
目
录
每次实验课必须带上此本子,以便教师检查预习情况和记录实验原始数据。
实验时必须遵守实验规则。
用正确的理论指导实践必须人人亲自动手实验,但反
对盲目乱动,更不能无故损坏设备。
这是一份重要的不可多得的自我学习资料,它将记录着你在大学生涯中的学习和学
习成果。
请你保留下来,若干年后再翻阅仍将感到十分新鲜,记忆犹新。
它将推动你在
人生奋斗的道路上永往直前!
实验一C语言编程
实验名称:
实验目的:
复习C语言程序设计,回顾C语言结构数据及指针数据的应用。
实验原理:
C语言结构化程序设计思想,结构数据类型,指针数据类型。
实验设备:
电脑,TURBOC2.0/WIN-TC/VISUALC++
实验内容:
求两个复数相加之和。
实验代码:
#include<
stdio.h>
structcomp//定义复数的类型结构
{floatx;
floaty;
};
structcompa,b,sum,jian1,mul1;
intz;
voidmain()
{voidcreat(structcomp*c);
//声明所用到的函数
voidoutput(structcompa);
structcompadd(structcompk,structcomph);
structcompjian(structcompk,structcomph);
structcompmul(structcompk,structcomph);
creat(&
a);
output(a);
b);
sum=add(a,b);
printf("
sum="
);
output(sum);
jian1=jian(a,b);
jian="
output(jian1);
mul1=mul(a,b);
mul="
output(mul1);
getch();
}
voidcreat(structcomp*c)//输入
{floatc1,c2;
pleaseentertherecord:
"
scanf("
%f"
&
c1);
pleaseentertheimage:
c2);
c->
x=c1;
c->
y=c2;
voidoutput(structcompa)//输出
{printf("
%f+%fi\n\n"
a.x,a.y);
structcompadd(structcompk,structcomph)//相加
{structcompc;
c.x=k.x+h.x;
c.y=k.y+h.y;
return(c);
structcompjian(structcompk,structcomph)//相减
c.x=k.x-h.x;
c.y=k.y-h.y;
structcompmul(structcompk,structcomph)//相乘
c.x=k.x*h.x-k.y*h.y;
c.y=h.x*k.y+k.x*h.y;
实验结果:
实验心得:
计算机事实上只能完成较简单的运算,不能完成较复杂的运算。
但人们往往根据一些基本的法则和定理,通过转化,可以通过这些基本的加减乘除运算完成复杂的科学计算。
这就像本实验,通过简单的加法和乘法对复数的实部和虚部分别计算,然后用特殊的方法将结果表示出来,完成了两个复数的各种运算。
使会用者感觉就好像是直接进行了复数的运算。
实验二顺序存储
掌握线性表顺序存储结构的描述,学会针对顺序存储线性表的基本操作。
C语言结构化程序设计思想,结构体及数组的应用。
线性表的顺序存储表示及基本操作。
stdlib.h>
#defineMAXSIZE20
typedefintElemType;
//定义所需的类型
typedefstruct
{ElemTypea[MAXSIZE];
intlength;
}SqList;
SqLista,b,c;
//定义所需的类型并声明所用到的函数
voidcreat_list(SqList*L);
voidout_list(SqListL);
voidinsert_sq(SqList*L,inti,ElemTypee);
ElemTypedelete_sq(SqList*L,inti);
intlocat_sq(SqListL,ElemTypee);
voidmain()
{inti,k,loc;
ElemTypee,x;
charch;
//供用户选择所需的操作
do{
printf("
*********************主菜单*********************"
\n1.createlist"
\n2.inserteattheipositionelement"
\n3.deleteipositionelementandreturnit"
\n4.findtheelementandreturnit"
\n5.endtheprogram"
\n请输入您的选择(以输入5表结束:
)"
scanf("
%d"
k);
switch(k)
{
case1:
{creat_list(&
out_list(a);
}break;
case2:
{printf("
\ni,e=?
%d,%d"
i,&
e);
insert_sq(&
a,i,e);
case3:
\npleaseenterthei:
i);
x=delete_sq(&
a,i);
case4:
\ne=?
loc=locat_sq(a,e);
if(loc==-1)printf("
\nnotfind%d"
loc);
elseprintf("
havefound,positionat%d"
}
\n************************************************\n\n\n"
}while(k!
=5);
\nGoodBye!
!
\nentertheenter,return\n"
ch=getchar();
voidcreat_list(SqList*L)//生成顺序表
{inti;
\npleaseenterthelength:
n="
scanf("
(L->
length));
for(i=1;
i<
=L->
length;
i++)
{printf("
data%d="
i);
scanf("
L->
a[i]);
}
voidout_list(SqListL)//输出所生成的顺序表
=L.length;
printf("
%6d"
L.a[i]);
voidinsert_sq(SqList*L,inti,ElemTypee)//在i位置,插入元素e
{intj;
if(L->
length==MAXSIZE)printf("
\nERROR!
overflow!
else
if(i<
1||i>
length)printf("
\nerrori"
else
for(j=L->
j>
=i;
j--)
L->
a[j+1]=L->
a[j];
L->
a[i]=e;
L->
length++;
ElemTypedelete_sq(SqList*L,inti)//删除第i个元素,并返回它的值
{ElemTypex;
intj;
length==0)printf("
thelistisempty!
else
if(i>
for(j=i;
j++)
a[j]=L->
a[j+1];
length--;
intlocat_sq(SqListL,ElemTypee)//查找值为e的元素,并返回它的位置
{inti=1;
while(i<
=L.length)
=L.length)return(i);
elsereturn(-1);
在做插入删除等操作时要注意先后顺序,要明确是先行动在进行插入删除等操作,还是先进行插入删除等。
注意不要使元素被元素被其它元素覆盖而得不到所需的结果。
要注意增加程序的重复使用性,使程序一次就能完成各种操作,尽量使程序的使用者自己选择所需的操作。
要尽量完善自己的代码,经过不断的测试找出其中考虑不足的地方。
实验三链式存储
掌握线性表链式存储结构的描述,学会针对链式存储线性表的基本操作。
C语言结构化程序设计思想,结构体及指针的应用。
线性表的链式存储表示及基本操作。
#defineNULL0
typedefintDataType;
typedefstructLNode/*定义结点*/
{DataTypedata;
structLNode*next;
}LNode,*LinkList;
LinkListL;
LinkListcreat_List();
/*声明所用到的函数*/
voidout_List(LinkListL);
voidinsert_List(LinkListL,inti,DataTypee);
DataTypedelete_LinkList(LinkListL,inti);
intlocat_LinkList(LinkListL,DataTypee);
DataTypee,x;
charch;
do
\n1.建立线性链表"
\n2.在i位置插入元素e"
\n3.删除第i个元素,返回其值"
\n4.查找值为e的元素"
\n5.结束程序运行"
\n请输入您的选择(1,2,3,4,5)"
switch(k)
{case1:
{L=creat_List();
out_List(L);
}break;
case2:
\npleaseentertheiande:
scanf("
%d%d"
insert_List(L,i,e);
case3:
\npleaseenterthelocationiyouwanttodelete:
i="
x=delete_LinkList(L,i-1);
if(x!
=-1)
out_List(L);
=-1)printf("
\ntheelementatthe%dlocation:
x=%d\n"
i,x);
case4:
\npleaseentertheelementeyouwanttofind:
scanf("
loc=locat_LinkList(L,e);
if(loc==-1)printf("
\ncannotfind"
elseprintf("
\nhavefound,theelementisat:
location=%d"
}
}while(k>
=1&
&
k<
5);
\nGOODBYE!
\n"
LinkListcreat_List()/*产生线性表*/
{LinkListhead,p,s;
DataTypex;
head=(LinkList)malloc(sizeof(LNode));
head->
data=0;
next=NULL;
p=head;
pleaseenterthedata(endby-1000):
x);
while(x!
=-1000)
{s=(LinkList)malloc(sizeof(LNode));
s->
data=x;
p->
next=s;
p=s;
pleaseenterthedata(-1000toend):
return(head);
voidout_List(LinkListL)/*输出线性表*/
{LinkListp;
p=L->
next;
while(p!
=NULL)
p->
data);
p=p->
voidinsert_List(LinkListL,inti,DataTypee)//在i位置插入元素e
{LinkLists,p;
p=L;
j=0;
/*找第i-1个结点*/
=NULL&
j<
i-1)
{p=p->
j++;
if(p==NULL||j>
i-1)
\niERROR!
data=e;
next=p->
DataTypedelete_LinkList(LinkListL,inti)//删除在i位置的元素
{LinkListp,q;
intj=0;
DataTypex;
=i-1)
if(p==NULL)
ERROR!
return(-1);
{q=p->
x=q->
data;
next=q->
free(q);
return(x);
intlocat_LinkList(LinkListL,DataTypee)//查找值为e的元素
intj=1;
p->
data!
=e)
j=j+1;
if(p!
=NULL)returnj;
elsereturn-1;
链式存储插入和删除操作比较方便,不需要大量移到数据,而不能随机的输出任一个元素,只能通过从头开始找到所需要的该元素。
但一定要注意在建立和插入时一定要先申请地址空间。
并且在删除减少元素时要记得将空间释放掉。
如果可以的话要尽量使运行界面简单,并且让使用者很容易就知道怎么用。
实验四模式匹配算法应用
掌握字符串存储结构的描述,学会字符串的模式匹配算法的应用。
C语言结构化程序设计思想,结构体及指针和字符数组的应用。
1、朴素模式匹配算法
2、快速模式匹配算法
string.h>
#defineMAXSIZE100
intIndex_BF(charS[],charT[],intpos);
intKMP(char*Text,char*Pattern,intpos);
{intk,pos,n;
chars11[MAXSIZE];
chars22[MAXSIZE];
{
\n1.输入待匹配的两个字符串"
\n2.模式匹配的朴素算法进行匹配"
\n3.模式匹配的KMP算法进行匹配"
\n4.结束程序"
\n请输入您的选择(以输入10表结束:
{
case1:
{
printf("
pleaseinputtheMAINLYstring:
%s"
s11);
pleaseinputtheMODEstring:
s22);
pleaseenterthepositionyouwanttostart:
pos);
break;
}
{n=Index_BF(s11,s22,pos);
if(n!
normalmode:
havefound,attheposition:
%d."
n);
haveNOTfound!
break;
{n=KMP(s11,s22,pos);
KMP:
感谢使用,GOODBYE!
=4);
intIndex_BF(charS[],charT[],intpos)//模式匹配的朴素算法
{
inti=pos,j=0;
while(S[i+j]!
='
\0'
T[j]!
)
if(S[i+j]==T[j])
j++;
//继续比较后一字符
{
i++;
j=0;
if(T[j]=='
returni;
//匹配成功返回下标
return-1;
}
voidgetNext(constchar*pattern,intnext[])//用于求next[j]的值
next[0]=-1;
intk=-1,j=0;
while(pattern[j]!
='
if(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 数据结构 实验 报告