云枭女 发表于 2021-4-13 09:17:08

线性表

//把La中奇数位置的元素传给Lc,偶数传给Lb.
//这个为什么没有结果呢?
#include<stdio.h>
#include<stdlib.h>

#define OK 1
#define ERROR 0
#define OVERFLOW -2

typedef int ElemType;
typedef int Status;

const LIST_INIT_SIZE=100;
const LISTINCREMENT=100;
typedef struct
{
        ElemType *elem;
        int length;
        int listsize;
}SqList;

Status ListInit(SqList *L)//构造一个空的线性表
{
        L->elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
        if(!L->elem)
        {
                exit(OVERFLOW);
        }
        L->length=0;
        L->listsize=LIST_INIT_SIZE;
       
        return OK;       
}
Status GetElem1(SqList L)//得到L中位置i上的元素e并返回
{
        int i;
        ElemType *e;
        for(i=0;i<L.length;i++)
        {
                if(i%2==0)
                {
                        *e=L.elem;
                }
        }
}
Status GetElem2(SqList L)//得到L中位置i上的元素e并返回
{
        int i;
        ElemType *e;
        for(i=0;i<L.length;i++)
        {
                if(i%2!=0)
                {
                        *e=L.elem;
                }
        }
}

int main()
{
        int i;
        SqList *Lb,*Lc;
        SqList La={1,2,3,4,5,6,7};
        ListInit(Lb);
        ListInit(Lc);
        Lb=GetElem1(La);
        Lc=GetElem2(La);
       
        for(i=0;i<7;i++)
                printf("%d",Lb->elem);
                printf("%d",Lc->elem);
       
        return OK;
       
        return OK;
}

yuxijian2020 发表于 2021-4-13 09:25:53

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

#define OK 1
#define ERROR 0
#define OVERFLOW -2

typedef int ElemType;
typedef int Status;

const LIST_INIT_SIZE=100;
const LISTINCREMENT=100;
typedef struct
{
      ElemType *elem;
      int length;
      int listsize;
}SqList;

Status ListInit(SqList *L)//构造一个空的线性表
{
      L->elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
      if(!L->elem)
      {
                exit(OVERFLOW);
      }
      L->length=0;
      L->listsize=LIST_INIT_SIZE;
      
      return OK;      
}
Status GetElem1(SqList L)//得到L中位置i上的元素e并返回    --->你返回啥了?啥也没返回啊...
{
      int i;
      ElemType *e;
      for(i=0;i<L.length;i++)
      {
                if(i%2==0)
                {
                        *e=L.elem;
                }
      }
}
Status GetElem2(SqList L)//得到L中位置i上的元素e并返回    --->   和上面一样,啥也没返回
{
      int i;
      ElemType *e;
      for(i=0;i<L.length;i++)
      {
                if(i%2!=0)
                {
                        *e=L.elem;
                }
      }
}

int main()
{
      int i;
      SqList *Lb,*Lc;
      SqList La={1,2,3,4,5,6,7};
      ListInit(Lb);
      ListInit(Lc);
      Lb=GetElem1(La);   //   --->   这里   GetElem1 和GetElem2返回值都是intLb和Lc是什么类型?
      Lc=GetElem2(La);
      
      for(i=0;i<7;i++)
                printf("%d",Lb->elem);
                printf("%d",Lc->elem);
      
      return OK;
      
      return OK;
}

云枭女 发表于 2021-4-13 11:47:34

yuxijian2020 发表于 2021-4-13 09:25


*e=L.elem
emmm..这个不算返回吗?我才开始写,有点迷{:9_234:}

yuxijian2020 发表于 2021-4-13 13:03:21

Status GetElem2(SqList L)
{
      int i;
      ElemType *e;                     //这里定义了局部变量
      for(i=0;i<L.length;i++)
      {
                if(i%2!=0)
                {
                        *e=L.elem;   //这里是对局部变量赋值
                }
      }
}                                             //函数结束时,局部变量e被系统回收
//出了函数以后函数里的e已经消失了!!!       

云枭女 发表于 2021-4-13 13:12:25

yuxijian2020 发表于 2021-4-13 13:03


Status GetElem2(SqList L)
{
      int i;
      ElemType *e;                     //这里定义了局部变量
      for(i=0;i<L.length;i++)
      {
                if(i%2!=0)
                {
                        *e=L.elem;   //这里是对局部变量赋值
                }
      }
return e;//再写一个这个就可以了吗?
}                                             //函数结束时,局部变量e被系统回收
//出了函数以后函数里的e已经消失了!!!

yuxijian2020 发表于 2021-4-13 13:17:21

云枭女 发表于 2021-4-13 13:12
Status GetElem2(SqList L)
{
      int i;


你的返回值是Status也就是int你这个函数返回的是一个成功与否的状态
不能return e

yuxijian2020 发表于 2021-4-13 13:22:56

//就按照你的思路来说,函数应该这么改
Status GetElem2(SqList L, ElemType* e)//返回值是成功与否的状态,那么参数就要加一个返回值
{
      int i;
      //ElemType *e;                     这里改为传入参数
      for(i=0;i<L.length;i++)
      {
                if(i%2!=0)
                {
                        *e=L.elem;   //这里是对返回值赋值
                        return OK;         //找到值就返回成功
                }
      }
        return Error;                        //循环结束没有赋值成功则返回错误
}
页: [1]
查看完整版本: 线性表