标题:求助各位大神帮我修改程序。数据结构删除线性表中等于x的元素
只看楼主
龙岩花界
Rank: 2
等 级:论坛游民
帖 子:41
专家分:27
注 册:2018-10-18
结帖率:25%
 问题点数:0 回复次数:9 
求助各位大神帮我修改程序。数据结构删除线性表中等于x的元素
#include<iostream.h>
#include<stdlib.h>
#define MaxSize 100
typedef int ElemType;
typedef struct
{
     ElemType  data[MaxSize];
     int length;
}SqList;
void InitList(SqList *&L)
{   L=(SqList *)malloc(sizeof(SqList));
    L->length=0;
}
void GreateList(SqList *&L,int n,ElemType a[])
{
    int i=0,k=0;
    L=(SqList *)malloc(sizeof(SqList));
    while(i<n)
    {L->data=a[i];
     k++;i++;
    }
    L->length=k;
}
void delnodel(SqList *&L,ElemType x)
{
    int k=0,i;
    for(i=0;i<L->length;i++)
        if(L->data[i]!=x)
        {
            L->data[i]=L->data[k];
            k++;
        }
        L->length=k;
}
void DispList(SqList *L)
{
    for(int i=0;i<L->length;i++)
        cout<<L->data[i]<<endl;
}
void main()
{
     SqList *L;
     InitList(L);
     int i,n,x;
     int a=new int[];
     cin>>n;
     cout<<"请输入数组a[]中的元素"<<endl;
     for(i=1;i<n;i++)
     {
         cin>>a[i];
     }
     GreateList(L,a,n);
     cin>>x;
     delnodel(L,x);
     cout<<endl;
     DispList(L);
     cout<<endl;
}
已经错到我改不下去了,我的程序大致是初始化线性表,然后构建线性表,再删除x的程序,再就是输出线性表,主函数调用各个函数。我是在vc++6.0上做的,大神们复制下我的程序帮忙修改下,感激不尽!
搜索更多相关主题的帖子: 线性表 int data length void 
2018-10-30 21:29
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
修改的注释掉,有些可能是编译器问题。
//#include <iostream.h>
#include <stdlib.h>
#include <iostream>
using namespace std;

#define MaxSize 100

typedef int ElemType;

typedef struct
{
    ElemType  data[MaxSize];
    int length;
} SqList;

//void InitList(SqList *&L)
//{
//    L=(SqList *)malloc(sizeof(SqList));
//    L->length=0;
//}

//void GreateList(SqList *&L,int n,ElemType a[])
void GreateList(SqList **L,int n,ElemType a[])
{
    int i=0,k=0;
    //L=(SqList *)malloc(sizeof(SqList));
    *L=(SqList *)malloc(sizeof(SqList));
    while(i<n)
    {
        //L->data=a[i];
        (*L)->data[i]=a[i];
        k++;
        i++;
    }
    //L->length=k;
    (*L)->length=k;
}

//void delnodel(SqList *&L,ElemType x)
void delnodel(SqList **L,ElemType x)
{
    int k=0,i;
    //for(i=0; i<L->length; i++)
    for(i=0; i<(*L)->length; i++)
    {
        //if(L->data[i]!=x)
        if((*L)->data[i]!=x)
        {
            //L->data[i]=L->data[k];
            (*L)->data[k]=(*L)->data[i];
            k++;
        }
    }
    //L->length=k;
    (*L)->length=k;
}

void DispList(SqList *L)
{
    for(int i=0; i<L->length; i++)
        cout<<L->data[i]<<endl;
}

//void main()
int main(void)
{
    SqList *L;
    //InitList(L);
    int i,n,x;
    //int a=new int[];
    //cin>>n;
    cin>>n;
    int *a=new int[n];
    cout<<"请输入数组a[]中的元素"<<endl;
    //for(i=1; i<n; i++)
    for(i=0; i<n; i++)
    {
        cin>>a[i];
    }
    //GreateList(L,a,n);
    GreateList(&L,n,a);
    cin>>x;
    //delnodel(L,x);
    delnodel(&L,x);
    cout<<endl;
    DispList(L);
    cout<<endl;
    return 0;
}

[此贴子已经被作者于2018-10-31 10:06编辑过]

2018-10-31 10:05
龙岩花界
Rank: 2
等 级:论坛游民
帖 子:41
专家分:27
注 册:2018-10-18
得分:0 
//void GreateList(SqList *&L,int n,ElemType a[])
void GreateList(SqList **L,int n,ElemType a[])
//L->data=a[i];
(*L)->data[i]=a[i];
我的表示方法是我按照教科书上来的,为什么有问题
//GreateList(L,a,n);
    GreateList(&L,n,a);
    cin>>x;
    //delnodel(L,x);
    delnodel(&L,x);
