「已注销」 2019-10-13 19:59 采纳率: 0%
浏览 319

学习C语言版数据结构(严蔚敏版)时,按位获取单链表的值失败,怎么解决。

#include

#include
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode, *LinkList;

void createList(LinkList L, int n);
int getElem(LinkList L, int i, ElemType *e);

int main(){
LinkList L;
createList(L, 4);

ElemType *e;
getElem(L, 2, e);
printf("%d", e);
return 0;

}

void createList(LinkList L, int n){
LinkList head, p, q;
int i, a;
head = NULL;//头指针初始为空
for(i=1; i<=n; i++){
scanf("%d",&a);
p=(LinkList)malloc(sizeof(struct LNode));
p->data=a;//将数据存储到当前结点的data域中
p->next=NULL;//设置当前结点的后继指针指向空,也就是当前结点的下一个结点为空
if(head==NULL)
head=p;
else
q->next=p;
q=p;
}//for
}//createList

int getElem(LinkList L, int i, ElemType *e){
LinkList p;
int j = 1;
p = L->next;
while(p && j p = p->next;
++j;
}
if(!p || j>i) return -1;
e = p->data;
return 0;
}


报错:48 4 F:\数据结构\作业\p29_2.8.c[Warning] assignment makes pointer from integer without a cast

输入:
1
2
3
4
输出:

  • 写回答

1条回答 默认 最新

  • leishapolang33 2019-10-13 22:05
    关注
    #include <stdio.h>
    
    typedef int ElemType;
    typedef struct LNode{
        ElemType data;
        struct LNode *next;
    }LNode, *LinkList;
    
    LNode* createList(int n);
    int getElem(LinkList L, int i);
    
    void print(LinkList l){
        LinkList head = l->next;
        while (head != NULL) {
            printf("%d ", head->data);
            head = head->next;
        }
        printf("\n");
    }
    int main(){
        LinkList L = NULL;
        L =(LinkList)malloc(sizeof(struct LNode));
        L->data = 0;
        L->next = createList(4);
        printf("%d", getElem(L, 2));
        return 0;
    }
    
    LNode* createList(int n){
        LinkList head, p, q;
        int i, a;
        head = NULL;//头指针初始为空
        for(i=1; i<=n; i++){
            scanf("%d",&a);
            p=(LinkList)malloc(sizeof(struct LNode));
            p->data=a;//将数据存储到当前结点的data域中
            p->next=NULL;//设置当前结点的后继指针指向空,也就是当前结点的下一个结点为空
            if(head==NULL)
                head=p;
            else
                q->next=p;
            q=p;
        }//for
        return head;
    }//createList
    
    int getElem(LinkList L, int i){
        LinkList p;
        int j = 1;
        p = L->next;
        while(p && (j<i)){
            p = p->next;
            ++j;
        }
        if(!p || j>i){
            return -1;
        }
        return p->data;
    
    }
    
    

    改了一下代码,基本能运行,但是还有内存泄漏和不严谨的地方。原代码创建list和打印列表函数都存在问题,创建代码中并没有实际创建。打印列表中循环判断条件不正确。
    综合判断,对于c指针还需要在学习和理解一下。

    评论

报告相同问题?

悬赏问题

  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥15 state显示变量是字符串形式,但是仍然红色,无法引用,并显示类型不匹配
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波