数据结构用C语言描述课后答案.doc
文本预览下载声明
第一章 绪论
课堂习题
1、试写一算法,自大到小依次输出顺序读入的三个整数X,Y和Z的值。
【解答】
一解:IF XY X-Y;
IF YZ Y-Z;
IF XY X-Y;
此算法最坏情况下比较3次,移动(即赋值9次)
二解: IF XY {TEMP=X;X=Y;Y=TEMP;}
IF YZ {TEMP=Z;Z=Y;
IF XTEMP Y=TEMP
ELSE
{Y=X;X=TEMP;}
此算法最坏情况下比较3次,移动7次
三解: IF XY
{IF YZ X-Y
ELSE X-Z;}
ELSE
{IF XZ X-Z;}
IF YZ Y-Z;
此算法最坏情况下比较3次,移动6次
2、抽象数据类型三元组的定义、表示和实现
【解答】抽象数据类型三元组的定义已经给出(见教材12页),要求设计实现三元组基本操作的演示程序。
#include stdio.h
#include stdlib.h
typedef int ElemType;
typedef ElemType *Triplet;
typedef int Status;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
Status InitTriplet(Triplet *T)
{
ElemType v1,v2,v3;
*T=(ElemType *)malloc(3*sizeof(ElemType));
if (*T==0) return(OVERFLOW);
scanf(%d,%d,%d,v1,v2,v3);
(*T)[0]=v1; (*T)[1]=v2; (*T)[2]=v3;
}
Status DestroyTriplet(Triplet *T)
{
free(*T);
*T=NULL;
}
Status Get(Triplet T,int i,ElemType *e)
{
if (i1||i3) return ERROR;
*e=T[i-1]; return OK;
}
Status Put(Triplet T,int i,ElemType e)
{
if (i1||i3) 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;
}
void main()
{
Triplet T;
ElemType e;
int select,i;
printf(请输入三个数,建立一个三元组:\n);
if (InitTriplet(T)==OVERFLOW)
printf(存储空间分配失败,退出程序\n);
else
{
do
{
printf(1:取三元组第I个元素\n);
printf(2:修改三元组第I个元素\n);
printf(3:判断三元组元素是否递增\n);
printf(4:判断三元组元素是否递减\n);
printf(5:取三元组最大元\n);
printf(6:取三元组最小元\n);
printf(0:结束\n);
scanf(d,select);
switch(select)
{
case 1:
printf(\ni=);
scanf(%d,i);
if (Get(T,i,e)==ERROR) printf(I值输入不合法\n);
else pr
显示全部