鱼C论坛

 找回密码
 立即注册
查看: 1135|回复: 12

[已解决]得不到想要的结果

[复制链接]
发表于 2021-10-22 19:53:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
数据结构的题目

#include<stdio.h>
#include<malloc.h>
#define MAXLEN 100
typedef char DataType;

typedef struct 
{
        DataType data[MAXLEN];
        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[i]=a[i];
                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[i-1];
                return 1;
        }
}


//按值查找
int Locate(SeqList *L,DataType x)
{
        int i=0;
        while(i<L->Length && L->data[i]!=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[i-1]=x;
                L->Length++;
                return 1;
        }
        for(j=L->Length-1;j>=i-1;j--)
        {
                L->data[j+1]=L->data[j];
                L->data[i-1]=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[i-1];
        for(j=i;j<L->Length;j++)
        {
                L->data[j-1]=L->data[j];
                L->Length--;
                return 1;
        }
}


//输出
void DispList(SeqList *L)
{
        int i;
        for(i=0;i<L->Length;i++)
        {
                printf("%5c",L->data[i]);
        }
}

int getLength(SeqList *L)
{
        return(L->Length);
}


 
void main()
{

SeqList *L;
char a[5]={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);

}
最佳答案
2021-10-22 22:19:08
#include<stdio.h>
#include<malloc.h>
#define MAXLEN 100
typedef char DataType;

typedef struct 
{
        DataType data[MAXLEN];
        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[i]=a[i];
                (*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[i-1];
                return 1;
        }
}


//按值查找
int Locate(SeqList **L,DataType x)
{
        int i=0;
        while(i<(*L)->Length && (*L)->data[i]!=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[i]=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[j];
                (*L)->data[j]=(*L)->data[i];
                                (*L)->data[i]=tmp;
                        }
                        (*L)->data[i]=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[i-1];
        for(j=i;j<(*L)->Length;j++)
        {
                (*L)->data[j-1]=(*L)->data[j];
                
               
        }
                
                (*L)->Length--;
                return 1;
}


//输出
void DispList(SeqList **L)
{
        int i;
        for(i=0;i<(*L)->Length;i++)
        {
                printf("%5c",(*L)->data[i]);
        }
}

int getLength(SeqList **L)
{
        return((*L)->Length);
}


 
void main()
{

SeqList *L=NULL;
char a[5]={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();
}

这是要求

这是要求
dd18b3c780589ada60173039829867f.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-22 20:43:14 | 显示全部楼层
到处都是毛病,可以重写了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-22 21:30:10 | 显示全部楼层
本帖最后由 jhq999 于 2021-10-22 21:32 编辑
#include<stdio.h>
#include<malloc.h>
#define MAXLEN 100
typedef char DataType;

typedef struct 
{
        DataType data[MAXLEN];
        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[i]=a[i];
                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[i-1];
                return 1;
        }
}


//按值查找
int Locate(SeqList * &L,DataType x)
{
        int i=0;
        while(i<L->Length && L->data[i]!=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[i]=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[j];
                L->data[j]=L->data[i];
                                L->data[i]=tmp;
                        }
                        L->data[i]=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[i-1];
        for(j=i;j<L->Length;j++)
        {
                L->data[j-1]=L->data[j];
                
               
        }
                
                L->Length--;
                return 1;
}


//输出
void DispList(SeqList * &L)
{
        int i;
        for(i=0;i<L->Length;i++)
        {
                printf("%5c",L->data[i]);
        }
}

int getLength(SeqList * &L)
{
        return(L->Length);
}


 
void main()
{

SeqList *L=NULL;
char a[5]={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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-22 21:58:18 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-22 22:04:54 | 显示全部楼层
本帖最后由 jhq999 于 2021-10-22 22:07 编辑


编译错误输出是什么?
无标题.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-22 22:06:01 | 显示全部楼层
jhq999 发表于 2021-10-22 22:04
编译错误输出是什么?

[Error] expected ';', ',' or ')' before '&' token
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-22 22:11:57 | 显示全部楼层
c不支持引用,我再改改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-22 22:15:51 | 显示全部楼层
jhq999 发表于 2021-10-22 22:11
c不支持引用,我再改改

好的,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-22 22:19:08 | 显示全部楼层    本楼为最佳答案   
#include<stdio.h>
#include<malloc.h>
#define MAXLEN 100
typedef char DataType;

typedef struct 
{
        DataType data[MAXLEN];
        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[i]=a[i];
                (*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[i-1];
                return 1;
        }
}


//按值查找
int Locate(SeqList **L,DataType x)
{
        int i=0;
        while(i<(*L)->Length && (*L)->data[i]!=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[i]=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[j];
                (*L)->data[j]=(*L)->data[i];
                                (*L)->data[i]=tmp;
                        }
                        (*L)->data[i]=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[i-1];
        for(j=i;j<(*L)->Length;j++)
        {
                (*L)->data[j-1]=(*L)->data[j];
                
               
        }
                
                (*L)->Length--;
                return 1;
}


//输出
void DispList(SeqList **L)
{
        int i;
        for(i=0;i<(*L)->Length;i++)
        {
                printf("%5c",(*L)->data[i]);
        }
}

int getLength(SeqList **L)
{
        return((*L)->Length);
}


 
void main()
{

SeqList *L=NULL;
char a[5]={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();
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-22 22:31:51 | 显示全部楼层

为什么要用指向指针的指针?我开始写的代码算法是书上的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-22 22:45:01 | 显示全部楼层
因为形参和实参的问题,指针也是实参变量,如果直接代入,它不会随着形参改变而改变。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-22 22:51:04 | 显示全部楼层
jhq999 发表于 2021-10-22 22:45
因为形参和实参的问题,指针也是实参变量,如果直接代入,它不会随着形参改变而改变。

明白了,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-22 22:52:25 | 显示全部楼层
最强废铁h 发表于 2021-10-22 22:31
为什么要用指向指针的指针?我开始写的代码算法是书上的

我才发现我改多了,关于形参实参只改
void CreatSeqList(SeqList ** L,DataType a[],int n)
就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 17:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表