严蔚敏版数据结构所有算法代码.docx

上传人:b****2 文档编号:2159752 上传时间:2022-10-27 格式:DOCX 页数:111 大小:48.16KB
下载 相关 举报
严蔚敏版数据结构所有算法代码.docx_第1页
第1页 / 共111页
严蔚敏版数据结构所有算法代码.docx_第2页
第2页 / 共111页
严蔚敏版数据结构所有算法代码.docx_第3页
第3页 / 共111页
严蔚敏版数据结构所有算法代码.docx_第4页
第4页 / 共111页
严蔚敏版数据结构所有算法代码.docx_第5页
第5页 / 共111页
点击查看更多>>
下载资源
资源描述

严蔚敏版数据结构所有算法代码.docx

《严蔚敏版数据结构所有算法代码.docx》由会员分享,可在线阅读,更多相关《严蔚敏版数据结构所有算法代码.docx(111页珍藏版)》请在冰豆网上搜索。

严蔚敏版数据结构所有算法代码.docx

严蔚敏版数据结构所有算法代码

严蔚敏版数据结构所有算法代码

------------------------线性数据结构-----------------------------

2013年9月

//线性表、链表

//栈、队列

//数组、广义表

//串

-------------------------线性表----------------------

typedefstruct

{

charname[20];//注意如果应用指针的形式

//在初始化每个结点时一定要先为结点中的每个变量开辟内存空间

charsex;

charaddr[100];

unsignedintage;

charphonenum[20];

}node;//结点描述

typedefstruct

{

node*p;

intlength;//当前顺序表长度

intlistsize;//当前分配的线性表长度

}list;//线性表描述

listL;//定义一个线性表

intinitlist(list&l)//构造一个空的线性表

{

l.p=(node*)malloc(LIST_INIT_SIZE*sizeof(node));

if(!

(l.p))

exit

(1);

l.length=0;

l.listsize=LIST_INIT_SIZE;

returntrue;

}

voiddestroylist(list&l)//销毁线性表操作

