写出顺序表 sqlist 的 nextElem 操作实现算法,并分析算法时间复杂度。操作定义: nextElem ( L , curelem ,& next elem )初始条件:线性表 L 已经存在。操作结果:若 curelem 是工的数据元素,且不是最后一个,则用 next elem 返回它的后续,否则操作失败, next elem 无意义。
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
#define error 0
#define ok 1
typedef int status;
#define listinitsize 100
#define listincrement 10
typedef char elemtype;
typedef struct{
elemtype *elem;
int length;
int listsize;
}sqlist ;
status initlist(sqlist &l)//构造一个空的线性表L
{
l.elem=(elemtype *)malloc(listinitsize*sizeof(elemtype));
if(!l.elem) exit(error);//存储分配失败
l.length=0;
l.listsize=listinitsize;//初始存储容量
return ok;
}
//顺序表实验4个辅助函数:
status inputlist(sqlist &l)//顺序表输入
{ int i,n;
//printf("please input the length of the sqlist:");
scanf("%d",&n);//n个元素
l.length=n;
//printf("please input the data of the sqlist:");
for (i=0;i<=l.length-1;i++) scanf("%d",&l.elem[i]);//输入n个元素
return ok;
}
status listtraverse(sqlist l)//顺序表输出
{ int i;
//printf("the length of the sqlist:");
printf("%d\n",l.length);
// printf("the data of the sqlist:");
for (i=0;i<=l.length-1;i++) printf("%d ",l.elem[i]);
printf("\n");
return ok;
}
status destroylist(sqlist &l)//顺序表撤销
{ free(l.elem);
l.length=0;
l.listsize=0;
return ok;
}
status clearlist(sqlist &l)//顺序表重置
{
l.length=0;
return ok;
}
status listdelete(sqlist &l,int i,elemtype &e)
{
if(i<1 || i>l.length) return error;
e = l.elem[i-1];
for( ;i<l.length;i++) l.elem[i-1]=l.elem[i];
l.length--;
return ok;
}
status nextelem(sqlist &l,int curelem,elemtype &next_elem)//curelem是l的元素且不是最后一个,nextelem返回后续
{
int i,j,k=0;
j=i;
for(i=0;i<l.length-1;i++)
{
if(l.elem[i]==curelem)
{
k=k+1;
break;
}
}
if(k>0)
{
for(;i<l.length;i++)
{
next_elem[i-j]==l.elem[i];//赋值后继的数组给next_elem
cout<<next_elem[i]<<" ";
return next_elem;
}
}
//return error;
else return error;
}
int main()
{
sqlist l;int next_elem;int *nextelem;
initlist(l);
inputlist(l);
int curelem;
scanf("%d",&curelem);
if( nextelem(l,curelem,&next_elem)) cout<<nextelem(l,curelem,&next_elem);
else cout<<"error"<<endl;
destroylist(l);
return 0;
}