#include
#include
#include
#define InitSize 15
typedef struct {
int *data;
int MaxSize,length;
}SeqList;
int InitSeqList(SeqList *L){
L->data=(int *)malloc(sizeof(int)*InitSize);
if(!L->data)return 0;
L->length=0;
L->MaxSize=InitSize;
printf("该顺序表已被创建nn");
return 1;
}
int DestroyLIst(SeqList *L){//因为此处采用了顺序表的动态内存分配所以要使用malloc()和free()函数成对申请和销毁内存空间
if(!L)return 0;
else {free(L->data);printf("该顺序表已销毁nn");}
return 1;
}
int ListInsert(SeqList *L,int i,int e){//i 的取值有n+1种 即n=L,leng 问题规模即当前表长;
//最好循环语句执行次数 当i=length+1 第一次for循环判定j=L-L->length+1)
return 0;//顺序表的插入操作i的合法取值为1到L.length+1
if(L->length>=InitSize)return 0;
int j=L->length;
int times=0;//times 用以记录循环语句执行次数
for(;j>=i;j--){
L->data[j]=L->data[j-1];times++;}
L->data[i-1]=e;
L->length++;
printf("向顺序表位置:%d插入元素:%d成功n循环执行:%d次nn",i,e,times);
return 1;
}
int ListDelete(SeqList *L,int i,int *e){ //i的取值有n种 即n=L.length 问题规模即当前表长
if(!L) //最好循环语句执行次数 当i=length 第一次for循环判定j=L-length-1 共n-1次 T(n)=O(n-1)=O(n);
if(i<1||i>L->length) //平均时间复杂度 E(T(n))=( 1/n )*(0+2+3+...+n-1)=( 1/n )*(0 + n-1)*(n)/2=(n-1)/2=O(n)
return 0;
int j=i;
int times=0;//times 用以记录循环语句执行次数
(*e)=L->data[i-1];
for(;jlength;j++)
L->data[j-1]=L->data[j];
L->length--;
printf("向顺序表位置:%d删除元素:%d成功n循环执行:%d次nn",i,(*e),times);
return 1;
}
void PrintList(SeqList *L){
for(int i=0;ilength;i++)
printf("该顺序表中第%d个元素%dn",i+1,L->data[i]);
}
int GetElem(SeqList *L,int i){//顺序表具有随机存取的特点 在 O(1)的时间复杂度下可以实现按位存取
if(i<1||i>L->length)
return 0;
return (L->data[i-1]);
}
int LocatElem(SeqList L,int e){//此时for循环语句的执行次数和顺序表内元素值相关
if(L.length==0)return 0; //最好时间复杂度 当第1位元素恰为按值查找时循环语句执行次数为:1 O(n)=1
int i=0; //最坏时间复杂度 当查找元素为最后一位元素或者不存在时 执行次数为:n O(n)=n
for(;iprintf("已在该顺序表中找到第:%d位元素:%dn",i+1,e);break;}
return i;
}
int main()
{
SeqList L;
int discard;
int desert;
InitSeqList(&L);
ListInsert(&L,1,7);
ListInsert(&L,1,7);
ListInsert(&L,1,2);
ListInsert(&L,1,5);
ListInsert(&L,1,9);
ListInsert(&L,1,9);
PrintList(&L);
ListDelete(&L,1,&discard);
ListDelete(&L,5,&desert);
PrintList(&L);
printf("n顺序表第1个节点数据为%dnn",GetElem(&L,1));
if(!LocatElem(L,9))printf("顺序表按值查找失败nn");
if(!LocatElem(L,9527))printf("顺序表按值查找失败n");
DestroyLIst(&L);
return 0;
}