关于顺序表的增删改查得算法描述(语言-c语言)


#include
#include
#define initsize 20
typedef struct{
    int length;
    int maxsize;
    int *data;
}list;

void initlist(list &L){
    L.data=(int*)malloc(initsize*sizeof(int));
    L.length=0;
    L.maxsize=initsize;
}

void input(list &L){
    printf("输入你要创建的顺序表的长度:");
    scanf("%d",&L.length);
    printf("输入该顺序表中的元素:");
    for(int i=0;iscanf("%d",&L.data[i]); 
}

void increase(list &L){
    int len;
    int *p=L.data;
    printf("输入你要增加的顺序表的长度:");
    scanf("%d",&len);
    L.data=(int *)malloc((L.maxsize+len)*sizeof(int));
    for(int i=0;ifree(p);
}
 
 bool insert(list &L){
     int i,e;
     printf("输入要插入顺序表的元素和元素位置:");
    scanf("%d %d",&e,&i);
    if(i<1 || i>L.length+1)  return 0;
    if(L.length>L.maxsize)    return 0;
    for(int j=L.length;j>=i;j--)
    L.data[j]=L.data[j-1];
    L.data[i-1]=e;
    L.length++;
    printf("插入的元素是%d,插入的位置是%d\n",e,i);
 }

bool deleteelem(list &L){
    int i,e;
    printf("输入要删除的元素位置:");
    scanf("%d",&i);
    if(i<1 || i>L.length+1)  return 0;
    if(!L.data)    return 0;
    e=L.data[i-1];
    for(int j=i;j<=L.length;j++){
        L.data[j-1]=L.data[j];
    }
    L.length--;                                   
    printf("删除的元素是%d,位置是%d\n",e,i);
    return 1;
}

bool getelem(list &L){
    int i;
    printf("想要找第几个元素:");
    scanf("%d",&i) ;
    if(i<1 || i>L.length+1){
        printf("失败");
        return 0;
    }
    printf("第%d个元素是%d\n",i,L.data[i-1]);
    return 1;
}

bool locate(list &L){
    int e,k=1;
    printf("输入你要查找的数");
    scanf("%d",&e);
    for(int i=0;iif(L.data[i]==e)
        {
            printf("您要查找是第%d个元素\n",i+1);
            k=0;
            break;
        }
        
     } 
    if(k)    printf("查找失败");
}

bool print(list &L){
    if(!L.data)    return 0;
    printf("顺序表:");
    for(int i=0;iprintf("%d ",L.data[i]);
    }
    printf("\n");
}
int main()
{
    list(L);
    initlist(L);
    input(L);
    print(L);
    increase(L);
    insert(L);
    print(L);
    deleteelem(L);
    print(L);
    getelem(L);
    locate(L);

    return 0;    
}

该代码的算法描述怎么写?

该代码是一个基于顺序表的线性结构的实现,其中包括了以下函数:

initlist: 初始化顺序表,给其动态分配一定大小的内存空间;
input: 给顺序表输入元素,通过 scanf 函数实现;
increase: 增加顺序表的长度,即扩展内存空间;
insert: 向顺序表中插入元素,可以指定插入的位置;
deleteelem: 删除顺序表中的指定位置的元素;
getelem: 获取指定位置的元素;
locate: 查找指定元素在顺序表中的位置;
print: 输出整个顺序表的元素。
在 main 函数中,先调用 initlist 函数初始化顺序表,再通过 input 函数输入顺序表中的元素,并输出顺序表;然后调用 increase 函数增加顺序表的长度,并输出顺序表;接着调用 insert 函数向顺序表中插入元素,并输出顺序表;然后调用 deleteelem 函数删除顺序表中的元素,并输出顺序表;接着调用 getelem 函数获取指定位置的元素;最后调用 locate 函数查找指定元素在顺序表中的位置,若查找失败则输出失败信息。

整个代码的算法描述为:定义了一个结构体 list,其中包含顺序表的长度、最大长度和数据;然后定义了一系列对顺序表进行操作的函数,包括初始化顺序表、输入顺序表中的元素、增加顺序表的长度、向顺序表中插入元素、删除顺序表中的元素、获取指定位置的元素、查找指定元素在顺序表中的位置和输出整个顺序表的元素;最后在 main 函数中调用上述函数,实现对顺序表的各种操作。

答案来自 https://www.wodianping.com/

实现不定长数组的动态增删改查及插入操作?