小码过海 2023-10-11 15:20 采纳率: 85.7%
浏览 14
已结题

c语言在VScode上编写顺序表

C语言在VScode上实现顺序表的初始化、查找、插入、删除、输出、撤销
没找到报错的地方哪里有问题,烦请懂的朋友指正

#include <stdio.h>
#define ERROR 0
#define OK 1

typedef struct seqList
{
    int n;
    int maxLength;
    int *element;
}SeqList;
int Init(SeqList *L,int mSize);
int Find(SeqList *L);
int Insert(SeqList *L);
int Delete(SeqList *L);
int Output(SeqList *L);
void Destroy(SeqList *L);
int main()
{
    int length;
    SeqList *p;
    do
    {
       printf("please input the length of array");
       scanf("%d",&length);
    } while (length<10);
    Init(&p,length);
    Find(&p);
    Insert(&p);
    Delete(&p);
    Output(&p);
    Destroy(&p);
    return 0;
}
int Init(SeqList *L,int mSize)
{
    int i=0;
    L->maxLength=mSize;
    L->n=10;
    L->element=(int)malloc(sizeof(int)*mSize);
    if(!L->element)
    return ERROR;
    else
    {
        printf("please input the element of array");
        for(i;i<10;i++)
            scanf("%d",L->element[i]);
    } 
    return OK;
}
int Find(SeqList *L)
{
    int i=0;int *x;
    printf("please input the element to be found");
    scanf("%d",&i);
    if(i<0||i>L->n-1)
    return ERROR;
    *x=L->element[i];
    return OK;
}
int Insert(SeqList *L)
{
    int x,i,p;
    if(L->n==L->maxLength)
    return ERROR;
    printf("please input the number and the place\n");
    do{
        scanf("%d%d",&x,&i);
    }while(i<-1||i>=L->n);      //i<-1而非0
    p=L->n;
    for(p;p-i>0;p--)
    {
        L->element[p]=L->element[p-1];
    }
    L->element[i]=x;        //新元素放i还是i+1位置
    L->n=L->n+1;
    return OK;
}
int Delete(SeqList *L)
{
    int i,p,q;
    if(L->n==L->maxLength)
    return ERROR;
    printf("please input the number to delete\n");
    scanf("%d",&i);
    if(i<0||i>L->n)
       return ERROR;
    p=L->n;
    for(p;p-i>0;p--)
    {
        L->element[i]=L->element[i+1];
        i++;
    }
    L->n=L->n-1;
    return OK;
}
int Output(SeqList *L)
{
    int i=0;
    if(0==L->n)
    return ERROR;
    for(i;i<L->n;i++)
    printf("%d ",L->element[i]);
    printf("\n");
    return OK;
}
void Destroy(SeqList *L)
{
    L->n=0;
    L->maxLength=0;
    free(L->element);
}

以下是报错

