数据结构习题Word文档格式.docx

上传人:b****5 文档编号:21336536 上传时间:2023-01-29 格式:DOCX 页数:52 大小:27.78KB
下载 相关 举报
数据结构习题Word文档格式.docx_第1页
第1页 / 共52页
数据结构习题Word文档格式.docx_第2页
第2页 / 共52页
数据结构习题Word文档格式.docx_第3页
第3页 / 共52页
数据结构习题Word文档格式.docx_第4页
第4页 / 共52页
数据结构习题Word文档格式.docx_第5页
第5页 / 共52页
点击查看更多>>
下载资源
资源描述

数据结构习题Word文档格式.docx

《数据结构习题Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构习题Word文档格式.docx(52页珍藏版)》请在冰豆网上搜索。

数据结构习题Word文档格式.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1