数据结构严蔚敏上机代码完整.docx

上传人:b****1 文档编号:850204 上传时间:2022-10-13 格式:DOCX 页数:20 大小:19.25KB
下载 相关 举报
数据结构严蔚敏上机代码完整.docx_第1页
第1页 / 共20页
数据结构严蔚敏上机代码完整.docx_第2页
第2页 / 共20页
数据结构严蔚敏上机代码完整.docx_第3页
第3页 / 共20页
数据结构严蔚敏上机代码完整.docx_第4页
第4页 / 共20页
数据结构严蔚敏上机代码完整.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

数据结构严蔚敏上机代码完整.docx

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

数据结构严蔚敏上机代码完整.docx

数据结构严蔚敏上机代码完整

数据结构(严蔚敏)上机代码完整版

 

 

————————————————————————————————作者:

————————————————————————————————日期:

 

数据结构

第一、二次上机:

#include

#include

#include

#defineTRUE1

#defineFALSE0

#defineOK1

#defineERROR0

#defineINFEASIBLE-1

#defineOVERFLOW-2

#definelist_init_size100//线性表存储空间的初始分配量

#defineLISTINCREMENT10//线性表存储空间的分配增量

typedefintStatus;

typedefintElemType;

typedefstruct{

ElemType*elem;//存储空间基址

intlength;//当前长度

intlistsize;//当前分配的存储容量(以sizeof(ElemType)为单位)

}SqList;

StatusInitList_Sq(SqList&L){

//构造一个空的线性表L

L.elem=(ElemType*)malloc(list_init_size*sizeof(ElemType));

if(!

L.elem)exit(OVERFLOW);//存储分配失败

L.length=0;//空表长度为0

L.listsize=list_init_size;//初始存储容量

returnOK;

}//Initlist_Sq

StatusListInsert_Sq(SqList&L,inti,ElemTypee){

//在顺序线性表L中第i个位置之前插入新的元素e,

//i的合法值为1<=i<=ListLength_Sq(L)+1

ElemType*p,*q,*newbase;//定义指针

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

returnERROR;//i值不合法

if(L.length>=L.listsize){//当前存储空间已满,增加分配

newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));

if(!

newbase)exit(OVERFLOW);//存储分配失败

L.elem=newbase;//新基址

L.listsize+=LISTINCREMENT;//增加存储容量

}

q=&(L.elem[i-1]);//q为插入位置

for(p=&(L.elem[L.length-1]);p>=q;--p)

*(p+1)=*p;//插入位置及之后的元素右移

*q=e;//插入e

++L.length;//表长增1

returnOK;

}//ListInsert_Sq

StatusListDelete_Sq(SqList&L,inti,ElemType&e){

//在顺序线性表L中删除第i个元素,并用e返回其值

//i的合法值为1<=i<=ListLength_Sq(L)

ElemType*p,*q;//定义指针

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

returnERROR;//i值不合法

p=&(L.elem[i-1]);//p为被删除元素的位置

e=*p;//被删除元素的值赋给e

q=L.elem+L.length-1;//表尾元素的位置

for(++p;p<=q;++p)

*(p-1)=*p;//被删除元素之后的元素左移

--L.length;//表长减1

returnOK;

}//ListDelete_sq

voiddisplay(SqListL)

{//定义for循环函数

inti;

for(i=0;i<=L.length-1;i++)

printf("%d\n",L.elem[i]);

}

 

intLocateElem_Sq(SqListL,ElemTypee)

{

//在顺序线性表L中查找第1个值与e满足compare()的元素的位序

//若找到,则返回其在L中的位序,否则返回0

ElemType*p;

inti=1;//i的初值为第一个元素的位序

p=L.elem;//p的初值为第一个元素的存储位置

while(i<=L.length&&*p++!

=e)++i;

if(i<=L.length)returni;

elsereturn0;

}//LocateElem_Sq