```c
[Running] cd "d:\Desktop\VScodeCompile\" && gcc B22130809_1.c -o B22130809_1 && "d:\Desktop\VScodeCompile\"B22130809_1
B22130809_1.c: In function 'main':
B22130809_1.c:23:24: error: conflicting types for 'p'
     SeqList *p;SeqList p;
                        ^
B22130809_1.c:23:14: note: previous declaration of 'p' was here
     SeqList *p;SeqList p;
              ^
B22130809_1.c: In function 'Init':
B22130809_1.c:42:21: warning: implicit declaration of function 'malloc' [-Wimplicit-function-declaration]
     L->element=(int)malloc(sizeof(int)*mSize);
                     ^~~~~~
B22130809_1.c:42:21: warning: incompatible implicit declaration of built-in function 'malloc'
B22130809_1.c:42:21: note: include '<stdlib.h>' or provide a declaration of 'malloc'
B22130809_1.c:42:15: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
     L->element=(int)malloc(sizeof(int)*mSize);
               ^
B22130809_1.c: In function 'Destroy':
B22130809_1.c:113:5: warning: implicit declaration of function 'free' [-Wimplicit-function-declaration]
     free(L->element);
     ^~~~
B22130809_1.c:113:5: warning: incompatible implicit declaration of built-in function 'free'
B22130809_1.c:113:5: note: include '<stdlib.h>' or provide a declaration of 'free'

[Done] exited with code=1 in 0.085 seconds




  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-12 18:35
    关注

    【以下回答由 GPT 生成】

    问题分析: 根据代码和问题描述,可以看出存在以下问题: 1. 数组长度的输入错误,应接收长度,而不是固定的10。 2. Init函数中,应该将输入的元素数目赋给L->n,而不是固定的10。 3. Find函数中,x未指向合适的内存空间,应该先为其分配内存。 4. Insert函数中,循环条件有误,要判断p >= i,而不是p - i > 0。 5. Delete函数中,循环条件有误,要判断p < L->n - 1,而不是p < L->n。

    解决方案: 以下是修改后的代码及解决方案:

    #include <stdio.h>
    #include <stdlib.h>
    
    #define ERROR 0
    #define OK 1
    
    typedef struct seqList
    {
        int n; // 元素数目
        int maxLength; // 最大长度
        int *element; // 存储元素的指针
    } SeqList;
    
    int Init(SeqList *L, int mSize);
    int Find(SeqList *L);
    int Insert(SeqList *L);
    int Delete(SeqList *L);
    int Output(SeqList *L);
    void Destroy(SeqList *L);
    
    int main()
    {
        int length;
        SeqList L;
        printf("请为数组输入长度:");
        scanf("%d", &length);
        while (length < 10)
        {
            printf("长度过小,请重新输入:");
            scanf("%d", &length);
        }
        Init(&L, length);
        Find(&L);
        Insert(&L);
        Delete(&L);
        Output(&L);
        Destroy(&L);
        return 0;
    }
    
    int Init(SeqList *L, int mSize)
    {
        int i;
        L->maxLength = mSize;
        L->element = (int *)malloc(sizeof(int) * mSize);
        if (!L->element)
            return ERROR;
        else
        {
            L->n = 0; // 初始元素数目为0
            printf("请输入数组的元素:");
            for (i = 0; i < mSize; i++) // 修改为根据输入长度循环读取元素
                scanf("%d", &(L->element[i]));
            L->n = mSize; // 将输入的元素数目赋给L->n
        }
        return OK;
    }
    
    int Find(SeqList *L)
    {
        int i;
        int *x = (int *)malloc(sizeof(int)); // 为x分配内存空间
        printf("请输入要查找的元素:");
        scanf("%d", &i);
        if (i < 0 || i >= L->n)
            return ERROR;
        *x = L->element[i]; // 将元素值赋给x指向的内存
        printf("查找到的元素为:%d\n", *x); // 输出查找到的元素
        free(x); // 释放x的内存空间
        return OK;
    }
    
    int Insert(SeqList *L)
    {
        int x, i, p;
        if (L->n == L->maxLength)
            return ERROR;
        printf("请输入要插入的元素和位置:");
        do
        {
            scanf("%d %d", &x, &i);
        } while (i < -1 || i > L->n); // 修改循环条件
    
        p = L->n;
        for (p; p > i; p--) // 修改循环条件
        {
            L->element[p] = L->element[p - 1];
        }
        L->element[i] = x;
        L->n = L->n + 1;
        return OK;
    }
    
    int Delete(SeqList *L)
    {
        int i, p;
        printf("请输入要删除的元素:");
        scanf("%d", &i);
        if (i < 0 || i >= L->n)
            return ERROR;
        p = i;
        for (p; p < L->n - 1; p++) // 修改循环条件
        {
            L->element[p] = L->element[p + 1];
        }
        L->n = L->n - 1;
        return OK;
    }
    
    int Output(SeqList *L)
    {
        int i;
        for (i = 0; i < L->n; i++)
        {
            printf("%d ", L->element[i]);
        }
        printf("\n");
        return OK;
    }
    
    void Destroy(SeqList *L)
    {
        free(L->element);
    }
    

    注意:以上解决方案已对原代码进行修改。

    希望以上解决方案能帮助到您。如果有任何疑问,请随时提出。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月30日
  • 已采纳回答 10月22日
  • 创建了问题 10月11日

悬赏问题

  • ¥300 寻抓云闪付tn组成网页付款链接
  • ¥15 请问Ubuntu要怎么安装chrome呀?
  • ¥15 视频编码 十六进制问题
  • ¥15 Xsheii7我安装这个文件的时候跳出来另一个文件已锁定文件的无一部分进程无法访问。这个该怎么解决
  • ¥15 unity terrain打包后地形错位,跟建筑不在同一个位置,怎么办
  • ¥15 FileNotFoundError 解决方案
  • ¥15 uniapp实现如下图的图表功能
  • ¥15 u-subsection如何修改相邻两个节点样式
  • ¥30 vs2010开发 WFP(windows filtering platform)
  • ¥15 服务端控制goose报文控制块的发布问题