{

if(l.p!

=NULL)

{

free(l.p);

printf("销毁成功!

\n");

}

else

printf("线性表不存在!

\n");

}

intclearlist(list&l)//将线性表置空操作

{

if(l.p==NULL)

{

printf("线性表不存在!

\n");

returnfalse;

}

else

{

free(l.p);

l.p=(node*)malloc(l.listsize*sizeof(node));

l.length=0;

}

returntrue;

}

intlistempty(list&l)//判断线性表是否为空表

{

if(l.p==NULL)

returntrue;

else

returnfalse;

}

intgetelem(list&l,inti,node&e)//用e返回表中第i个数据元素

{

if(l.p==NULL)

returnfalse;

else

e=l.p[i-1];

returntrue;

}

intpriorelem(list&l,inti,node&pre_e)//得到第i个元素的前驱元素

{

if(i==0||l.p==NULL)

returnfalse;

else

pre_e=l.p[i-1];

returntrue;

}

intnextelem(list&l,inti,node&next_e)//得到表中第i个元素的后继元素

{

if(i>=l.length||l.p==NULL)

returnfalse;

else

next_e=l.p[i+1];

returntrue;

}

intinsertlist(list&l,inti,node&e)//将元素e插入到表l中第i个元素的后面

{

node*q,*k;

if(i<1||i>l.length+1)

returnfalse;

if(l.length>=l.listsize)

{

l.p=(node*)realloc(l.p,(l.listsize+LISTINCREMENT)*sizeof(node));

if(!

l.p)

exit

(1);

l.listsize+=LISTINCREMENT;

}

k=&l.p[i-1];

for(q=&l.p[l.length-1];q>k;q--)

*(q+1)=*q;

*k=e;

l.length++;

returntrue;

}

intdeletelist(list&l,inti,node&e)//删除表中第i个元素并用e返回其值

{

node*q;

intj=i-1;

if(i<1||i>l.length)

returnfalse;

e=l.p[i-1];

for(q=&l.p[i-1];j

*q=*(++q);

l.length--;

returntrue;

}

voidmergerlist(listla,listlb,list&lc)//归并两个按非递减排列的线性表

{

intla_len,lb_len,i=1,j=1,k=0;

nodeai,bj;

la_len=la.length;

lb_len=lb.length;

while(i<=la_len&&j<=lb_len)

{

getelem(la,i,ai);

getelem(lb,j,bj);

if(ai.a<=bj.a)

{

insertlist(lc,++k,ai);

i++;

}

else

{

insertlist(lc,++k,bj);

j++;

}

}

while(i<=la_len)

{

getelem(la,i,ai);

insertlist(lc,++k,ai);

i++;

}

while(j<=lb_len)

{

getelem(lb,j,bj);

insertlist(lc,++k,bj);

j++;

}

}

intListAscendingOrder(list&l)//按结点中某一元素的比较升序排列线性表中的结点

{

nodee;

inti,j;

if(l.p==NULL||l.length==1)

returnERROR;

for(i=0;i

for(j=i+1;j

if(l.p[i].num>=l.p[j].num)

{

e=l.p[i];

l.p[i]=l.p[j];

l.p[j]=e;

}

returnOK;

}//省略降序排列

voidMergerList(listla,listlb,list&lc)//将两线性表升序排列后再归并

{

node*q,*k,e1;

inti=0,j=0,m=0,n;

ListAscendingOrder(la);

ListAscendingOrder(lb);

printf("表a升序排列后为:

\n");

for(i=0;i

printf("%d",la.p[i].num);

printf("\n");

printf("表b升序排列后为:

\n");

for(i=0;i

printf("%d",lb.p[i].num);

printf("\n");

i=0;

while(i

{

if(la.p[i].num<=lb.p[j].num)

{

e1=la.p[i];

i++;

}

else

{

e1=lb.p[j];

j++;

}

if(e1.num!

=lc.p[lc.length-1].num)

InsertList(lc,++m,e1);

}

if(i

while(i

{

if(la.p[i].num!

=lc.p[lc.length-1].num)

InsertList(lc,++m,la.p[i]);

i++;

}

if(j

while(j

{

if(lb.p[j].num!

=lc.p[lc.length-1].num)

InsertList(lc,++m,lb.p[j]);

j++;

}

printf("按升序排列再归并两表为:

\n");

for(n=0;n

printf("%d",lc.p[n].num);

printf("\n");

}

----------------------链表-----------------------------

typedefstruct

{

intnum;

}node;

typedefstructLIST

{

nodedata;

structLIST*next;

}list,*slist;

intCreatList(slist&head)//此处应为只针对的引用

{

head=(list*)malloc(sizeof(list));

if(!

head)

returnERROR;

head->next=NULL;

returnOK;

}

voidInvertedList(slist&head1,slist&head2)

{//构造新表逆置单链表函数

list*p,*q;

p=head1->next;

q=p->next;

if(p==NULL)

printf("链表为空无法实现逆置操作\n");

else

{

while(q!

=NULL)

{

p->next=head2->next;

head2->next=p;

p=q;

q=q->next;

}

p->next=head2->next;

head2->next=p;

printf("逆置成功!

?

\n");

}

}

voidInsertList(slist&head,node&e)//此处应为指针的引用

{//而不应该是list*head

list*p,*q;

p=(list*)malloc(sizeof(list));

q=head;

while(q->next!

=NULL)

q=q->next;

p->next=q->next;

q->next=p;

p->data=e;

}

voidInvertedList(sqlist&head)

{//-------不构造新表逆置单链表函数---------//

list*p,*q,*k;

p=head->next;

q=p->next;

k=q->next;

p->next=NULL;

while(k!

=NULL)

{

q->next=p;

p=q;

q=k;

k=k->next;

}

q->next=p;

head->next=q;

}

//----交换链表中第i个和第j个结点,函数实现如下——//

i

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

当前位置:首页 > PPT模板 > 商务科技

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

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