1、 int len; /当前元素个数 int listsize; /当前存储最大容量 SqList;/构造一个空的线性表L int InitList(SqList &L) =(ElemType *)malloc(LISTSIZE*sizeof(ElemType); if (! exit(-2); /分配空间失败 =0; =LISTSIZE;/在顺序线性表L中第i个位置之前插入新的元素e int ListInsert(SqList &L,int i,ElemType e) if (i+1) return -1; /i值不合法 if = ElemType *newelem=(ElemType *)r
2、ealloc,+CREMENTSIZE)*sizeof(ElemType); /存储空间已满,增加分配 if(!newelem) exit (-2); /分配失败 =newelem; +=CREMENTSIZE; ElemType *q=&i-1) ; for (ElemType *p=&);p=q;-p) *(p+1)=*p; /插入位置及其后的元素后移 *q=e; +; return 1;/在顺序线性表L中删除第i个元素,并用e返回其值int ListDelete(SqList &L,int i,ElemType&e) return -1; ElemType *p=&i-1); e=*p;
3、 ElemType*q=+; for (+p;pch; if(ch=I) couti; cout输入要插入的新元素:e;endl; printf(输入数据:L=(%s) ListInsert(L,%d,%c),i,e); state=ListInsert (L,i,e); else if (ch=D删除第几个元素: /删除操作L=(%s) DeleteList(L,%d,e),i); state=ListDelete(L,i,e); else goto AGAIN; /操作指示符输入错误处理endl正确结果: if(state=-1) coutERROR,L=(%s) ,; /输出结果 if(
4、ch=&state!=-1) coutnext; j=1; while(p&j +j; /寻找第i个元素 p|ji) return -1; /寻找失败 e=p-data;int ListInsert(LinkList & /在带头结点的单链线性表L中第i个元素之前插入元素e LinkList p,s; int j; p=L;j=0; while(p&i-1) p=p-+j;i-1) return -1; s=(LinkList) malloc( sizeof(LNode); s-data=e;s-next=p- p-next=s;int ListDelete(LinkList&e) /在带头结
5、点的单链线性表L中,删除第i个元素,并由e返回其值 LinkList p,q; p=L; while(p-next&i-1) (p-next)|j q=p-p-next=q- e=q-free(q);int newdata(LinkList&L,char *ch) int k; /数据初始化 gets(ch); for (k=0;chk!k+) ListInsert(L,k+1, chk); /将初始化数据插入链表L中 OK return k; /返回链表中的元素个数 char *ch; ch=(char *)malloc(100*sizeof(char); /定义数组用来辅助数据初始化 Li
6、nkList L; /头指针 LNode head; /头结点 L=&head; =null; int i,k,state; char e,CH,f; k=newdata(L,ch); /调用函数使链表数据初始化 =k; /将元素个数存入头结点的数据域 CH; if(CH=,ch,i,e); state=ListInsert(L,i,e); +; else if (CH=,ch,i); -;L=( for(int m=1;=m;m+) /一一输出数据 GetElem(L,m,f);f;) /删除操作反馈e实验结果:由于两个程序的输出模式相同,在此只列一组测试数据: L = () ListIns
7、ert (L, 1, k)L = (EHIKMOP) ListInsert (L, 9, tL = (ABCEHKNPQTU) ListInsert(L, 4, uL = () ListDelete (L, 1, e) L = (DEFILMNORU) ListDelete_Sq(L, 5, e)L = (CD) ListDelete_Sq(L, 1, e)测试过程中所注意到的问题主要还是输出与输入界面的问题,通过灵活使用cout和cin函数来不断改进。另外,在用户端看来在设计算法时程序的可重复性未考虑,显得不够人性化。时间复杂度分析:假定线性表有n个节点,顺序存储结构下,插入程序段以*(p+1)=*p作为基本操作的原操作,并讨论在最坏情况下的时间复杂度,记T(n)=O(n);删除程序段以*(p-1)=*(p)作为基本操作的原操作,并讨论在最坏情况下的时间复杂度,记T(n)=O(n)。链式存储结构下,插入程序段以p=p-next作为基本操作的原操作,并讨论在最坏情况下的时间复杂度,记T(n)=O(n);删除程序段以p=p-next作为基本操作的原操作,并讨论在最坏情况下的时间复杂度,记T(n)=O(n)。总结和感想:改进设想在于减少中间变量,优化数据初始化操作,和增加程序可重复性。具体操作完成估计就该把上述程序全面修改了,还包括算法的修改和增进。从完成该实验的
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1