学习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
输出:

OfGetEM
「已注销」 回复贵阳老马马善福专业维修游泳池堵漏防水工程: 哦哦哦,了解
10 个月之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 while(p && j p = p->next; 这些代码都乱套了。请你先用markdown格式化好代码
10 个月之前 回复

1个回答

#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指针还需要在学习和理解一下。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问