然后大佬可以给我解释一下引用函数为什么是这样调用参数的吗?
cin>>n;
int *a=new int[n];
这样子的数组存放是怎样的一种解释?
2018-10-31 10:33
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用龙岩花界在2018-10-31 10:33:09的发言:

//void GreateList(SqList *&L,int n,ElemType a[])
void GreateList(SqList **L,int n,ElemType a[])
//L->data=a;
(*L)->data=a;
我的表示方法是我按照教科书上来的,为什么有问题

可能是所用编译器不同,我这不支持如 f(int &a) 的表达形式,故改为f(int *a)的形式。

2018-10-31 10:44
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用龙岩花界在2018-10-31 10:33:09的发言:
//GreateList(L,a,n);
    GreateList(&L,n,a);
    cin>>x;
    //delnodel(L,x);
    delnodel(&L,x);
然后大佬可以给我解释一下引用函数为什么是这样调用参数的吗?

同上一个问题,如f(int **a),调用时int *a; f(&a);
2018-10-31 10:46
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用龙岩花界在2018-10-31 10:33:09的发言:
cin>>n;
int *a=new int[n];
这样子的数组存放是怎样的一种解释?

a指针指向一个分配n个int元素空间的首地址
相当:int *a = (int *)malloc(n*sizeof(int))
2018-10-31 10:51
龙岩花界
Rank: 2
等 级:论坛游民
帖 子:41
专家分:27
注 册:2018-10-18
得分:0 
回复 4楼 吹水佬
我想这跟表达形式应该没有太大关系,因为之前我一直都是这样编译的,在我的编译器上运行的也是正常的。&L表达的似乎是一种输出型,调用的时候加&,应该表示的是这个线性表输出吧。然后我不懂得是为什么需要在L->data[i]的L前面加*;你改的我在我的编译器上运行是正确的。我就是想清楚的知道主函数调用函数,参数有的为什么加&,然后*改了之后,几个分函数为什么就没有问题了。大佬,求详解

[此贴子已经被作者于2018-10-31 13:50编辑过]

2018-10-31 13:35
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
回复 7楼 龙岩花界
此问题在4楼已提到,你用的编译器可能是VC或VS,有些东西是非标准的。
L声明的是指针,作为函数的“输入/输出”参数,就是指针的指针(**L)。
&L作为函数输入的参数,是变量L自身的地址。
在函数内部,(*L)引用L指针指向的地址。
或者函数这样声明会更简明些:
SqList *GreateList(int n,ElemType a[])
如:
#include <stdlib.h>
#include <iostream>
using namespace std;

#define MaxSize 100

typedef int ElemType;

typedef struct
{
    ElemType  data[MaxSize];
    int length;
} SqList;

SqList *GreateList(int n,ElemType a[])
{
    int i=0,k=0;
    SqList *L = (SqList *)malloc(sizeof(SqList));
    while(i<n)
    {
        L->data[i]=a[i];
        k++;
        i++;
    }
    L->length=k;
    return L;
}

void delnodel(SqList *L,ElemType x)
{
    int k=0,i;
    for(i=0; i<L->length; i++)
    {
        if(L->data[i]!=x)
        {
            L->data[k]=L->data[i];
            k++;
        }
    }
    L->length=k;
}

void DispList(SqList *L)
{
    for(int i=0; i<L->length; i++)
        cout<<L->data[i]<<endl;
}

int main(void)
{
    int n;
    cin>>n;
    int *a=new int[n];
    cout<<"请输入数组a[]中的元素"<<endl;
    for(int i=0; i<n; i++)
    {
        cin>>a[i];
    }
    SqList *L = GreateList(n,a);
    int x;
    cin>>x;
    delnodel(L,x);
    cout<<endl;
    DispList(L);
    cout<<endl;
    return 0;
}
2018-10-31 15:02
龙岩花界
Rank: 2
等 级:论坛游民
帖 子:41
专家分:27
注 册:2018-10-18
得分:0 
回复 8楼 吹水佬
听了这些,还是有点感觉一头雾水,L,*L,**L的含义还是不清楚,再就是声明函数参数的表示,以及调用函数参数的表示。比如,主函数调用输入函数为什么用的&L,而输出直接用的L
2018-11-01 21:21
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
回复 9楼 龙岩花界
大概意思是这样:
#include <stdio.h>

int a = 123;

void fun(int **p)
{
    *p = &a;
}

int main(void)
{
    int *p=NULL;
    fun(&p);
    printf("%d\n", *p);
    return 0;
}

2018-11-02 05:07



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-490833-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.509832 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved