月亮偷着哭... 2022-04-17 13:33 采纳率: 84.6%
浏览 99
已结题

C语言 数据结构 顺序表的基本操作 出现错误:无效转换

1、在chief.cpp的第25到27行出现错误[Error]从类型“stu{aka _stu}”转换为类型“SeqListNode*{aka void*}”无效
2、在chief.cpp的第18行出现错误[Error]从“const char”到“int”[-fppermissive]的转换无效
3、怎样才可以实现 把定义好的结构体数组存放到顺序表里面 并完成一些基本的增删改查操作
4、SeqList
list 与 SeqListNode* node 它们的意思是不是:指向空类型的指针变量list,指向空类型的指针变量node

文件SeqList.c

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef void SeqList;//对线性表进行处理 
typedef void SeqListNode;//对线性表结点进行处理 

typedef struct _tag_SeqList //头结点,记录表的信息
{
    int capacity;
    int length;
    void **node;//用void*的数组来存储每个数据的地址 
 } TSeqList;//结构体变量 或者说线性表结构体的别名 
 //创建顺序表
 SeqList* SeqList_Create(int capacity)//返回值为SeqList类型,即顺序表的地址
 {
      int ret;//程序健壮性,在程序出错时提示问题在哪一步 
     TSeqList *temp=NULL;//创建一个线性表结构体指针 经过处理后通过return返回 
     temp=(TSeqList*)malloc(sizeof(TSeqList));//为头结点分配空间
     if(temp==NULL)
     {
         ret=1;
         printf("func SeqList_Create() error:%d\n",ret);
         return NULL;
         
      } 
      //为顺序表分配空间,将顺序表空间地址保存在头结点中 
      memset(temp,0,sizeof(TSeqList));
      temp->capacity=capacity;
      temp->length=0;
      temp->node=(void**)malloc(sizeof(void*)*capacity);//分配一个指针数组
      if(temp->node==NULL)
      {
          ret=2;
          printf("func SeqList_Create() error:%d\n",ret);
          return NULL;
       } 
      return temp;//把分配好的顺序表地址拿出去 将头结点地址返回给调用者 
      
  } 
//返回线性表的容量
int SeqList_Capacity(SeqList* list)
{
    TSeqList *temp=NULL;
    if(list==NULL)//程序健壮性判断 
    {
        return 0;
    }
    temp = (TSeqList*)list;//创建一个结构体指针
                           //将 SeqList* list转化为 (TSeqList*)list
    return temp->capacity;
}
//获取线性表长度 
int SeqList_Length(SeqList* list)
{
    TSeqList *temp=NULL;
    if(list==NULL)
    {
        return 0;
    }
    temp=(TSeqList*)list;
    return temp->length;
 } 
//插入元素 
int SeqList_Insert(SeqList* list,SeqListNode* node,int pos)//position 位置 
{
    int i;
    TSeqList *temp=NULL;
    if(list==NULL||node==NULL)
    {
        return -1;//程序健壮性 
    }
    temp=(TSeqList*)list;//创建一个结构体指针 指向 (TSeqList*)list
    if(temp->length>=temp->capacity)
    {
        return -2;//程序健壮性判断 
    }
    if(pos>temp->length)
    pos=temp->length;
    for(i=temp->length;i>pos;i--)//当在已存在的元素里面插入一个元素时 
    {
        temp->node[i]=temp->node[i-1];
    }
    temp->node[i]=node;
    temp->length++;
    return 0;
}
//删除元素
SeqList* SeqList_Delete(SeqList* list,int pos)
{
    int i;
    TSeqList* tlist=NULL;
    SeqListNode * temp=NULL;
    tlist=(TSeqList*)list;
    if(list==NULL||pos<0||pos>= tlist->capacity)
    {//程序健壮性 当pos不符合条件或list==NULL会提示错误
        printf("SeqList_Delete() error\n");
        return NULL;
    }
    temp = (SeqListNode*)tlist->node[pos];//创建一个节点指针,指向需要删除的元素
    for(i=pos+1;i<tlist->length;i++)
    {
        tlist->node[i-1]=tlist->node[i];
    }
    tlist->length--;
    return temp;
}
//获取顺序表值 
SeqList* SeqList_Get(SeqList* list,int pos) 
{
    TSeqList* tlist=NULL;
    SeqListNode* temp=NULL;
    tlist=(TSeqList*)list;
    if(list==NULL||pos<0||pos>=tlist->capacity)
    {
        printf("SeqList_Get() error\n");
        return NULL;
    }
    temp=(SeqListNode *)tlist->node[pos];
    return temp;
}
//清空顺序表
void SeqList_Clear(SeqList* list)
{
    TSeqList *temp=NULL;
    if(list==NULL)
    {
        return;
     } 
     temp=(TSeqList*)list;
     temp->length=0;
     memset(temp->node,0,(temp->capacity* sizeof(void*))) ;//使数组元素为零 
     return;
}
//销毁顺序表 
void SeqList_Destory(SeqList* list)
{
    TSeqList* temp=NULL;
    if(list==NULL)
    {
        return;
     } 
     temp=(TSeqList*)list;
     if(temp->node !=NULL)
     {
         free(temp->node);
     }
     free(temp);
     return;
}

文件SeqList.h

#ifndef _SEQLIST_H_
#define _SEQLIST_H_

typedef void SeqList;
typedef void SeqListNode;

SeqList* SeqList_Create(int capacity);
SeqList* SeqList_Get(int capacity);
SeqList* SeqList_Delete(int capacity);
void SeqList_Clear(SeqList* list);
int SeqList_Length(SeqList* lsit);
int SeqList_Capacity(SeqList* lsit);
int SeqList_Insert(SeqList* lsit,SeqListNode* node,int pos);
#endif


文件chief.cpp

#include "SeqList.c"
#include "SeqList.h"
#include<stdio.h>
#include<stdlib.h>
typedef struct _Stu{
    int num[5];
    char name[30];
    char sexy[4];
    int age;
    char birth[30];
    int height;
    char s_class[30];
    char health[30];
}stu;
int main()
{
   stu student[4]={{12001,"林星","男",18,"1995-1",180,"计1","健康"},{12002,"张媛","女",19,"1994-2",168,"计2","一般"},
                  {12003,"刘力","男",19,"1994-3",178,"计3","健康"}, {12004,"黄觉","女",18,"1995-4",165,"计4","神经衰弱"}};
   int ret=0;
   SeqList* list=NULL;
   
   list=SeqList_Create(10);
   //插入结点
   ret=SeqList_Insert(list,(SeqListNode*)student[0],0); 
   ret=SeqList_Insert(list,(SeqListNode*)student[1],0); 
   ret=SeqList_Insert(list,(SeqListNode*)student[2],0); 
   ret=SeqList_Insert(list,(SeqListNode*)student[3],0);
   printf("顺序表的容量:%d\n",SeqList_Capacity(list));
}

  • 写回答

1条回答 默认 最新

  • 小浪_Coding Java领域优质创作者 2022-04-17 14:01
    关注

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月17日
  • 创建了问题 4月17日

悬赏问题

  • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络
  • ¥66 关于川崎机器人调速问题
  • ¥15 winFrom界面无法打开
  • ¥30 crossover21 ARM64版本安装软件问题
  • ¥15 mymetaobjecthandler没有进入
  • ¥15 mmo能不能做客户端怪物
  • ¥15 osm下载到arcgis出错