文档库 最新最全的文档下载
当前位置:文档库 › 指出一下算法中的错误和低效(即费时)之处,并将它修改为一个正确又高效的算法。

指出一下算法中的错误和低效(即费时)之处,并将它修改为一个正确又高效的算法。

#include
#include

#define LIST_INIT_SIZE 10
#define LISTINCREMENT 10

typedef int ElemType;
typedef int Status;

typedef struct {
ElemType *elem; //存储空间基址
int length; //当前长度
int listsize; //当前分配的存储空间
} SqList; //顺序表类型


Status DeleteK(SqList *a, int i, int k);



int main()
{
SqList list;
list.elem = (ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
list.length = 0;
int i=0, m = 0, n = 0;
printf("Enter the numbers,q to quit:\n");
while (list.elem && scanf("%d",list.elem+i)) {
printf("%d\n",list.elem[i]);
++i;
list.length++;
}
printf("length=%d\n",list.length);
printf("输入第m位元素起的n个元素\n->");
scanf("%*s"); //清除输入流的哨兵符q
while (scanf("%d %d",&m,&n)!=2) {
scanf("%*s");
printf("请输入整数!\n");
}
printf("m=%d,n=%d\n",m,n);
i=0;
if(DeleteK(&list,m,n)) {
while (iprintf("%d\n",list.elem[i++]);
}
} else {
printf("输入m,n有误\n");

}



return 0;
}

Status DeleteK(SqList *a, int i, int k) {
if (i < 0||i > a->length||k < 0||k > a->length - i)
return 0;
int j=0;

for (j = 0; j <= a->length-k; ++j)
a->elem[i-1+j]=a->elem[i-1+j+k];
a->length-=k;
return 1;
}

相关文档