voidMergeList_Sq(SqListLa,SqListLb,SqList&Lc){

//已知顺序线性表La和Lb的元素按值非递减排列

//归并La和Lb得到新的顺序线性表Lc,Lc的元素也按非递减排列

ElemType*pa,*pb,*pc,*pa_last,*pb_last;

pa=La.elem;

pb=Lb.elem;

Lc.listsize=Lc.length=La.length+Lb.length;

pc=Lc.elem=(ElemType*)malloc(Lc.listsize*sizeof(ElemType));

if(!

Lc.elem)exit(OVERFLOW);//存储分配失败

pa_last=La.elem+La.length-1;

pb_last=Lb.elem+Lb.length-1;

while(pa<=pa_last&&pb<=pb_last)

{

//归并

if(*pa<=*pb)

*pc++=*pa++;

else

*pc++=*pb++;

}

while(pa<=pa_last)*pc++=*pa++;//插入La的剩余元素

while(pb<=pb_last)*pc++=*pb++;//插入Lb的剩余元素

}//MergeList_Sq

 

voidmain()

{

/*

SqListL;//定义线性表

InitList_Sq(L);//调用空表

//插入数据

ListInsert_Sq(L,1,10);

ListInsert_Sq(L,2,20);

ListInsert_Sq(L,1,30);

ListInsert_Sq(L,3,40);

printf("插入后:

\n");

display(L);//调用循环函数

ListInsert_Sq(L,3,100);//在L表第三个位置插入100

printf("插入后:

\n");

display(L);

ElemTypee;//定义e

ListDelete_Sq(L,3,e);//删除L表的第三个元素,用e表示

printf("删除后:

\n");

display(L);

printf("被删除元素:

%d\n\n\n\n",e);

*/

SqListLa,Lb,Lc;

InitList_Sq(La);

ListInsert_Sq(La,1,3);

ListInsert_Sq(La,2,5);

ListInsert_Sq(La,3,8);

ListInsert_Sq(La,4,11);

printf("La插入后:

\n");

display(La);

InitList_Sq(Lb);

ListInsert_Sq(Lb,1,2);

ListInsert_Sq(Lb,2,6);

ListInsert_Sq(Lb,3,8);

ListInsert_Sq(Lb,4,9);

ListInsert_Sq(Lb,5,11);

ListInsert_Sq(Lb,6,15);

ListInsert_Sq(Lb,7,20);

printf("Lb插入后:

\n");

display(Lb);

MergeList_Sq(La,Lb,Lc);

printf("归并后:

\n");

display(Lc);

 

printf("\n");

inta=LocateElem_Sq(Lc,5);

printf("%d\n",a);

}

 

第三次上机:

#include

#include

#defineTRUE1

#defineFALSE0

#defineOK1

#defineERROR0

#defineINFEASIBLE-1

#defineOVERFLOW-2

typedefintStatus;

typedefintElemType;

 

typedefstructLNode

{

ElemTypedata;

structLNode*next;

}LNOde,*LinkList;

 

StatusGetElem_L(LinkListL,inti,ElemType&e)

{

//L为带头结点的单链表的头指针

//当第i个元素存在时,其值赋给e并返回OK,否则返回ERROR

LinkListp;

p=L->next;

intj=1;//初始化,p指向第一个结点,j为计数器

while(p&&j

{

//顺指针向后查找,直到p指向第i个元素或p为空

p=p->next;

++j;

}

if(!

p||j>i)

returnERROR;//第i个元素不存在

e=p->data;//取第i个元素

returnOK;

}//GetElem_L

 

StatusListInsert_L(LinkList&L,inti,ElemTypee)

{

//在带头结点的单链线性表L中第i个位置之前插入元素e

LinkListp,s;

p=L;

intj=0;

while(p&&j

{

p=p->next;

++j;

}//寻找第i-1个结点

if(!

p||j>i-1)returnERROR;//i小于或者大于表长+1

s=(LinkList)malloc(sizeof(LNode));//生成新结点

s->data=e;

s->next=p->next;//插入L中

p->next=s;

returnOK;

}//ListInsert_L

 

StatusListDelete_L(LinkList&L,inti,ElemType&e)

{

//在带头结点的单链线性表L中,删除第i个元素,并由e返回其值

LinkListp,q;

p=L;

intj=0;

while(p->next&&j

{

//寻找第i个结点,并令p指向其前趋

p=p->next;++j;

}

if(!

(p->next)||j>i-1)returnERROR;//

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

当前位置:首页 > 幼儿教育 > 幼儿读物

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

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