欢迎来到天天文库
浏览记录
ID:35451588
大小:57.87 KB
页数:8页
时间:2019-03-24
《线性表、堆栈、链表c语言程序》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、#include#include#defineTRUE1#defineFALSE0#defineOK1#defineERROR0#defineINFEASIBLE-1#defineOVERFLOW-2#defineL1ST_1NIT_S1ZE100#defineLISTINCREMENT10typedefintElemType;typedefiniStatus;typedefstruct{ElemType*elem;intlength;//当前线性表长度intlistsize;//线性表的
2、最大长度}SqList;〃初始化线性表,引用就是别名,用&表示,来自于C++StatuslnitList_Sq(SqList&L){〃分配了一个空线性表的总的空间,返回值为1表示分配成功,否则失败返回0L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));//ElemTypeelem[100];if(!L.elem){exit(OVERFLOW);}〃空线性表L.length=0;〃线性表容量L.listsize=LIST_INIT_SIZE;returnOK;}/
3、/在顺序线性表L的第i个元素之前插入新的元素e,StatusListlnsert_Sq(SqList&L,inti,ElemTypee){//算法2.4〃i的合法值为lWiWListLength_Sq(L)+lElemType*p;if(i<1
4、
5、i>L.length+1){returnERROR;〃i值不合法}if(L.length>=L.listsize){//当前存储空间已满,增加容量ElemType*newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)
6、*sizeof(ElemType));if(Inewbase){returnERROR;//存储分配失败}L.elem=newbase;//新基址L.listsize+二LISTINCREMENT;//增加存储容量}ElemType*q=&(L.elem[i-1]);//q为插入位置for(p=&(L.elem[L」ength・l]);p>=q;-p){*(p+l)=*p;//插入位置及之后的元素右移}*q=e;//插入e++L.length;//表长增1returnOK;)//ListInsert_Sq//在顺序线性表L中删
7、除第i个元素,并用e返回其值。StatusListDelete_Sq(SqList&L,inti,ElemType&e){//算法2.5〃i的合法值为1WiWListLength_Sq(L)。ElemType*p,*q;if(i8、9、i>L.length){returnERROR;〃i值不合法)p=&(L.elem[i-1]);〃p为被删除元素的位置e=*p;//被删除元素的值赋给eq=L.elem+L.length-1;//表尾元素的位置for(++p;p<=q;++p)*(p-l)=*p;//被删除元素之后的元素左移-L10、.length;//表长减1returnOK;}//ListDelete_Sq//已知顺序线性表La和Lb的元素按值非递减排列。voidMergeList_Sq(SqListLa,SqListLb,SqList&Lc){//算法2.7//归并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=(11、ElemType*)malloc(Lc」istsize*sizeof(ElemType));if(ILc.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<=pajast){*pc++=*pa++;//插入La的剩余元素}whil12、e(pb<=pb」ast){*pc++二*pb++;//插入Lb的剩余元素}}//MergeList〃线性表遍历voidTranverseList_Sq(SqList&L){for(intcounter=0;counter
8、
9、i>L.length){returnERROR;〃i值不合法)p=&(L.elem[i-1]);〃p为被删除元素的位置e=*p;//被删除元素的值赋给eq=L.elem+L.length-1;//表尾元素的位置for(++p;p<=q;++p)*(p-l)=*p;//被删除元素之后的元素左移-L
10、.length;//表长减1returnOK;}//ListDelete_Sq//已知顺序线性表La和Lb的元素按值非递减排列。voidMergeList_Sq(SqListLa,SqListLb,SqList&Lc){//算法2.7//归并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=(
11、ElemType*)malloc(Lc」istsize*sizeof(ElemType));if(ILc.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<=pajast){*pc++=*pa++;//插入La的剩余元素}whil
12、e(pb<=pb」ast){*pc++二*pb++;//插入Lb的剩余元素}}//MergeList〃线性表遍历voidTranverseList_Sq(SqList&L){for(intcounter=0;counter
此文档下载收益归作者所有