您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 顺序存储结构线性表基本操作-纯C语言实现
/////////////////////////////////////////////////////////////---------------------------------------------------------//顺序存储结构线性表基本操作纯C语言实现////asimpleexampleofSq_ListbyClanguage////bywangweinoo1[PG]//---------------------------------------------------------///////////////////////////////////////////////////////////#includestdio.h#includestdlib.h//以下为函数运行结果状态代码#defineTRUE1#defineFALSE0#defineOK1#defineERROR0#defineINFEASIBLE-1#defineOVERFLOW-2#defineLIST_INIT_SIZE5//线性表存储空间的初始分配量#defineLISTINCREMENT1//线性表存储空间分配增量typedefintStatus;//函数类型,其值为为函数结果状态代码typedefintElemType;//假设数据元素为整型typedefstruct{ElemType*elem;//存储空间基址intlength;//当前长度intlistsize;//当前分配的存储容量}Sqlist;//实现线性表的顺序存储结构的类型定义staticSqlistL;//为了引用方便,定义为全局变量staticElemTypeelement;/////////////////////////////////////////函数名:InitList()//参数:SqListL//初始条件:无//功能:构造一个空线性表//返回值:存储分配失败:OVERFLOW//存储分配成功:OK///////////////////////////////////////StatusInitList(SqlistL){L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));if(L.elem==NULL)exit(OVERFLOW);else{L.length=0;L.listsize=LISTINCREMENT;returnOK;}}/////////////////////////////////////////函数名:DestroyList()//参数:SqListL//初始条件:线性表L已存在//功能:销毁线性表//返回值:L.elem==NULL:ERROR//L.elem!=NULL:OK///////////////////////////////////////StatusDestroyList(SqlistL){if(L.elem==NULL)returnERROR;elsefree(L.elem);returnOK;}/////////////////////////////////////////函数名:ClearList()//参数:SqListL//初始条件:线性表L已存在//功能:清空线性表//返回值:L.elem==NULL:ERROR//L.elem!=NULL:OK///////////////////////////////////////StatusClearList(SqlistL){if(L.elem==NULL)exit(ERROR);inti;ElemType*p_elem=L.elem;for(i=0;iL.length;i++){*L.elem=NULL;L.elem++;}L.elem=p_elem;returnOK;}/////////////////////////////////////////函数名:ListEmpty()//参数:SqListL//初始条件:线性表L已存在//功能:判断线性表是否为空//返回值:空:TRUE//非空:FALSE///////////////////////////////////////StatusListEmpty(SqlistL){inti;ElemType*p_elem=L.elem;for(i=0;iL.length;i++){if(*L.elem!=0){L.elem=p_elem;returnFALSE;}L.elem++;}returnTRUE;}/////////////////////////////////////////函数名:ListLength()//参数:SqListL//初始条件:线性表L已存在//功能:返回线性表长度//返回值:线性表长度(L.length)///////////////////////////////////////intListLength(SqlistL){returnL.length;}/////////////////////////////////////////函数名:GetElem()//参数:SqListL,inti,ElemType*element//初始条件:线性表L已存在,1=i=ListLength(L)//功能:用e返回线性表中第i个元素的值//返回值:(i1)||(iListLength(L)):OVERFLOW//1=i=ListLength(L):OK///////////////////////////////////////StatusGetElem(SqlistL,inti){intj;ElemType*p_elem=L.elem;if(i1||iL.length)returnOVERFLOW;for(j=1;j=i;j++)L.elem++;element=*L.elem;L.elem=p_elem;returnOK;}/////////////////////////////////////////函数名:LocateElem()//参数:SqlistL,ElemTypeelement//初始条件:线性表L已存在//功能:返回顺序表L中第1个与element相等的元素//返回值:若在L中存在于element相等的元素:其位序//若在L中不存在与element相等的元素:0///////////////////////////////////////intLocationElem(SqlistL,ElemTypeelement){inti;ElemType*p_elem=L.elem;for(i=1;iL.length;i++){if(*L.elem==element){L.elem=p_elem;returni;}elseL.elem++;}return0;}/////////////////////////////////////////函数名:PriorElem()//参数:SqlistL,ElemTypecur_e,ElemType*pre_e//初始条件:线性表L已存在,i1&&i=L.length,LocationElem()存在//功能:用pre_e返回线性表中cur_e的前驱//返回值:i=1||iL.length:OVERFLOW//i1&&i=L.length:OK///////////////////////////////////////StatusPriorElem(SqlistL,ElemTypecur_e,ElemType*pre_e){ElemType*p_elem=L.elem;inti,j;i=LocationElem(L,cur_e);if(i=1||iL.length)exit(OVERFLOW);for(j=1;ji;j++){if(j==(i-1)){pre_e=L.elem;L.elem=p_elem;returnOK;}elseL.elem++;}}/////////////////////////////////////////函数名:NextElem()//参数:SqlistL,ElemTypecur_e,ElemType*next_e//初始条件:线性表L已存在,i=1&&iL.length,LocationElem()存在//功能:用next_e返回线性表中cur_e的后继//返回值:i1||i=L.length:OVERFLOW//i=1&&iL.length:OK///////////////////////////////////////StatusNextElem(SqlistL,ElemTypecur_e,ElemType*next_e){ElemType*p_elem;inti,j;i=LocationElem(L,cur_e);if(i1||i=L.length)exit(OVERFLOW);for(j=1;ji;j++){if(j==(i-1)){next_e=L.elem;L.elem=p_elem;returnOK;}elseL.elem++;}}/////////////////////////////////////////函数名:ListInsert()//参数:SqListL,inti,ElemTypee//初始条件:线性表L已存在,1=i=ListLength(L)+1//功能:在线性表中第i个数据元素之前插入数据元素e//返回值:失败:ERROR//成功:OK///////////////////////////////////////StatusListInsert(SqlistL,inti,ElemTypee){int*q=&(L.elem[i-1]);ElemType*newbase,*p;if(i1||i(L.length+1))returnERROR;if(L.length=L.listsize){newbase=(ElemType*)realloc(L.elem,L.listsize+LISTINCREMENT*sizeof(ElemType));if(newbase==NULL)exit(OVERFLOW);L.elem=newbase;L.listsize+=LISTINCREMENT;}for(p=&(L.elem[L.length-1]);p=q;--p)*(p+1)=*p;*q=e;++L.length;returnOK;}/////////////////////////////////////////函数名:ListDelete()//参数:SqListL,inti,Elemtypee//初始条件:线性表L已存在,1=i=ListLength(L)//功能:将线性表L中第i个数据元素删除//返回值:失败:ERROR//成功:OK///////////////////////////////////////StatusListDelet(SqlistL,inti,ElemTypee){if(i1||(iL.length))returnERROR;ElemType*p,*q;p=&(L.elem[i-1]);e=*p;q=L.elem+L.length-1;for(++p;p=q;++p)*(p-1)=*p;--L.length;returnOK;}
本文标题:顺序存储结构线性表基本操作-纯C语言实现
链接地址:https://www.777doc.com/doc-4879670 .html