数据结构实验Word文件下载.docx
《数据结构实验Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构实验Word文件下载.docx(26页珍藏版)》请在冰豆网上搜索。
i--)
for(intj=0;
j<
i-1;
j++)
{
if(l->
base[j]>
l->
base[j+1])
{
temp=l->
base[j];
l->
base[j]=l->
base[j+1];
base[j+1]=temp;
}
}
voidinsertList(sqList*l,intelem)//insert
if(l->
length+1>
listSize)
l->
base=(int*)realloc(l->
base,sizeof(int)*(l->
listSize+20));
inti=1;
while(elem<
base[l->
length-i]&
&
length-i>
=0)
length-i+1]=l->
length-i];
i++;
l->
length-i+1]=elem;
length++;
voiddeleteList(sqList*l,intelm)//delete
inti=0;
for(;
length&
base[i]!
=elm;
i++);
if(i!
=l->
length)
for(;
length-1;
l->
base[i]=l->
base[i+1];
length]=0;
length--;
intfindElm(sqList*l,intelem)//find
if(l->
base[i]==elem)
returni;
return-1;
voidprintList(sqList*l)//print
cout<
base[i]<
"
sqList*unionLists(sqList*l1,sqList*l2)//并¡
é
集¡
¥
sqList*l=(sqList*)malloc(sizeof(sqList));
base=(int*)malloc(sizeof(int)*(l1->
listSize+l2->
listSize));
listSize=l1->
listSize;
intpa=0,pb=0,pc=0;
while(pa<
l1->
pb<
l2->
if(l1->
base[pa]<
base[pb]){
if(pc==0)
base[pc]=l1->
base[pa];
pc++;
}elseif(l->
base[pc-1]!
=l1->
base[pa]){
pa++;
}else{
base[pb];
=l2->
base[pc]=l2->
pb++;
base[pa])
pc++;
pa++;
while(pb<
base[pb])
pb++;
length=pc;
returnl;
sqList*publicElems(sqList*l1,sqList*l2)//交?
base[pa]==l2->
}elseif(l1->
链表操作
structnode{
intelem;
node*next;
};
classlinkList{
public:
node*head;
linkList()
head=(node*)malloc(sizeof(node));
head->
next=NULL;
linkList(intl)
length=l;
for(inti=0;
node*p=(node*)malloc(sizeof(node));
cin>
p->
elem;
p->
next=head->
next;
head->
next=p;
voidsort()//排?
序¨
°
node*p1,*p2,*p3;
for(inti=length;
p1=head;
p2=p1->
for(intj=0;
p3=p2->
if((p2->
elem)>
(p3->
elem))
{
p2->
next=p3->
p3->
next=p2;
p1->
next=p3;
}
p1=p1->
p2=p1->
voidprint()
node*p=head->
while(p!
=NULL)
cout<
elem<
p=p->
linkList*join(linkList*l)//不?
另¢
¨
ª
外ª
a开a辟À
´
新?
空?
间?
把ã
?
两¢
个?
链¢
¡
ä
表À
结¨
¢
合?
在¨
²
一°
起e
linkList*listC=newlinkList();
listC->
length=length+l->
node*p1=l->
head->
next,*p2=head->
next,*p3=listC->
head;
while(p1!
=NULL&
p2!
if(p1->
p2->
elem)
p3->
next=p1;
p3=p3->
else
p2=p2->
if(p1!
p3->
if(p2!
returnlistC;
linkList*unionList(linkList*l)//求¨
®
并¡
length=0;
if(listC->
length==0||(listC->
length!
=0&
p3->
elem!
=p1->
p3=p3->
listC->
=p2->
if(listC->
listC->
p1=p1->
while(p2!
p2=p2->
p3->
linkList*intersection(linkList*l)//求¨
交?
elem==p2->
}else
if(p1->
p1=p1->
else
p2=p2->
二叉树
string>
stack>
queue>
structbNode
chardata;
bNode*lChild,*rChild;
bNode*createBTree()
bNode*root;
charc;
c;
if(c=='
#'
)root=NULL;
else
root=(bNode*)malloc(sizeof(bNode));
root->
data=c;
lChild=createBTree();
rChild=createBTree();
returnroot;
voidpreOrderTraverse(bNode*root)
stack<
bNode*>
s;
s.push(root);
while(!
s.empty())
bNode*p;
while((p=s.top())!
s.push(p->
lChild);
data<
s.pop();
if(!
p=s.top();
s.pop();
rChild);
voidlastOrder(bNode*root)
if(root==NULL)return;
if(root->
lChild!
=NULL)lastOrder(root->
rChild!
root->
voidlayerTraverse(bNode*root)
queue<
q;
if(root!
=NULL)q.push(root);
bNode*elem;
q.empty())
elem=q.front();
elem->
q.pop();
if(elem->
=NULL)q.push(elem->
inttreeHeight(bNode*root)
intheight=0;
=NULL)
height=treeHeight(root->
lChild)+1;
inttemp=treeHeight(root->
rChild)+1;
if(temp>
height)
height=temp;
returnheight;
intcountLeaves(bNode*root)
intnum=0;
if(root==NULL)returnnum;
lChild==NULL&
rChild==NULL)
num+=1;
if(root->
num+=countLeaves(root->
returnnum;
哈弗曼树哈弗曼编码
vector>
structharffmanNode
intwegiht;
intparent,lchild,rchild;
typedefchar**HarffmanCode;
intselectLeasted(harffmanNode*ht,intlength)//minweight
intminIndex=-1;
for(inti=1;
=length;
if(ht[i].parent==0&
minIndex==-1)
minIndex=i;
else
if(ht[i].parent==0&
ht[i].wegiht<
ht[minIndex].wegiht)
minIndex=i;
ht[minIndex].parent=length+1;
returnminIndex;
int_tmain(intargc,_TCHAR*argv[])
inputweight(size):
vector<
int>
w(length);
w[i];
inttotalNodeNum=2*length-1;
harffmanNode*harfmanTree=(harffmanNode*)malloc(sizeof(harffmanNode)*(totalNodeNum+1));
harfmanTree[i].wegiht=w[i-1];
harfmanTree[i].parent=0;
harfmanTree[i].lchild=0;
harfmanTree[i].rchild=0;
for(intj=length+1;
=totalNodeNum;
harfmanTree[j].wegiht=0;
harfmanTree[j].parent=0;
harfmanTree[j].lchild=0;
harfmanTree[j].rchild=0;
for(intk=length+1;
k<
k++)//createtree
intleast1=selectLeasted(harfmanTree,k-1);
intleast2=selectLeasted(harfmanTree,k-1);
harfmanTree[k].lchild=least1;
harfmanTree[k].rchild=least2;
harfmanTree[k].wegiht=harfmanTree[least1].wegiht+harfmanTree[least2].wegiht;
HarffmanCodehfCode=(HarffmanCode)malloc(sizeof(char*)*(length+1));
char*code=(char*)malloc(sizeof(char)*length);
code[length-1]='
\0'
intpointer,k;
{
pointer=length-1;
k=i;
for(intj=harfmanTree[i].parent;
j!
=0;
j=harfmanTree[j].parent)
pointer--;
if(harfmanTree[j].lchild==k)
code[pointer]='
0'
1'
k=j;
hfCode[i]=(char*)malloc(sizeof(char)*(length-pointer));
strcpy(hfCode[i],&
code[pointer]);
hfCode[i]<
inta;
a;
return0;
邻接表
structarcNode
intadjvex;
arcNode*nextArc;
structvNode{
intdata;
arcNode*firstArc;
voidbfs(vNode*l