niosvs 2023-03-12 15:28 采纳率: 50%
浏览 16
已结题

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


#include<stdio.h>
#include<stdlib.h>
#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;i<L.length;i++)
    scanf("%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;i<L.length;i++){
        L.data[i]=p[i];
        L.maxsize=L.maxsize+len;
        
    } 
    free(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;i<L.length;i++)
    {
        if(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;i<L.length;i++)
    {
        printf("%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;    
}

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

  • 写回答

3条回答 默认 最新

  • 嗷呜大嘴狼 2023-03-12 16:15
    关注

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

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

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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月25日
  • 已采纳回答 3月17日
  • 创建了问题 3月12日

悬赏问题

  • ¥30 关于#硬件工程#的问题:求一下解题思路
  • ¥15 运筹学对偶单纯行法构造扩充问题
  • ¥20 XP系统的老电脑一开机就提示找不到rundll.exe,付费求解
  • ¥15 milvus查询出来的score怎么转换成0-1之间的相似性
  • ¥15 多ip服务器站群如何搭建l2tp服务器
  • ¥15 lvgl V9移植到linux开发板
  • ¥15 VB.net中在窗体中创建一个button控件来关闭窗体,但是提示错误,我该怎么办
  • ¥15 网上下载好的程序但是arduinoIDE编程报错,运行不了,哪里出错了,能具体给改一下吗
  • ¥15 Sharepoint JS开发 付费技术指导
  • ¥15 输入程序运行仿真后,烟雾值不实时检测,变成固定值