线性表的基本操作文档格式.docx

上传人:b****6 文档编号:19043328 上传时间:2023-01-03 格式:DOCX 页数:18 大小:74.65KB
下载 相关 举报
线性表的基本操作文档格式.docx_第1页
第1页 / 共18页
线性表的基本操作文档格式.docx_第2页
第2页 / 共18页
线性表的基本操作文档格式.docx_第3页
第3页 / 共18页
线性表的基本操作文档格式.docx_第4页
第4页 / 共18页
线性表的基本操作文档格式.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

线性表的基本操作文档格式.docx

《线性表的基本操作文档格式.docx》由会员分享,可在线阅读,更多相关《线性表的基本操作文档格式.docx(18页珍藏版)》请在冰豆网上搜索。

线性表的基本操作文档格式.docx

CreateList_Sq(SqList*L)/*输入线性表中元素*/

DestroyList_Sq(SqList*L)/*销毁线性表*/

ClearList_Sq(SqList*L)/*清空线性表*/

ListEmpty_Sq(SqListL)/*判断是否为空*/

ListLength_Sq(SqListL)/*求线性表长度*/

GetElem_Sq(SqListL,inti,ElemType*e)/*取第i个元素并用e返回*/

LocateElem_Sq(SqListL,inte)/*判断e在表中位置*/

PriorElem_Sq(SqListL,inti,ElemTypecur_e,ElemType*pre_e)/*取前驱*/

NextElem_Sq(SqListL,inti,ElemTypecur_e,ElemType*next_e)/*取后继*/

ListInsert_Sq(SqList*L,inti,ElemTypee)/*在第i个元素前插入e*/

ListDelete_Sq(SqList*L,inti,ElemType*e)/*删除第i个元素*/

ListTraverse_Sq(SqListL,inti)/*遍历线性表*/

InitList_L(LinkList*L)/*创建线性表*/

CreateList_L(LinkList*L)/*输入线性表中元素*/

DestroyList_L(LinkList*L)/*销毁线性表*/

ClearList_L(LinkList*L)/*清空线性表*/

ListEmpty_L(LinkListL)/*判断是否为空*/

ListLength_L(LinkListL)/*求线性表长度*/

GetElem_L(LinkListL,inti,ElemType*e)/*取第i个元素并用e返回*/

LocateElem_L(LinkListL,inte)/*判断e在表中位置*/

PriorElem_L(LinkListL,inti,ElemTypecur_e,ElemType*pre_e)/*取前驱*/

NextElem_L(LinkListL,inti,ElemTypecur_e,ElemType*next_e)/*取后继*/

ListInsert_L(LinkList*L,inti,ElemTypee)/*在第i个元素前插入e*/

ListDelete_L(LinkList*L,inti,ElemType*e)/*删除第i个元素*/

ListTraverse_L(LinkListL,inti)/*遍历线性表*/

4.源代码

#include<

stdio.h>

stdlib.h>

typedefintElemType;

typedefintStatus;

#defineOK1

#defineERROR0

#defineTRUE1

#defineFALSE0

#defineOVERFLOW-2

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

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

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

StatusCreateList_Sq(SqList*L){

inti,n;

printf("

请输入线性表长度\nn="

);

scanf("

%d"

&

n);

(*L).length=n;

\n输入线性表L:

\n"

for(i=0;

i<

n;

i++)

scanf("

((*L).elem[i]));

//输入线性表元素

}

StatusDestroyList_Sq(SqList*L){

//销毁线性表L。

if((*L).elem)

free((*L).elem);

//释放线性表占据的所有存储空间

}//DestroyList_Sq

StatusClearList_Sq(SqList*L){

//将L重置为空表。

//将线性表的长度置为0

}//ClearList_Sq

StatusListEmpty_Sq(SqListL){

//线性表判空。

if(L.length==0)

returnTRUE;

//若L为空,则返回TURE

else

returnFALSE;

//若L不为空,则返回FALSE

}//ListEmpty_Sq

StatusListLength_Sq(SqListL){

//返回线性表的长度。

return(L.length);

}//ListLength_Sq

StatusGetElem_Sq(SqListL,inti,ElemType*e){

//用e返回L中的第i个数据元素的值。

if(i<

1||i>

L.length)returnERROR;

//i值不合法

*e=L.elem[i-1];

//将第i个数据元素的值赋给e

}//GetElem_Sq

StatusLocateElem_Sq(SqListL,inte){

inti;

for(i=1;

i<

=L.length;

i++)

{if(L.elem[i-1]==e)

returni;

}

}

StatusPriorElem_Sq(SqListL,inti,ElemTypecur_e,ElemType*pre_e){

i=LocateElem_Sq(L,cur_e);

if(i==1||i>

ListLength_Sq(L))return0;

*pre_e=L.elem[i-2];

//将cur_e的前驱赋值给pre_e

}//PriorElem_Sq

StatusNextElem_Sq(SqListL,inti,ElemTypecur_e,ElemType*next_e){

if(i==ListLength_Sq(L)||i>

ListLength_Sq(L))return0;

*next_e=L.elem[i];

//将cur_e的后继赋值给next_e

}//NextElem_Sq

