得不到想要的结果
数据结构的题目#include<stdio.h>
#include<malloc.h>
#define MAXLEN 100
typedef char DataType;
typedef struct
{
DataType data;
int Length;
}SeqList;
void CreatSeqList(SeqList *L,DataType a[],int n)
{
int i;
L=(SeqList *)malloc(sizeof(SeqList));
for(i=0;i<n;i++)
L->data=a;
L->Length=n;
}
void InitList(SeqList *L)
{
L=(SeqList *)malloc(sizeof(SeqList));
L->Length = 0;
}
void destroyList(SeqList *L)
{
free(L);
}
//位置查找
int GetElem(SeqList *L,int i,DataType *x)
{
if(i<1||i>L->Length)
return 0;
else
{
*x=L->data;
return 1;
}
}
//按值查找
int Locate(SeqList *L,DataType x)
{
int i=0;
while(i<L->Length && L->data!=x)
i++;
if(i>=L->Length)
return 0;
else
return i+1;
}
//插入
int InsElem(SeqList *L,int i,DataType x)
{
int j;
if(L->Length>=MAXLEN)
{
printf("顺序表已满!");
return -1;
}
if(i<1||i>=L->Length+1)
{
printf("插入位置出错!");
return 0;
}
if(i==L->Length+1)
{
L->data=x;
L->Length++;
return 1;
}
for(j=L->Length-1;j>=i-1;j--)
{
L->data=L->data;
L->data=x;
L->Length++;
return 1;
}
}
//删除
int DelElem(SeqList *L,int i,DataType *x)
{
int j;
if(L->Length>=0)
{
printf("顺序表为空!");
return -1;
}
if(i<1||i>=L->Length+1)
{
printf("不存在第i个元素!");
return 0;
}
*x=L->data;
for(j=i;j<L->Length;j++)
{
L->data=L->data;
L->Length--;
return 1;
}
}
//输出
void DispList(SeqList *L)
{
int i;
for(i=0;i<L->Length;i++)
{
printf("%5c",L->data);
}
}
int getLength(SeqList *L)
{
return(L->Length);
}
void main()
{
SeqList *L;
char a={0};
DataType x;
printf("顺序表的基本运算如下:\n");
printf("初始化顺序表L\n");
InitList(L);
CreatSeqList(L,a,6);
printf("依次插入a,b,c,d,e元素\n");
InsElem(L,1,'a');
InsElem(L,2,'b');
InsElem(L,3,'c');
InsElem(L,4,'d');
InsElem(L,5,'e');
printf("输出顺序表L:");
DispList(L);
printf("输出顺序表L的长度:%d\n",getLength(L));
GetElem(L,3,&x);
printf("顺序表L的第3个元素:%c\n",x);
printf("元素a的位置:%d\n",Locate(L,'a')) ;
InsElem(L,4,'f');
DispList(L);
DelElem(L,3,&x);
DispList(L);
destroyList(L);
}
到处都是毛病,可以重写了 本帖最后由 jhq999 于 2021-10-22 21:32 编辑
#include<stdio.h>
#include<malloc.h>
#define MAXLEN 100
typedef char DataType;
typedef struct
{
DataType data;
int Length;
}SeqList;
void CreatSeqList(SeqList * & L,DataType a[],int n)
{
int i;
L=(SeqList *)malloc(sizeof(SeqList));
for(i=0;i<n;i++)
L->data=a;
L->Length=n;
}
void InitList(SeqList * &L)
{
int cs=sizeof(SeqList);
L=(SeqList *)malloc(cs);
L->Length = 0;
}
void destroyList(SeqList *L)
{
free(L);
}
//位置查找
int GetElem(SeqList * &L,int i,DataType *x)
{
if(i<1||i>L->Length)
return 0;
else
{
*x=L->data;
return 1;
}
}
//按值查找
int Locate(SeqList * &L,DataType x)
{
int i=0;
while(i<L->Length && L->data!=x)
i++;
if(i>=L->Length)
return 0;
else
return i+1;
}
//插入
int InsElem(SeqList* & L,int i,DataType x)
{
int j;
if(L->Length>=MAXLEN)
{
printf("顺序表已满!");
return -1;
}
if(i<1||i>=L->Length+1)
{
printf("插入位置出错!");
return 0;
}
if(i==L->Length)
{
L->data=x;
L->Length++;
return 1;
}
DataType tmp=0;
if (--i<L->Length)
{
L->Length++;
for (int j = i+1; j <L->Length; j++)
{
tmp=L->data;
L->data=L->data;
L->data=tmp;
}
L->data=x;
}
return 1;
}
//删除
int DelElem(SeqList * &L,int i,DataType *x)
{
int j;
if(L->Length==0)
{
printf("顺序表为空!");
return -1;
}
if(i<1||i>=L->Length+1)
{
printf("不存在第i个元素!");
return 0;
}
*x=L->data;
for(j=i;j<L->Length;j++)
{
L->data=L->data;
}
L->Length--;
return 1;
}
//输出
void DispList(SeqList * &L)
{
int i;
for(i=0;i<L->Length;i++)
{
printf("%5c",L->data);
}
}
int getLength(SeqList * &L)
{
return(L->Length);
}
void main()
{
SeqList *L=NULL;
char a={49,50,51,52,53};
DataType x;
printf("顺序表的基本运算如下:\n");
printf("初始化顺序表L\n");
//InitList(L);
CreatSeqList(L,a,5);
printf("依次插入a,b,c,d,e元素\n");
InsElem(L,1,'a');
InsElem(L,2,'b');
InsElem(L,3,'c');
InsElem(L,4,'d');
InsElem(L,5,'e');
printf("输出顺序表L:");
DispList(L);
printf("输出顺序表L的长度:%d\n",getLength(L));
GetElem(L,3,&x);
printf("顺序表L的第3个元素:%c\n",x);
printf("元素a的位置:%d\n",Locate(L,'a')) ;
InsElem(L,4,'f');
DispList(L);
DelElem(L,3,&x);
DispList(L);
destroyList(L);
return;
}
jhq999 发表于 2021-10-22 21:30
编译不通过
本帖最后由 jhq999 于 2021-10-22 22:07 编辑
最强废铁h 发表于 2021-10-22 21:58
编译不通过
编译错误输出是什么? jhq999 发表于 2021-10-22 22:04
编译错误输出是什么?
expected ';', ',' or ')' before '&' token c不支持引用,我再改改 jhq999 发表于 2021-10-22 22:11
c不支持引用,我再改改
好的,谢谢 #include<stdio.h>
#include<malloc.h>
#define MAXLEN 100
typedef char DataType;
typedef struct
{
DataType data;
int Length;
}SeqList;
void CreatSeqList(SeqList ** L,DataType a[],int n)
{
int i;
*L=(SeqList *)malloc(sizeof(SeqList));
for(i=0;i<n;i++)
(*L)->data=a;
(*L)->Length=n;
}
void InitList(SeqList **L)
{
int cs=sizeof(SeqList);
*L=(SeqList *)malloc(cs);
(*L)->Length = 0;
}
void destroyList(SeqList **L)
{
free(*L);
}
//位置查找
int GetElem(SeqList **L,int i,DataType *x)
{
if(i<1||i>(*L)->Length)
return 0;
else
{
*x=(*L)->data;
return 1;
}
}
//按值查找
int Locate(SeqList **L,DataType x)
{
int i=0;
while(i<(*L)->Length && (*L)->data!=x)
i++;
if(i>=(*L)->Length)
return 0;
else
return i+1;
}
//插入
int InsElem(SeqList**L,int i,DataType x)
{
if((*L)->Length>=MAXLEN)
{
printf("顺序表已满!");
return -1;
}
if(i<1||i>=(*L)->Length+1)
{
printf("插入位置出错!");
return 0;
}
if(i==(*L)->Length)
{
(*L)->data=x;
(*L)->Length++;
return 1;
}
DataType tmp=0;
if (--i<(*L)->Length)
{
(*L)->Length++;
for (int j = i+1; j <(*L)->Length; j++)
{
tmp=(*L)->data;
(*L)->data=(*L)->data;
(*L)->data=tmp;
}
(*L)->data=x;
}
return 1;
}
//删除
int DelElem(SeqList **L,int i,DataType *x)
{
int j;
if((*L)->Length==0)
{
printf("顺序表为空!");
return -1;
}
if(i<1||i>=(*L)->Length+1)
{
printf("不存在第i个元素!");
return 0;
}
*x=(*L)->data;
for(j=i;j<(*L)->Length;j++)
{
(*L)->data=(*L)->data;
}
(*L)->Length--;
return 1;
}
//输出
void DispList(SeqList **L)
{
int i;
for(i=0;i<(*L)->Length;i++)
{
printf("%5c",(*L)->data);
}
}
int getLength(SeqList **L)
{
return((*L)->Length);
}
void main()
{
SeqList *L=NULL;
char a={49,50,51,52,53};
DataType x;
printf("顺序表的基本运算如下:\n");
printf("初始化顺序表L\n");
//InitList(L);
CreatSeqList(&L,a,5);
printf("依次插入a,b,c,d,e元素\n");
InsElem(&L,1,'a');
InsElem(&L,2,'b');
InsElem(&L,3,'c');
InsElem(&L,4,'d');
InsElem(&L,5,'e');
printf("输出顺序表L:");
DispList(&L);
printf("输出顺序表L的长度:%d\n",getLength(&L));
GetElem(&L,3,&x);
printf("顺序表L的第3个元素:%c\n",x);
printf("元素a的位置:%d\n",Locate(&L,'a')) ;
InsElem(&L,4,'f');
DispList(&L);
DelElem(&L,3,&x);
DispList(&L);
destroyList(&L);
getchar();
}
jhq999 发表于 2021-10-22 22:19
为什么要用指向指针的指针?我开始写的代码算法是书上的 因为形参和实参的问题,指针也是实参变量,如果直接代入,它不会随着形参改变而改变。 jhq999 发表于 2021-10-22 22:45
因为形参和实参的问题,指针也是实参变量,如果直接代入,它不会随着形参改变而改变。
明白了,谢谢 最强废铁h 发表于 2021-10-22 22:31
为什么要用指向指针的指针?我开始写的代码算法是书上的
我才发现我改多了,关于形参实参只改
void CreatSeqList(SeqList ** L,DataType a[],int n)就行了
页:
[1]