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));
}