数据结构实验报告及答案.docx
- 文档编号:7231328
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:40
- 大小:381.69KB
数据结构实验报告及答案.docx
《数据结构实验报告及答案.docx》由会员分享,可在线阅读,更多相关《数据结构实验报告及答案.docx(40页珍藏版)》请在冰豆网上搜索。
数据结构实验报告及答案
实验报告
实验课程:
学生姓名:
学号:
专业班级:
2013年2月25日
南昌大学实验报告
学生姓名:
学号:
专业班级:
实验类型:
□验证□综合□设计□创新实验日期:
2013-4-12实验成绩:
实验1线性表
一.实验目的
1.熟悉线性表抽象数据类型的表示和实现方法。
2.掌握线性表上的基本操作。
二.实验基本原理
IDE环境中进行C程序开发的基本过程
三.主要仪器设备及耗材
PC微型计算机系统
DOS操作系统或Windows操作系统
TurboC集成开发环境、VisualC++开发环境、或其它C语言开发环境。
四.实验步骤
1.进入所选择的IDE环境。
2.书写程序源代码。
3.调试程序。
4.验证程序。
五.实验项目
顺序表代码:
linearList.h文件内代码为
#defineOK1
#defineERROR0
#defineTURE1
#defineFALSE0
typedefintstatus;
typedefintElemType;
#defineLIST_INIT_SIZE100
#defineLISTINCREMENT10
typedefstruct
{
ElemType*elem;
intlength;
intlistsize;
}SqList;
statusInitList_Sq(SqList**L);
statusListInsert_Sq(SqList*L,inti,ElemTypee);
statusListDelete_Sq(SqList*L,inti);
intLocateElem(SqList*L,ElemTypee);
LinearList.c文件内部代码
#include
#include"LinearList.h"
statusInitList_Sq(SqList**L)
{
*L=(SqList*)malloc(sizeof(SqList));
(**L).elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
(**L).length=0;
(**L).listsize=LIST_INIT_SIZE;
returnOK;
}
statusListInsert_Sq(SqList*L,inti,ElemTypee)
{
ElemType*newbase,*p,*q;
if(i<1||i>L->length+1)
{
returnERROR;
}
if(L->length>=L->listsize)
{
newbase=(ElemType*)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(ElemType));
L->elem=newbase;
L->listsize+=LISTINCREMENT;
}
q=&(L->elem[i-1]);
for(p=L->elem+L->length-1;p>=q;p--)
{
*(p+1)=*p;
}
*q=e;
L->length++;
returnOK;
}
statusListDelete_Sq(SqList*L,inti)
{
ElemType*q,*p;
if(i<1||i>L->length)
{
returnERROR;
}
p=&(L->elem[i]);
for(q=L->elem+L->length-1;p<=q;p++)
{
*(p-1)=*p;
}
L->length--;
returnOK;
}
intLocateElem(SqList*L,ElemTypee)
{
inti=0;
while(i
=e)i++;
if(i>=L->length)
return0;
else
returni+1;
}
Main.c文件代码为
#include
#include"LinearList.h"
voidprintfElems(SqList*L)
{
inti;
for(i=0;i
{
printf("%d",L->elem[i]);
}
printf("\n");
}
voidmain()
{
SqList*list;
InitList_Sq(&list);//初始化顺序表
ListInsert_Sq(list,1,10);//把10插入第一位置
ListInsert_Sq(list,1,9);//把9插入第一位置
ListInsert_Sq(list,1,8);//把8插入第一位置
ListInsert_Sq(list,1,7);//把7插入第一位置
printfElems(list);//打印出所有元素
ListDelete_Sq(list,1);//删除
printf("删除第一个之后\n");
printfElems(list);////打印出所有元素
printf("第%d个元素是10",LocateElem(list,10));//查找元素10的位置
}
链表代码为:
LinkList.h
#defineOK1
#defineERROR0
#defineTURE1
#defineFALSE0
typedefintstatus;
typedefintElemType;
typedefstructLNode
{
ElemTypedata;
structLNode*next;
}LNode,*LinkList;
statusInitLinkList(LinkList*L);
statusLinkListInsert(LinkListL,inti,ElemTypee);
statusLinkListDelete(LinkListL,inti);
intLink_LocateElem(LinkListL,ElemTypee);
LinkList.c
#include"LinkList.h"
#include
#include
statusInitLinkList(LinkList*L)
{
*L=(LinkList)malloc(sizeof(LNode));
(*L)->next=NULL;
returnOK;
}
statusLinkListInsert(LinkListL,inti,ElemTypee)
{
LinkLists,p=L;
intj=0;
while(p&&j { p=p->next; j++; } if(! p||j>i-1) { returnERROR; } s=(LinkList)malloc(sizeof(LNode)); s->data=e; s->next=p->next; p->next=s; returnOK; } statusLinkListDelete(LinkListL,inti) { LinkListq,p=L; intj=0; while(p&&j { p=p->next; j++; } if(! p||j>i-1) { returnERROR; } q=p->next; p->next=q->next; free(q); returnOK; } intLink_LocateElem(LinkListL,ElemTypee) { inti=0; while(L&&e! =L->data) { L=L->next; i++; } if(! L) { return-1; } else { returni; } } Main.c #include #include"LinkList.h" voidprintfElems_L(LinkListL) { L=L->next; while(L) { printf("%d",L->data); L=L->next; } printf("\n"); } voidmain() { LinkListhead; InitLinkList(&head);//初始化链表 LinkListInsert(head,1,10);//第一个位置插入10 LinkListInsert(head,1,9);//第一个位置插入9 LinkListInsert(head,1,8);//第一个位置插入8 LinkListInsert(head,1,7);//第一个位置插入7 printfElems_L(head);//打印所有的元素 LinkListDelete(head,1);//删除第一个元素 printfElems_L(head);//打印所有元素 printf("第%d个元素是10\n",Link_LocateElem(head,10));//查找元素10的位置*/ } 六.思考讨论题或体会或对改进实验的建议 总结实验中在编辑、编译、运行等各环节中所出现的问题及解决方法。 七.参考资料 《数据结构习题集》(C语言版)严蔚敏吴伟民编著清华大学出版社 《C程序设计题解与上机指导》(第三版) 谭浩强编著 清华大学出版社 南昌大学实验报告 学生姓名: 学号: 专业班级: 实验类型: □验证□综合□设计□创新实验日期: 2013-4-12实验成绩: 实验2栈与队列 一.实验目的 3.熟悉栈与队列抽象数据类型的表示和实现方法。 4.掌握栈与队列的基本操作。 二.实验基本原理 IDE环境中进行C程序开发的基本过程 三.主要仪器设备及耗材 PC微型计算机系统 DOS操作系统或Windows操作系统 TurboC集成开发环境、VisualC++开发环境、或其它C语言开发环境。 四.实验步骤 5.进入所选择的IDE环境。 6.书写程序源代码。 7.调试程序。 8.验证程序。 五.实验项目 1. 借助栈实现对表达式中括弧是否配对的判断算法 #include #include"Stack.h" intisPiar(charc1,charc2) { if((c1=='['&&c2==']')||(c1=='{'&&c1=='}')||(c1=='('&&c2==')')) { return1; } return0; } voidmain() { charc; chartopValue; sqStack*S; InitStack(&S); while((c=getchar())! =10) { if(StackEmpty(S)) { Push(S,c); } else { GetTop(S,&topValue); if(isPiar(topValue,c)) { Pop(S,&topValue); } else { Push(S,c); } } } if(StackEmpty(S)) { printf("格式正确\n"); } else { printf("格式错误\n"); } } – 2.假设循环队列中只设rear和length来表示队尾元素的位置和队中元素的个数,设计并实现这样的队列结构,试给出判断循环队列的队满条件,设计相应的入队和出队算法并编程实现。 Queue.c #include #include"queue.h" statusInitQueue(cycleQueue**q) { *q=(cycleQueue*)malloc(sizeof(cycleQueue)); (*q)->base=(ElemType*)malloc(sizeof(ElemType)*MAXQSIZE); (*q)->rear=0; (*q)->lenght=0; returnOK; } statusEnQueue(cycleQueue*q,ElemTypee) { if(q->lenght>=MAXQSIZE)returnERROR; q->base[q->rear]=e; q->rear=(q->rear+1)%MAXQSIZE; q->lenght++; returnOK; } statusDeQueue(cycleQueue*q,ElemType*e) { if(q->lenght==0)returnERROR; *e=q->base[(q->rear-q->lenght+MAXQSIZE)%MAXQSIZE]; q->lenght--; returnOK; } 六.思考讨论题或体会或对改进实验的建议 总结实验中在编辑、编译、运行等各环节中所出现的问题及解决方法。 七.参考资料 《数据结构习题集》(C语言版)严蔚敏吴伟民编著清华大学出版社 《C程序设计题解与上机指导》(第三版) 谭浩强编著 清华大学出版社 南昌大学实验报告 学生姓名: 学号: 专业班级: 实验类型: □验证□综合□设计□创新实验日期: 2013-4-19实验成绩: 实验3串 一.实验目的 5.理解串的模式匹配算法(包括KMP算法)。 6.明确串也是特殊的线性表,掌握其特殊性所在。 二.实验基本原理 IDE环境中进行C程序开发的基本过程 三.主要仪器设备及耗材 PC微型计算机系统 DOS操作系统或Windows操作系统 TurboC集成开发环境、VisualC++开发环境、或其它C语言开发环境。 四.实验步骤 9.进入所选择的IDE环境。 10.书写程序源代码。 11.调试程序。 12.验证程序。 五.实验项目 实验课题: –编写函数计算一个子串在主串中出现的次数,如果主串中没有该子串则返回0。 (实验数据: 自拟) #include #include typedefstruct{ char*ch; intlength; }String; String*makeString(char*ch) { char*c; inti,j; String*str=(String*)(malloc(sizeof(String))); for(i=0,c=ch;*c;++i,++c); str->ch=ch; str->length=i; } intcountSubString(String*str,String*subStr) { inti,j,sum=0; for(i=0;i<(str->length-subStr->length+1);i++) { for(j=0;j { if(subStr->ch[j]! =str->ch[j+i])break; } if(j==subStr->length)sum++; } returnsum; } voidmain() { String*str=makeString("abcdefababc"); String*subStr=makeString("ab"); printf("ab在abcdefababc出现次数为%d\n",countSubString(str,subStr)); } 六.思考讨论题或体会或对改进实验的建议 总结实验中在编辑、编译、运行等各环节中所出现的问题及解决方法。 七.参考资料 《数据结构习题集》(C语言版)严蔚敏吴伟民编著清华大学出版社 《C程序设计题解与上机指导》(第三版) 谭浩强编著 清华大学出版社 南昌大学实验报告 学生姓名: 学号: 专业班级: 实验类型: □验证□综合□设计□创新实验日期: 2013-4-26实验成绩: 实验4数组与广义表 一.实验目的 7.掌握稀疏矩阵的表示方法及其运算的实现。 8.实现稀疏矩阵在三元组、十字链表等表示下的各运算并分析其效率。 二.实验基本原理 IDE环境中进行C程序开发的基本过程 三.主要仪器设备及耗材 PC微型计算机系统 DOS操作系统或Windows操作系统 TurboC集成开发环境、VisualC++开发环境、或其它C语言开发环境。 四.实验步骤 13.进入所选择的IDE环境。 14.书写程序源代码。 15.调试程序。 16.验证程序。 五.实验项目 实验课题: –将一个以三元组表存储的稀疏数组以矩阵的形式打印出来(测试数据自拟) (要求给出算法、运行结果的屏幕截图,源程序电子打包提交) #include #include #defineMAXSIZE256 typedefintElemType; typedefstruct { inti,j; ElemTypee; }Triple; typedefstruct { Tripledata[MAXSIZE]; intr,c,z; }TSMatrix; voidInitTSMatrix(TSMatrix**T,intr,intc) { *T=(TSMatrix*)malloc(sizeof(TSMatrix)); (*T)->r=r; (*T)->c=c; (*T)->z=0; } voidInsertMatrix(TSMatrix*T,inti,intj,intv) { if(T->z>=MAXSIZE)return; T->data[T->z].i=i; T->data[T->z].j=j; T->data[T->z].e=v; T->z++; } voidprintfMatrix(TSMatrix*T) { inti=0; intindex; ElemType*arr=(ElemType*)malloc(sizeof(ElemType)*T->r*T->c); for(;i for(i=0;i { index=(T->data[i].i-1)*T->c+(T->data[i].j-1); arr[index]=T->data[i].e; } for(i=0;i { if(i%T->c==0)printf("\n"); printf("%d\t",arr[i]); } printf("\n"); free(arr); } voidmain() { TSMatrix*T; inti,j,r,c,v; printf("请输入矩阵行数和列数\n"); scanf("%d%d",&i,&j); InitTSMatrix(&T,i,j); printf("请输入非零点的个数\n"); scanf("%d",&j); for(i=0;i { printf("请输入第%d个点格式为(行号列号数值)\n",i+1); scanf("%d%d%d",&r,&c,&v); InsertMatrix(T,r,c,v); } printfMatrix(T); } 六.思考讨论题或体会或对改进实验的建议 总结实验中在编辑、编译、运行等各环节中所出现的问题及解决方法。 七.参考资料 《数据结构习题集》(C语言版)严蔚敏吴伟民编著清华大学出版社 《C程序设计题解与上机指导》(第三版) 谭浩强编著 清华大学出版社 南昌大学实验报告 学生姓名: 学号: 专业班级: 实验类型: □验证□综合□设计□创新实验日期: 2013-5-10实验成绩: 实验5二叉树的操作 一.实验目的 9.掌握二叉树的结构特征及存储结构特点。 10.掌握二叉树的基本运算。 二.实验基本原理 IDE环境中进行C程序开发的基本过程 三.主要仪器设备及耗材 PC微型计算机系统 DOS操作系统或Windows操作系统 TurboC集成开发环境、VisualC++开发环境、或其它C语言开发环境。 四.实验步骤 17.进入所选择的IDE环境。 18.书写程序源代码。 19.调试程序。 20.验证程序。 五.实验项目 实验课题: –1.以二叉链表为存储结构,建立二叉树,在此基础上实现二叉要的前序遍历、中序遍历、后序遍历和层次遍历。 (测试数据自拟) –2.求题1所建立的二叉树的高度 Main.c #include #include #include"queue.h" voidcreateTree(BiThrTree*T) { charc; scanf("%c",&c); if(c=='') { *T=NULL; } else { *T=(BiThrTree)malloc(sizeof(BiThrNode)); (*T)->data=c; createTree(&(*T)->lchild); createTree(&(*T)->rchild); } } voidPreOrderTraverse(BiThrTreeT,void(*visit)(TElemType)) { if(T) { visit(T->da
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 报告 答案