数据结构习题Word文档格式.docx
《数据结构习题Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构习题Word文档格式.docx(52页珍藏版)》请在冰豆网上搜索。
![数据结构习题Word文档格式.docx](https://file1.bdocx.com/fileroot1/2023-1/29/2ff43f6b-5153-49a0-9f4c-3374a8e0e6e9/2ff43f6b-5153-49a0-9f4c-3374a8e0e6e91.gif)
L,inte)
inti,k=0;
int*p,*q;
p=L.elem;
q=L.elem+L.length-1;
for(i=1;
i<
=L.length;
i++)
if(e<
=*p)
for(q++;
q>
p;
q--)
{
*q=*(q-1);
}
*p=e;
k=1;
break;
else
p++;
if(k==0)
*(q+1)=e;
L.length++;
voidmain()
voidListCreate(SqList&
L,inti);
intInitList_Sq(SqList&
L);
intSortInsert(SqList&
L,inte);
inti;
SqListLa;
InitList_Sq(La);
ListCreate(La,3);
inta;
printf("
需要插入的数字:
"
);
scanf("
a);
SortInsert(La,a);
插入后的元素列表变为:
\n"
for(i=0;
La.length;
%d"
La.elem[i]);
/*
voidSortDeleSame(SqList&
int*i;
int*p;
int*q;
while(p<
q)
if(*p==*(p+1))
for(i=p;
q;
*i=*(i+1);
}
L.length--;
q--;
p++;
voidSortDeleSame(SqList&
SqListLb;
InitList_Sq(Lb);
ListCreate(Lb,5);
SortDeleSame(Lb);
Lb.length;
Lb.elem[i]);
}*/
习题二
③、已知带头结点的动态单链表L中的结点是按整数值递增排列的,试写一算法将值x为的结点插入到表L中,使L仍然有序。
typedefstructLNode
intdata;
structLNode*next;
}LNode,*LinkList;
voidCreatList_LinkList(LinkList&
L,intn);
voidListInsert_LinkList(LinkList&
L,intx);
voidPrint_LinkList(LinkList&
LinkListLa;
inta,b;
请问要输入多少数:
"
请输入这%d个数:
a);
CreatList_LinkList(La,a);
请问要插入的数是:
b);
ListInsert_LinkList(La,b);
插入后结果为:
Print_LinkList(La,a+1);
voidCreatList_LinkList(LinkList&
L,intn)
inti,a;
LNode*s,*tail;
L=(LinkList)malloc(sizeof(LNode));
L->
next=NULL;
tail=L;
n;
s=(LinkList)malloc(sizeof(LNode));
s->
data);
tail->
next=s;
tail=tail->
next;
tail->
voidPrint_LinkList(LinkList&
LNode*p;
p=L->
for(inti=0;
p->
p=p->
voidListInsert_LinkList(LinkList&
L,intx)
intk=0;
LNode*pre,*p,*s;
pre=L;
while(pre&
&
p)
if(x<
=p->
data)
s->
next=pre->
pre->
s->
data=x;
pre=pre->
s=(LinkList)malloc(sizeof(LNode));
pre->
习题三
④、设计一算法,逆置带头结点的动态单链表L。
//La为已知单链表,Lb为新建的一个单链表
voidTrunhead_LinkList(LinkList&
La,LinkList&
Lb,intn)
LinkListp=La->
LinkLists;
Lb=(LinkList)malloc(sizeof(LNode));
Lb->
data=p->
data;
next=Lb->
一元多项式之和实验
#include<
malloc.h>
typedefstructpolynode
floatcoef;
//系数
intexpn;
//指数
structpolynode*next;
}polynode,*polylist;
voidcreate(polylist&
L)//创建链表
intm;
polylistp;
请输入一元多项式项数:
m);
L=(polylist)malloc(sizeof(polynode));
p=L;
for(inti=1;
=m;
i++)//利用循环,依次输入系数和指数
p->
next=(polylist)malloc(sizeof(polynode));
请输入第%d项的系数和指数:
i);
%f%d"
p->
coef,&
expn);
voiddisplay(polylistL)//显示链表内容
%.0fx(%d)"
coef,p->
while(p)
if(p->
coef<
0)
+%.0fx(%d)"
voidadd(polylistLa,polylistLb,polylist&
Lc)//加法函数
polylistpa,pb,pc;
floatx;
pa=La->
next;
pb=Lb->
pc=(polylist)malloc(sizeof(polynode));
Lc=pc;
while(pa&
pb)
{if(pa->
expn==pb->
expn)
{x=pa->
coef+pb->
coef;
if(x!
=0)
{
pc->
pc=pc->
coef=x;
expn=pa->
expn;
pa=pa->
pb=pb->
else//无同类项可合并,指数小者复制到C表
{pc->
pc=pc->
if(pa->
expn<
pb->
expn)//a的指数小于b的指数
coef=pa->
pc->
pa=pa->
else
{
coef=pb->
expn=pb->
pb=pb->
while(pa)//还剩下a多项式
{pc->
pc->
}
while(pb)//还剩下b多项式
pb=pb->
voidsubtract(polylistLa,polylistLb,polylist&
Lc)//减法函数
{polylistpa,pb,pc;
while(pa&
if(pa->
x=pa->
coef-pb->
{pc->
else//无同类项可合并,指数小者复制到C表
if(pa->
expn<
pb->
coef=-pb->
while(pb)//还剩下b多项式
voidmain()//主函数
polylistLa,Lb,Lc,Ld;
create(La);
create(Lb);
一元多项式1:
display(La);
一元多项式2:
display(Lb);
add(La,Lb,Lc);
加的结果:
display(Lc);
subtract(La,Lb,Ld);
减的结果"
display(Ld);
哈夫曼树实验
string.h>
charch;
intweight;
intparent,lchild,rchild;
}HTNode,*HuffmanTree;
typedefchar**HuffmanCode;
voidCreateHuffmanTree(HuffmanTree&
HT,intw[],charch[],intn);
voidSelect(HuffmanTreeHT,intn,int&
s1,int&
s2);
voidHTCoding(HuffmanTreeHT,HuffmanCode&
HC,intn);
voidPrintCode(HuffmanCodeHC,intn,charch[]);
doubleAverageLength(HuffmanTreeHT,HuffmanCodeHC,intn);
voidDeCode(HuffmanTreeHT,intn);
intn;
chararrch[20];
intarrweight[20];
doubleavlength;
HuffmanTreeHT;
HuffmanCodeHC;
请输入要输入字母的个数:
n);
while((ch=getchar())!
='
\n'
if(n>
20||n<
2)exit(0);
请输入第%d个字母:
i+1);
%c"
arrch[i]);
请输入该字母权重:
arrweight[i]);
CreateHuffmanTree(HT,arrweight,arrch,n);
HTCoding(HT,HC,n);
PrintCode(HC,n,arrch);
avlength=AverageLength(HT,HC,n);
平均编码长度为:
%.2f\n"
avlength);
请输入要解码的数据:
DeCode(HT,n);
free(HC[i]);
free(HC);
free(HT);
HT,intw[],charch[],intn)
inti,m,s1,s2;
m=2*n-1;
HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode));
=n;
HT[i].weight=w[i-1];
HT[i].parent=0;
HT[i].lchild=0;
HT[i].rchild=0;
HT[i].ch=ch[i-1];
for(i=n+1;
HT[i].weight=0;
HT[i].ch='
\0'
;
Select(HT,i-1,s1,s2);
HT[s1].parent=i;
HT[s2].parent=i;
HT[i].lchild=s1;
HT[i].rchild=s2;
HT[i].weight=HT[s1].weight+HT[s2].weight;
s2)
intmin;
min=1000;
if(HT[i].parent==0&
HT[i].weight<
=min)
min=HT[i].weight;
s1=i;
=min&
i!
=s1)
s2=i;
HC,intn)
inti,j,k,start;
intf;
intc;
char*cd;
HC=(HuffmanCode)malloc((n)*sizeof(char*));
cd=(char*)malloc(n*sizeof(char));
cd[n-1]='
++i)
start=n-1;
for(c=i,f=HT[i].parent;
f!
=0;
c=f,f=HT[f].parent)
if(HT[f].lchild==c)
{cd[--start]='
0'
else
1'
HC[i-1]=(char*)malloc((n-start)*sizeof(char));
for(j=start,k=0;
j++,k++)
HC[i-1][k]=cd[j];
free(cd);
voidPrintCode(HuffmanCodeHC,intn,charch[])
%c的编码是%s\n"
ch[i],HC[i]);
doubleAverageLength(HuffmanTreeHT,HuffmanCodeHC,intn)
inti,j;
ints1=0,s2=0;
s1=s1+HT[i].weight;
for(i=0,j=1;
i++,j++)
s2=s2+HT[j].weight*strlen(HC[i]);
returns2*1.0/s1;
voidDeCode(HuffmanTreeHT,intn)
charendflag='
#'
i=2*n-1;
ch);
while(ch!
=endflag)
if(ch=='
)
{i=HT[i].lchild;
else
{i=HT[i].rchild;
if(HT[i].lchild==0)
printf("
HT[i].ch);
i=2*n-1;
if((HT[i].lchild!
=0)&
(i!
=2*n-1))
{printf("
\n未能完全解码\n"
求最小生成树算法实验
#in