StatusListInsert_Sq(SqList*L,inti,ElemTypee){

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

ElemType*newbase,*p,*q;

if(i<

(*L).length+1)returnERROR;

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

}//ListInsert_Sq

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

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

ElemType*p,*q;

(*L).length)returnERROR;

//i值不合法

p=&

((*L).elem[i-1]);

//p为被删除元素的位置

*e=*p;

//被删除元素的值赋给e

q=(*L).elem+(*L).length-1;

//表尾元素的位置

for(++p;

p<

++p)

*(p-1)=*p;

//被删除元素之后的元素左移

--(*L).length;

//表长减1

}//ListDelete_Sq

StatusListTraverse_Sq(SqListL,inti){

//线性表L的遍历

线性表为:

"

L.length;

printf("

%4d"

(L.elem[i]));

\n\n"

}//ListTraverse_Sq

voidmain(){

SqListL;

ElemTypee,cur_e,pre_e,next_e;

inti,n,select,t;

InitList_Sq(&

L);

CreateList_Sq(&

do{

1:

判断线性表是否为空\n"

2:

线性表的长度\n"

3:

查询线性表的第i个元素\n"

4:

查找值为e的元素的位置\n"

5:

求数据元素t的前驱\n"

6:

求数据元素t的后继\n"

7:

在线性表第i个位置前插入新元素e\n"

8:

删除线性表第i个元素,返回其值\n"

9:

遍历线性表\n"

10:

清空线性表\n"

0:

结束\n"

select);

switch(select){

case1:

if(ListEmpty_Sq(L))

printf("

线性表为空\n"

else

线性表非空\n"

break;

case2:

ListLength_Sq(L);

printf("

线性表的长度为%d\n"

(L.length));

case3:

\ni="

scanf("

i);

if(GetElem_Sq(L,i,&

e)==ERROR)

printf("

i值不合法\n"

else

第%d个元素的值为%d\n"

i,e);

case4:

printf("

\ne="

e);

i=LocateElem_Sq(L,e);

if(i<

=L.length)

线性表中没有值为%d的元素\n"

e);

case5:

\nt="

t);

if(PriorElem_Sq(L,i,t,&

e)==1)

元素%d的前驱为%d\n\n"

t,e);

元素%d无前驱\n"

t);

case6:

if(NextElem_Sq(L,i,t,&

元素%d的后继为%d\n\n"

元素%d无后继\n"

case7:

\nie="

i,&

if(ListInsert_Sq(&

L,i,e)==ERROR)

i值不合法\n\n"

else{

新的线性表为:

for(i=0;

}break;

case8:

if(ListDelete_Sq(&

L,i,&

被删除的第%d个元素的值为%d\n"

case9:

ListTraverse_Sq(L,i);

case10:

ClearList_Sq(&

清空线性表成功,线性表长度是%d\n\n"

L.length);

case0:

操作结束\n"

default:

输入选择出错!

}

}while(select!

=0);

DestroyList_Sq(&

typedefstructLNode{

ElemTypedate;

structLNode*next;

}LNode,*LinkList;

StatusInitList_L(LinkList*L){

(*L)=(LinkList)malloc(sizeof(LNode));

(*L)->

next=NULL;

StatusCreateList_L(LinkListL){

structLNode*p;

请输入线性表长度n="

\n输入数据:

for(i=n;

i>

0;

i--){

p=(LinkList)malloc(sizeof(LNode));

(*p));

p->

next=L->

next;

L->

next=p;

StatusDestroyList_L(LinkList*L){

if(L)

free(L);

StatusClearList_L(LinkListL){

L->

StatusListEmpty_L(LinkListL){

if(L->

next==NULL)

returnERROR;

StatusListLength_L(LinkListL){

intj;

p=L->

j=1;

while(p){

p=p->

++j;

j--;

returnj;

StatusGetElem_L(LinkListL,inti,ElemType*e){

while(p&

&

j<

i){

p||j>

i)returnERROR;

*e=p->

date;

StatusLocateElem_L(LinkListL,ElemTypee){

p->

date!

=e){

p)returnERROR;

StatusPriorElem_L(LinkListL,ElemTypecur_e,ElemType*pre_e){

inti,j;

i=LocateElem_L(L,cur_e);

i-1){

i-1)returnERROR;

*pre_e=p->

StatusNextElem_L(LinkListL,ElemTypecur_e,ElemType*next_e){

p=L;

j=0;

i+1){

i+1)returnERROR;

*next_e=p->

StatusListInsert_L(LinkListL,inti,ElemTypee){

structLNode*p,*s;

s=(LinkList)malloc(sizeof(LNode));

s->

date=e;

next=p->

next=s;

StatusListDelete_L(LinkListL,inti,ElemType*e){

ElemTypem;

structLNode*p,*q;

while(p->

next&

(p->

next)||j>

q=p->

next=q->

*e=q->

free(q);

StatusListTraverse_L(LinkListL,inti){

%d\n"

p->

date);

p=p->

LinkListL;

inti,j,n,select,t;

ElemTypee,m;

InitList_L(&

CreateList_L(L);

删除线性表第i

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

当前位置:首页 > 解决方案 > 工作计划

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

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