数据结构三元组项目报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构项目报告
项目题目:三元组
项目成员:
日期:2012年4月1号
1.题目与要求
1.1问题提出
详细叙述本项目所要实现的问题是创建一个三元组并且实现一些有关三元组的操作。
1.2 本项目涉及的知识点
指针,数值,函数的调用
1.3功能要求
1创建一个三元组并且给它们赋值。
2如果三元组存在,把三元组释放并且赋空。
3根据给的一个位置,来找出三元组里面这个位置的值并且返回。
4判断三元组里面的值是否按递增排列.
5判断三元组里面的值是否按递减排列。
6求三元组里面数值的最大值.
7求三元组里面数值的最小值。
8根据给的一个位置,改变三元组这个位置的值。
2.功能设计
2.1总体设计
运用函数调用的方式将整个程序连接起来,使其变得完整,具体见代码。
2.2详细设计
本程序可分八个小模块。第1个小模块实现创建一个三元组并且给它们赋值;第2个小模块实现如果三元组存在,把三元组释放并且赋空;第3个小模块实现根据给的一个位置,来找出三元组里面这个位置的值并且返回;第个4小模块实现判断三元组里面的值是否按递增排列;第5个小模块实现判断三元组里面的值是否按递减排列;第个6小模块实现求三元组里面数值的最大值;第7个小模块实现求三元组里面数值的最小值;第8个小模块实现根据给的一个位置,改变三元组这个位置的值。
模块一:创建一个三元组并且给它们赋值,函数为Status InitTriplet(Triplet *T,ElemType v1,ElemType v2,ElemType v3)
T是个整形二级指针,v1,v2,v3整形变量,通过(ElemType *)malloc(3*sizeof(ElemType))申请一个连续的空间给(*T),然后v1,v2,v3的值分别赋给它们。
模块二:如果三元组存在,把三元组释放并且赋空,函数为Status DestroyTriplet(Triplet *T) T是个整形二级指针,如果(*T)存在,则通过free()把它释放并且把它赋空。
模块三:根据给的一个位置,来找出三元组里面这个位置的值并且返回,函数为Status Get(Triplet T,int i,ElemType *e)
T是个整形二级指针,整形i表示那个位置,*e表示要返回i位置的值,把(*T)【i-1】赋给*e。
模块四:判断三元组里面的值是否按递增排列,函数为Status IsAscending(Triplet T)
T是个整形二级指针,判断它们一个是否比一个大。
模块五:判断三元组里面的值是否按递减排列,函数为Status IsDescending(Triplet T)
T是个整形二级指针,判断它们一个是否比一个小。
模块六:求三元组里面数值的最大值,函数为Status Max(Triplet T,ElemType *e)
T是个整形二级指针,*e是用来返回最大的值,通过一个一个的比较来实现
模块七:求三元组里面数值的最小值,函数为Status Min(Triplet T,ElemType *e)
T是个整形二级指针,*e是用来返回最小的值,通过一个一个的比较来实现
模块八:根据给的一个位置,改变三元组这个位置的值,函数为Status Put(Triplet T,int i,ElemType e)
T是个整形二级指针,整形i表示那个位置,*e表示要赋值给i位置的值,把*e赋给(*T)【i-1】。
3.项目总结与思考
完成这个项目,让我发现自己很容易犯一些小错误,例如用一个指针表示它所指向的值,容易丢失*,通过这项目让我了解二级指针的使用。
源程序如下:
#include
#include
#include
#define OVERFLOW -2
#define OK 1
#define ERROR 0
typedef int Status;
typedef int ElemType;
typedef int *Triplet;
Status InitTriplet(Triplet *T,ElemType v1,ElemType v2,ElemType v3)
{
(*T)=(ElemType *)malloc(3*sizeof(ElemType));
if(!(*T)) exit(OVERFLOW);
(*T)[0]=v1;(*T)[1]=v2;(*T)[2]=v3;
return OK;
}
Status DestroyTriplet(Triplet *T)
{
free((*T));
(*T)=NULL;
return OK;
}
Status Get(Triplet T,int i,ElemType *e)
{
if(i<1||i>3) return ERROR;
*e=T[i-1];
return OK;
}
Status Put(Triplet T,int i,ElemType e)
{
if(i<1||i>3) return ERROR;
T[i-1]=e;
return OK;
}
Status IsAscending(Triplet T)
{
return(T[0]<=T[1])&&(T[1]<=T[2]);
}
Status IsDescending(Triplet T)
{
return (T[0]>=T[1])&&(T[1]>=T[2]);
}
Status Max(Triplet T,ElemType *e)
{
*e=(T[0]>=T[1])?((T[0]>=T[2])?T[0]:T[2]):((T[1]>=T[2])?T[1]:T[2]); return OK;
}
Status Min(Triplet T,ElemType *e)
{
*e=(T[0]<=T[1])?((T[0]<=T[2])?T[0]:T[2]):((T[1]<=T[2])?T[1]:T[2]); return OK;
}
int main()
{
Triplet A;
ElemType e,t,k,j,i;
InitTriplet(&A,1,2,3);
Get(A,2,&e);
printf("%d\n",e);
Put(A,2,4);
printf("%d\n",A[1]);
t=IsAscending(A);