1、线性表的基本操作数 据 结 构 实 验 报 告 2011年4月13日1.项目组成2.程序结构图main题目一:ClearList_SqListEmpty_SqCreateList_SqListInsert_SqGetElem_SqNextElem_SqPriorElem_SqListLength_SqDestroyList_SqLocateElem_SqListTraverse_SqListDelete_SqInitList_Sq题目二: mainListInsert_L CreateList_LClearList_LListEmpty_LInitList_LDestroyList_LList
2、Length_LNextElem_LLocateElem_LPriorElem_LGetElem_LListTraverse_LListDelete_L3.算法及其功能函数题目一:InitList_Sq(SqList *L) /*创建线性表*/CreateList_Sq(SqList *L) /*输入线性表中元素 */DestroyList_Sq(SqList *L) /*销毁线性表*/ClearList_Sq(SqList *L) /*清空线性表*/ListEmpty_Sq(SqList L) /*判断是否为空*/ListLength_Sq(SqList L) /*求线性表长度 */GetE
3、lem_Sq(SqList L, int i, ElemType *e) /*取第i个元素并用e返回*/LocateElem_Sq (SqList L, int e) /*判断e在表中位置*/PriorElem_Sq(SqList L,int i, ElemType cur_e, ElemType *pre_e) /*取前驱*/NextElem_Sq(SqList L,int i, ElemType cur_e, ElemType *next_e ) /*取后继*/ListInsert_Sq(SqList *L, int i, ElemType e) /*在第i个元素前插入e*/ListDel
4、ete_Sq(SqList *L, int i, ElemType *e) /*删除第i个元素 */ListTraverse_Sq(SqList L,int i) /*遍历线性表*/题目二:InitList_L(LinkList *L) /*创建线性表*/CreateList_L(LinkList *L) /*输入线性表中元素 */DestroyList_L(LinkList *L) /*销毁线性表*/ClearList_L(LinkList *L) /*清空线性表*/ListEmpty_L(LinkList L) /*判断是否为空*/ListLength_L(LinkList L) /*求线
5、性表长度 */GetElem_L(LinkList L, int i, ElemType *e) /*取第i个元素并用e返回*/LocateElem_L (LinkList L, int e) /*判断e在表中位置*/PriorElem_L(LinkList L,int i, ElemType cur_e, ElemType *pre_e) /*取前驱*/NextElem_L(LinkList L,int i, ElemType cur_e, ElemType *next_e ) /*取后继*/ListInsert_L(LinkList *L, int i, ElemType e) /*在第i
6、个元素前插入e*/ListDelete_L(LinkList *L, int i, ElemType *e) /*删除第i个元素 */ListTraverse_L(LinkList L,int i) /*遍历线性表*/4.源代码题目一:#include#includetypedef int ElemType;typedef int Status;#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define OVERFLOW -2#define LIST_INIT_SIZE 100 /线性表存储空间的初始分配量#define LI
7、STINCREMENT 10 /线性表空间的分配增量 typedef struct ElemType *elem; /存储空间基址 int length; /当前长度 int listsize; /当前分配的存储容量(以sizeof(ElemType)为单位)SqList;Status InitList_Sq(SqList *L) /构造一个空的线性表L。 (*L).elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType); if(!(*L).elem) exit(OVERFLOW); /存储空间失败 (*L).length=0; /空表长度
8、为0 (*L).listsize=LIST_INIT_SIZE; /初始存储容量 return OK; /InitList_SqStatus CreateList_Sq(SqList *L) int i,n; printf(请输入线性表长度nn=); scanf(%d,&n); (*L).length=n; printf(n输入线性表L:n); for(i=0;in;i+) scanf(%d,&(*L).elemi); /输入线性表元素 return OK;Status DestroyList_Sq(SqList *L) /销毁线性表L。 if(*L).elem) free(*L).elem)
9、; /释放线性表占据的所有存储空间 return OK; /DestroyList_SqStatus ClearList_Sq(SqList *L) /将L重置为空表。 (*L).length=0; /将线性表的长度置为0 return OK; /ClearList_SqStatus ListEmpty_Sq(SqList L) /线性表判空。 if(L.length=0) return TRUE; /若L为空,则返回TURE else return FALSE; /若L不为空,则返回FALSE /ListEmpty_SqStatus ListLength_Sq(SqList L) /返回线性
10、表的长度。 return(L.length); /ListLength_SqStatus GetElem_Sq(SqList L, int i, ElemType *e) /用e返回L中的第i个数据元素的值。 if(iL.length) return ERROR; / i值不合法 *e=L.elemi-1; /将第i个数据元素的值赋给e return OK; /GetElem_Sq Status LocateElem_Sq (SqList L, int e) int i; for(i=1; i ListLength_Sq(L) return 0; *pre_e=L.elemi-2 ; /将cu
11、r_e的前驱赋值给pre_e return OK; /PriorElem_SqStatus NextElem_Sq(SqList L,int i, ElemType cur_e, ElemType *next_e) i=LocateElem_Sq(L,cur_e); if(i=ListLength_Sq(L)|iListLength_Sq(L) return 0; *next_e= L.elemi; /将cur_e的后继赋值给next_e return OK; /NextElem_SqStatus ListInsert_Sq(SqList *L, int i, ElemType e) /在线性
12、表L中的第i个位置之前插入新的元素e。 ElemType *newbase,*p,*q; if (i(*L).length+1) return ERROR; / 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)
13、.elemi-1; / q为插入位置 for(p=&(*L).elem(*L).length-1);p=q;-p) *(p+1)=*p; /插入位置及之后的元素右移 *q=e; /插入e +(*L).length; /表长增1 return OK; /ListInsert_SqStatus ListDelete_Sq(SqList *L, int i, ElemType *e) /在线性表L中删除第i个元素,并用e返回其值 ElemType *p,*q; if (i(*L).length) return ERROR; / i值不合法 p=&(*L).elemi-1); / p为被删除元素的位置
14、 *e=*p; /被删除元素的值赋给e q=(*L).elem+(*L).length-1; /表尾元素的位置 for (+p;p=q;+p) *(p-1)=*p; /被删除元素之后的元素左移 -(*L).length; /表长减1 return OK; /ListDelete_SqStatus ListTraverse_Sq(SqList L,int i) /线性表L的遍历 printf(线性表为:); for(i=0;iL.length;i+) printf(%4d,(L.elemi); printf(nn); return OK; /ListTraverse_Sqvoid main()
15、SqList L; ElemType e,cur_e,pre_e,next_e; int i,n,select,t; InitList_Sq(&L); CreateList_Sq(&L); printf(n); do printf(1:判断线性表是否为空n); printf(2:线性表的长度n); printf(3:查询线性表的第i个元素n); printf(4:查找值为e的元素的位置n); printf(5:求数据元素t的前驱n); printf(6:求数据元素t的后继n); printf(7:在线性表第i个位置前插入新元素en); printf(8:删除线性表第i个元素,返回其值n); p
16、rintf(9:遍历线性表n); printf(10:清空线性表n); printf(0:结束n); scanf(%d,&select); switch(select) case 1: if(ListEmpty_Sq(L) printf(线性表为空n); else printf(线性表非空n);break; case 2:ListLength_Sq(L); printf(线性表的长度为 %dn,(L.length);break; case 3: printf(ni=); scanf(%d,&i); if(GetElem_Sq(L,i,&e)=ERROR) printf(i值不合法n); els
17、e printf(第%d个元素的值为%dn,i,e);break; case 4:printf(ne=); scanf(%d,&e); i=LocateElem_Sq (L,e); if(i=L.length) printf(第%d个元素的值为%dn,i,e); else printf(线性表中没有值为%d的元素n,e);break; case 5:printf(nt=); scanf(%d,&t); if(PriorElem_Sq(L,i,t,&e)=1) printf(元素%d的前驱为%dnn,t,e); else printf(元素%d无前驱n,t);break; case 6:prin
18、tf(nt=); scanf(%d,&t); if(NextElem_Sq(L,i,t,&e)=1) printf(元素%d的后继为%dnn,t,e); else printf(元素%d无后继n,t);break; case 7:printf(nie=); scanf(%d,&i,&e); printf(ne=); scanf(%d,&e); if(ListInsert_Sq(&L,i,e)=ERROR) printf(i值不合法nn); else printf(新的线性表为:); for(i=0;iL.length;i+) printf(%4d,(L.elemi); printf(nn);b
19、reak; case 8:printf(ni=); scanf(%d,&i); if(ListDelete_Sq(&L,i,&e)=ERROR) printf(i值不合法nn); else printf(被删除的第%d个元素的值为%dn,i,e); printf(新的线性表为:); for(i=0;iL.length;i+) printf(%4d,(L.elemi); printf(nn);break; case 9:ListTraverse_Sq(L,i);break; case 10:ClearList_Sq(&L); printf(清空线性表成功,线性表长度是%d nn,L.length
20、);break; case 0:printf(操作结束n);break; default:printf(输入选择出错!n); while(select!=0); DestroyList_Sq(&L);题目二:#include#includetypedef int ElemType;typedef int Status;#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define OVERFLOW -2typedef struct LNode ElemType date; struct LNode *next;LNode,*Lin
21、kList;Status InitList_L(LinkList *L) (*L)=(LinkList)malloc(sizeof(LNode); (*L)-next=NULL; return OK;Status CreateList_L(LinkList L) int i,n; struct LNode *p; printf(请输入线性表长度n=); scanf(%d,&n); printf(n输入数据:n); for(i=n;i0;i-) p=(LinkList)malloc(sizeof(LNode); scanf(%d,&(*p); p-next=L-next;L-next=p; re
22、turn OK;Status DestroyList_L(LinkList *L) if(L) free(L); return OK;Status ClearList_L(LinkList L) L-next=NULL; return OK;Status ListEmpty_L(LinkList L) if(L-next=NULL) return OK; else return ERROR;Status ListLength_L(LinkList L) int j; struct LNode *p; p=L-next;j=1; while(p) p=p-next;+j; j-; return
23、j;Status GetElem_L(LinkList L,int i,ElemType *e) int j; struct LNode *p; p=L-next;j=1; while(p&jnext;+j; if(!p|ji) return ERROR; *e=p-date; return OK;Status LocateElem_L(LinkList L,ElemType e) int j; struct LNode *p; p=L-next;j=1; while(p&p-date!=e) p=p-next;+j; if(!p) return ERROR; return j;Status
24、PriorElem_L(LinkList L, ElemType cur_e, ElemType *pre_e) int i,j; struct LNode *p; i=LocateElem_L( L, cur_e); p=L-next;j=1; while(p&jnext;+j; if(!p|ji-1) return ERROR; *pre_e=p-date; return OK;Status NextElem_L(LinkList L, ElemType cur_e, ElemType *next_e) int i,j; struct LNode *p; i=LocateElem_L( L
25、, cur_e); p=L;j=0; while(p&jnext;+j; if(!p|ji+1) return ERROR; *next_e=p-date; return OK;Status ListInsert_L(LinkList L, int i, ElemType e) int j; struct LNode *p,*s; p=L;j=0; while(p&jnext;+j; if(!p|ji-1) return ERROR; s=(LinkList)malloc(sizeof(LNode); s-date=e; s-next=p-next; p-next=s; return OK;S
26、tatus ListDelete_L(LinkList L, int i, ElemType *e) int j; ElemType m; struct LNode *p,*q; p=L;j=0; while(p-next&jnext;+j; if(!(p-next)|ji-1) return ERROR; q=p-next; p-next=q-next; *e=q-date; free(q); return OK;Status ListTraverse_L(LinkList L,int i) struct LNode *p; printf(线性表为:n); p=L-next; while(p
27、) printf(%dn,p-date); p=p-next; printf(n); return OK; void main() LinkList L; int i,j,n,select,t; ElemType e,m; struct LNode *p,*q; InitList_L(&L); CreateList_L(L); printf(n); do printf(1:判断线性表是否为空n); printf(2:线性表的长度n); printf(3:查询线性表的第i个元素n); printf(4:查找值为e的元素的位置n); printf(5:求数据元素t的前驱n); printf(6:求数据元素t的后继n); printf(7:在线性表第i个位置前插入新元素en); printf(8:删除线性表第i
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1