}
}
template
StatusDestroyTriplet(T1*A)
{
delete(A);
A=NULL;
returnOK;
}
三元组.cpp:
int_tmain(intargc,_TCHAR*argv[])
{
IntTripletA;
ElemType1a1,a2,a3;
intflag=0;
cout<<"qingshurusangezhengshu"<cin>>a1>>a2>>a3;
flag=InitTrip(A,a1,a2,a3);
if(!
flag){
cout<<"gouzaosanyuanzushibai"<}
intIzuida;
Izuida=MAX(A);
cout<<"整型最大数是"<cout<<"zhengxing降序是"<IsDescending(A,a1,a2,a3);
if(DestroyTriplet(A))
cout<<"销毁成功"<else
cout<<"销毁失败"<FloatTripletB;
ElemType2b1,b2,b3;
cout<<"qingshurusangefudianshu"<cin>>b1>>b2>>b3;
flag=InitTrip(B,b1,b2,b3);
if(!
flag){
cout<<"gouzaosanyuanfudianzushibai"<}
floatFzuida;
Fzuida=MAX(B);
cout<<"浮点型最大数是"<cout<<"fudian降序是"<IsDescending(B,b1,b2,b3);
if(DestroyTriplet(B))
cout<<"销毁成功"<else
cout<<"销毁失败"<_getche();
return0;
}
实践结果:
算法效率分析:
体会:
实践三单链表
实践目的:
掌握单链表的物理结构描述和基本操作的实现和典型应用。
实践要求:
要求程序代码具有较好的完整性和可共享性,界面友好,并能输出每次操作的结果。
抽象数据类型线性表的定义:
ADTList{
数据对象:
D={ai|ai∈ElemSet,i=1,2,······,n,n>=0}
数据关系:
R1={|ai-1,ai∈D,i=2,·····,n}
基本操作:
CreateList(&L,n)
操作结果:
逆序输入n个元素值,建立带表头结点的单链表L。
ListLength(L)
初始条件:
线性表L已存在。
操作结果:
返回L中数据元素个数。
ListInsert(&L,i,&e)
初始条件:
线性表L已存在,1≤i≤ListLength(L)+1。
操作结果:
在L中第i个位置之前插入新的数据元素e,L的长度加1。
ListDelete(&L,i,&e)
初始条件:
线性L已存在且非空,1≤i≤ListLength(L)。
操作结果:
删除L的第i个数据元素,并用e返回其值,L的长度减1。
}ADTList
数据物理结构描述:
typedefintElemType;
typedefintStatus;
typedefstructLNode{
ElemTypedata;
structLNode*next;
}LNode,*LinkList;
基本操作实现:
单链表.h
StatusCreateList(T1&L,T2n){
L=newLNode;
L->next=NULL;
T2i;
T3*p;
for(i=0;ip=newLNode;
cin>>p->data;
p->next=L->next;
L->next=p;
}
return1;
}
template
StatusListInsert(T1&L,T2i,T2e){
T3*p;
T2j;
p=L;
j=0;
while(p&&j
p=p->next;
j++;
}
if(!
p||j>i){
return0;
}
T3*s;
s=newLNode;
s->data=e;
s->next=p->next;
p->next=s;
return1;
}
template
StatusListDelete(T1&L,T2i,T2&e){
T3*p;
T2j;
p=L;
j=0;
while(p->next&&jp=p->next;
j++;
}
if(!
p->next||j>i-1){
return0;
}
T3*q;
q=p->next;
p->next=q->next;
e=q->data;
deleteq;
return1;
}
Statuscompare(ElemTypei,ElemTypej){
if(i==j){
return1;
}
else
return0;
}
template
T3*ListLocate(T1L,T2e,T2n,Status(*compare)(T2,T2)){
T3*p;
p=L->next;
for(inti=0;iif(compare(e,p->data)){
returnp;
}
p=p->next;
}
return0;
}
template
StatusMergeList(T1La,T1Lb,T2m,T2n){
T3*pa;
T3*pb;
//pa=La->next;
pb=Lb->next;
for(inti=1;i<=n;i++){
pa=La->next;
ElemTypecount=m;
for(intj=0;jif(pa->data==pb->data){
count--;
}
pa=pa->next;
}
if(count==m){
ListInsert(La,i,pb->data);
}
pb=pb->next;
}
deleteLb;
Lb=NULL;
return1;
}
实践结果:
算法效率分析:
体会:
实践六串
实践目的:
掌握串、子串的基本操作。
实践要求:
已知主串S=‘abc12abcd123efdk1123’,子串T=‘12’。
利用串的定长顺序存储,删除S中所有与T相同的子串,并输出删除后的串。
串的抽象数据类型的定义:
ADTString{
数据对象:
D={D={ai|ai∈CharacterSet,i=1,2,······,n,n>=0}
数据关系:
R1={|ai-1,ai∈D,i=2,·····,n}
基本操作:
InitStr(S,r)
初始条件:
串S,字符串r存在。
操作结果:
初始化S,将字符串r赋给S。
DeleteStr(S,T,r)
初始条件:
串S,T和字符串r存在。
操作结果:
删除S中与T相同的串部分。
}ADTString
数据物理结构描述:
typedefintStatus;
#defineMAXSIZE100
typedefcharSString[MAXSIZE+1];
基本操作实现:
串.h
StatusInitStr(SString&S,char*r){
inti=0;
while(*(r+i)!
='\0'){
i++;
}
S[0]=i;
for(intp=1;p<=S[0];p++){
S[p]=r[p-1];
}
return1;
}
StatusDeleteStr(SString&S,SStringT,char*r){
inti=0;
while(*(r+i)!
='\0'){
i++;
}
S[0]=i;
for(intj=1;j<=S[0];j++){
if(S[j]==T[1]&&S[j+1]==T[2]){
char*pos;
pos=&S[j];
for(;pos<=&S[S[0]-2];pos++){
*pos=*(pos+2);
}
inta=0;
while(*(r+a)!
='\0'){
a++;
}
S[0]=a;
i=i-2;
}
}
S[0]=i;
for(intk=1;k<=S[0];k++){
cout<
}
return1;
}
串.cpp
#include"stdafx.h"
#include"conio.h"
#include"串.h"
int_tmain(intargc,_TCHAR*argv[])
{
SStringS;
SStringT;
char*r;
char*s;
r="abc12abcd123efdk1123";
s="12";
InitStr(S,r);
InitStr(T,s);
DeleteStr(S,T,r);
_getche();
return0;
}
实践结果:
算法效率分析:
体会: