数据结构附录.docx
- 文档编号:28212190
- 上传时间:2023-07-09
- 格式:DOCX
- 页数:116
- 大小:212.22KB
数据结构附录.docx
《数据结构附录.docx》由会员分享,可在线阅读,更多相关《数据结构附录.docx(116页珍藏版)》请在冰豆网上搜索。
数据结构附录
实验1-1
#include
voidfa(inta)
{a=5;
printf("在函数fa中:
a=%d\n",a);}
voidfb(int&a)
{a=5;
printf("在函数fb中:
a=%d\n",a);}
voidmain()
{intn=1;
printf("在主程序中,调用函数fa之前:
n=%d\n",n);
fa(n);
printf("在主程序中,调用函数fa之后,调用函数fb之前:
n=%d\n",n);
fb(n);
printf("在主程序中,调用函数fb之后:
n=%d\n",n);}
实验1-2
#include
#include
voidmain()
{timebt1,t2;
longt;
doublex,sum=1,sum1;
inti,j,n;
printf("请输入xn:
");
scanf("%lf%d",&x,&n);
ftime(&t1);
for(i=1;i<=n;n++)
{sum1=1;
for(j=1;j<=i;j++)
sum1=sum1*(-1.0/x);
sum+=sum1;}
ftime(&t2);
t=(t2.time-t1.time)*1000+(t2.millitm-t1.millitm);
printf("sum=%lf,用时%ld毫秒\n",sum,t);}
实验1-3
#include
#include
voidmain()
{timebt1,t2;
longt;
doublex,sum=1,sum1=1;
inti,n;
printf("请输入xn:
");
scanf("%lf%d",&x,&n);
ftime(&t1);
for(i=1;i<=n;n++)
{sum1=-1.0/x;
sum+=sum1;}
ftime(&t2);
t=(t2.time-t1.time)*1000+(t2.millitm-t1.millitm);
printf("sum=%lf,用时%ld毫秒\n",sum,t);}
实验1-4
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#defineOVERLOW-2
#defineTRUE1
#defineFALSE0
#defineOK1
#defineERROR0
#defineINFEASTBLE-1
typedefintStatus;
typedefintBoolean;
bo1-1.h
typedefElemType*Triplet;
StatusInitTriplet(Triplet&T,ElemTypev1,ElemTypev2,ElemTypev3)
{T=(ElemType*)malloc(3*sizeof(ElemType));
if(!
T)exit(OVERLOW);
T[0]=v1;T[1]=v2;T[2]=v3;
returnOK;}
StatusDestroyTriplet(Triplet&T)
{free(T);T=NULL;
returnOK;}
StatusGet(TripletT,inti,ElemType&e)
{if(i<1||i>3)returnERROR;
e=T[i-1];
returnOK;}
StatusPut(Triplet&T,inti,ElemType&e)
{if(i<1||i>3)returnERROR;
T[i-1]=e;
returnOK;}
StatusIsAscending(TripletT)
{return(T[0]<=T[1])&&(T[1]<=T[2]);}
StatusIsDescending(TripletT)
{return(T[0]>=T[1])&&(T[1]>=T[2]);}
StatusMax(TripletT,ElemType&e)
{e=(T[0]>=T[1])?
((T[0]>=T[2])?
T[0]:
T[2]):
((T[1]>=T[2])?
T[1]:
T[2]);
returnOK;}
StatusMin(TripletT,ElemType&e)
{e=(T[0]<=T[1])?
((T[0]<=T[2])?
T[0]:
T[2]):
((T[1]<=T[2])?
T[1]:
T[2]);
returnOK;}
Main1.cpp
typedefintElemType;
#include"c1.h"
#include"c1_1.h"
voidmain()
{TripletT;
ElemTypem;
inti;
i=InitTriplet(T,1,3,5);
printf("调用初始化函数后,i=%d(1:
成功;否则:
不成功)",i);
printf("\n三元组中三个元素的值分别为:
\n");
printf("T[0]=%d,T[1]=%d,T[2]=%d",T[0],T[1],T[2]);
i=Get(T,2,m);
if(i==1)
printf("\n改变后T的第2个值为:
%d",m);
i=Put(T,2,m);
if(i==1)printf("\n改变后T的3个值分别为:
%d,%d,%d",T[0],T[1],T[2]);
Max(T,m);
printf("\nT中的最大值为:
%d",m);
Min(T,m);
printf("\nT中最小值为:
%d",m);
DestroyTriplet(T);
printf("\nT,T=%d\n",T);}
实验2-1
C1
//typedefintElemType;
//typedefintStatus;
//#defineMAXSIZE100
typedefstruct
{
ElemTypeelem[MAXSIZE];
intlength;
}Sqlist;
voidInitList(Sqlist&L)
{
L.length=0;
}
voidDestoryLst(Sqlist&L)
{
L.length=0;
}
StatusClearList(Sqlist&L)
{
L.length=0;
return1;
}
StatusListEmpty(SqlistL)
{
returnL.length==0;
}
StatusListLength(SqlistL)
{
returnL.length;
}
StatusGetElem(SqlistL,inti,ElemType&e)
{
if(i<1||i>L.length)
{
printf("i值越界!
");
return0;
}
e=L.elem[i-1];
return1;
}
StatusLocateElem(SqlistL,ElemTypee)
{
inti=0;
while(L.elem[i]!
=e)i++;
if(i<=L.length)returni;
elsereturn0;
}
StatusPriorElem(SqlistL,ElemTypecur_e,ElemType&pre_e)
{
inti;
i=LocateElem(L,cur_e);
if(i)
{
if(i==1)
{
printf("这是第一个元素,没有前驱!
\n");
return0;
}
else
{
pre_e=L.elem[i-1];
return1;
}
}
else
{
printf("L中不存在此元素!
\n");
return0;
}
}
StatusNextElem(SqlistL,ElemTypecur_e,ElemType&next_e)
{
inti;
i=LocateElem(L,cur_e);
if(i)
{
if(i==L.length-1)
{
printf("这是最后一个,没有后继!
\n");
return0;
}
else
{
next_e=L.elem[i+1];
return1;
}
}
else
{
printf("L中不存在此元素!
\n");
return0;
}
}
StatusListInsert(Sqlist&L,inti,ElemTypee)
{
intj;
if(i<1||i>L.length+1)
{
printf("插入位置越界!
\n");
return0;
}
if(L.length>=MAXSIZE)
{
printf("顺序表溢出!
");
return0;
}
for(j=L.length-1;j>=i-1;--j)
L.elem[j+1]=L.elem[j];
L.elem[i-1]=e;
++L.length;
return1;
}
StatusListDelete(Sqlist&L,inti,ElemType&e)
{
intj;
if(i<1||i>L.length)
{
printf("i值越界!
\n");
return0;
}
if(ListEmpty(L))
{
printf("L为空表,不能执行此项操作!
\n");
return0;
}
e=L.elem[i-1];
for(j=i-1;j<=L.length-1;j++)L.elem[j]=L.elem[j+1];
L.length--;
return1;
}
voidListTraverse(SqlistL)
{
inti;
for(i=0;i printf("%d",L.elem[i]); } Main2-1 #include #include #defineMAXSIZE100 typedefintElemType; typedefintStatus; #include"c2_1.h" //#include"bo2_1.cpp" voidmain() { SqlistL; inti,s,e; InitList(L); if(ListEmpty(L)) printf("顺序表是一个空表! "); elseprintf("顺序表不是一个空表! "); printf("\n建立一个顺序表,数据元素的值依次为1~10: "); for(i=0;i<10;i++) { scanf("%d",&L.elem[i]); L.length++; } //for(i=1;i<=10;i++) ListInsert(L,2,6); ListTraverse(L); printf("\n删除指定的元素,输入序号: "); scanf("%d",&i); ListDelete(L,i,e); printf("\n删除的第%d个元素的值为%d\n",i,e); printf("\n删除后的顺序表中元素值为: \n"); ListTraverse(L); printf("\n查找前驱操作: \n"); printf("\n输入元素: "); scanf("%d",&s); if(! PriorElem(L,s,e))printf("\n元素%d没有前驱! \n",s); elseprintf("\n元素%d的前驱为\n: %d",s,e); printf("\n查找后继元素操作: \n"); printf("\n输入元素: "); scanf("%d",&s); if(! NextElem(L,s,e))printf("\n元素%d没有后继! \n",s); elseprintf("\n元素%d的后继为: %d\n",e,s); } 实验2-2 c1 #include #include #include #include #include #include #include #include #include #include #include //#defineOVERFLOW-2 #defineTRUE1 #defineFALSE0 #defineOK1 #defineERROR0 #defineINFEASTBLE-1 typedefintStatus; typedefintBoolean; C2-2 structLNode { ElemTypedata; LNode*next; }; typedefLNode*LinkList; Bo2-2 StatusInitList(LinkList&L) { L=(LinkList)malloc(sizeof(LNode)); if(! L) exit(OVERFLOW); L->next=NULL; returnOK; } StatusDestroyList(LinkList&L) { LinkListq; while(L) { q=L->next; free(L); L=q; } returnOK; } StatusClearList(LinkListL) { LinkListp,q; p=L->next; while(p) { q=p->next; free(p); p=q; } L->next=NULL; returnOK; } StatusListEmpty(LinkListL) { if(L->next) returnFALSE; else returnTRUE; } intListLength(LinkListL) { inti=0; LinkListp=L->next; while(p) { i++; p=p->next; } returni; } StatusGetElem(LinkListL,inti,ElemType&e) { intj=1; LinkListp=L->next; while(p&&j { p=p->next; j++; } if(! p||j>i) returnERROR; e=p->data; returnOK; } intLocateElem(LinkListL,ElemTypee,Status(*compare)(ElemType,ElemType)) { inti=0; LinkListp=L->next; while(p) { i++; if(compare(p->data,e)) returni; p=p->next; } return0; } StatusPriorElem(LinkListL,ElemTypecur_e,ElemType&pre_e) { LinkListq,p=L->next; while(p->next) { q=p->next; if(q->data==cur_e) { pre_e=p->data; returnOK; } p=q; } returnERROR; } StatusNextElem(LinkListL,ElemTypecur_e,ElemType&next_e) { LinkListp=L->next; while(p->next) { if(p->data==cur_e) { next_e=p->next->data; returnOK; } p=p->next; } returnERROR; } StatusListInsert(LinkListL,inti,ElemTypee) { intj=0; LinkListp=L,s; 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; } StatusListDelete(LinkListL,inti,ElemType&e) { intj=0; LinkListp=L,q; while(p->next&&j { p=p->next; j++; } if(! p->next||j>i-1) returnERROR; q=p->next; p->next=q->next; e=q->data; free(q); returnOK; } StatusListTraverse(LinkListL,void(*vi)(ElemType)) { LinkListp=L->next; while(p) { vi(p->data); p=p->next; } printf("\n"); returnOK; } 实验3-1 #include #include #include #include #include #include #include #include #include #include #include //#defineOVERFLOW-2 #defineTRUE1 #defineFALSE0 #defineOK1 #defineERROR0 #defineINFEASTBLE-1 typedefintStatus; typedefintBoolean; C3_1 #defineSTACK_INIT_SIZE10 #defineSTACKINCREMENT2 structSqStack { SElemType*base; SElemType*top; intstacksize; }; Bo3_1 StatusInitStack(SqStack&S) { if(! (S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType)))) exit(OVERFLOW); S.top=S.base; S.stacksize=STACK_INIT_SIZE; returnOK; } StatusDestroyStack(SqStack&S) { free(S.base); S.base=NULL; S.top=NULL; S.stacksize=0; returnOK; } StatusClearStack(SqStack&S) { S.top=S.base; returnOK; } StatusStackEmpty(SqStackS) { if(S.top==S.base) returnTRUE; else returnFALSE; } intStackLength(SqStackS) { returnS.top-S.base; } StatusGetTop(SqStackS,SElemType&e) { if(S.top>S.base) { e=*(S.top-1); returnOK; } else returnERROR; } StatusPush(SqStack&S,SElemTypee) { if(S.top-S.base>=S.stacksize) { S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType)); if(! S.base) exit(OVERFLOW); S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; } *(S.top)++=e; returnOK; } StatusPop(SqStack&S,SElemType&e) { if(S.top==S.base) returnERROR; e=*--S.top; returnOK; } StatusStackTraverse(SqStackS,Status(*visit)(SElemType)) { while(S.top>S.base) visit
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 附录