标题:逐个输出单链表中的数据元素
只看楼主
如果我是在想
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2012-9-21
结帖率:33.33%
已结贴  问题点数:10 回复次数:9 
逐个输出单链表中的数据元素
逐个输出单链表中的数据元素,,不知为何不能得到想要的,求帮助!!!!!!
#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
    int data;
    struct Node *next;
} SLNode;
void ListInitiate(SLNode *head)
{
    head = (SLNode *)malloc(sizeof(SLNode));
    head->next = NULL;
};
 int  ListInsert(SLNode *head,int i,int x)
{
    SLNode *p, *q;
    int j;
    p =head;
    j =-1;
     while(p->next != NULL && j<i-1)
     {
        p = p->next;
        j++;
     }
    if(j != i-1)
    {
        printf("插入的位置参数有错\n");
    return 0;
    }
    q = (SLNode *)malloc(sizeof(SLNode));
    q->data =x;
    q->next = p->next;
    p->next =q;
    return 1;
};
int ListGet(SLNode *head,int i,int *x)
{
    SLNode *p;
    int j;
    p =head;
    j = -1;
    while(p->next != NULL && j<i-1)
     {
        p = p->next;
        j++;
     }
    if(j != i)
    {
        printf("取元素的位置参数有错\n");
    return 0;
    }
    *x = p->data;
    return 1;
};
int main(int argc, char* argv[])
{
    SLNode *head;
    int x,i;
    ListInitiate(head);
    for(i=0;i<10;i++)
        ListInsert(head,i,i+1);
    for(i=0;i<10;i++)
    {
        ListGet(head,i,&x);
        printf("%d ",x);
    }
    printf("Hello World!\n");
    return 0;
}
编译通过,但是想不明白为什么得不到正确的结果,,,实验目的是为了逐个输出单链表中所有的数据元素
搜索更多相关主题的帖子: 元素 include next 
2012-09-21 22:47
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
得分:10 
这个函数就有错了,想让入参指向分配的内存,就是要改变入参的值,这样要传指针head的地址
void ListInitiate(SLNode *head)

总有那身价贱的人给作业贴回复完整的代码
2012-09-21 23:35
如果我是在想
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2012-9-21
得分:0 
不懂,问下,如何返回指针head的地址?在我打的程序中把void ListInitiate(SLNode *head)
{
    head = (SLNode *)malloc(sizeof(SLNode));
    head->next = NULL;
};
中的void改为SLNode *ListInitiate(SLNode *head),并在后面补上return head也不行啊。无法返回指针head的地址,,
2012-09-22 16:55
青春无限
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江苏
等 级:贵宾
威 望:24
帖 子:3450
专家分:19340
注 册:2012-3-31
得分:0 
来学习

学 会看代码…学习写程序…学会搞开发…我的目标!呵呵是不是说大话啊!!一切皆可能
2012-09-22 17:02
如果我是在想
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2012-9-21
得分:0 
更坑爹的是,我试过用指向指针的指针,如void ListInitiate(SLNode **head)
{
    *head = (SLNode *)malloc(sizeof(SLNode));
    (*head)->next = NULL;
};
在主函数中ListInitiate(&head);还是不行


2012-09-22 17:11
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
得分:0 
把你改过的代码贴出来

总有那身价贱的人给作业贴回复完整的代码
2012-09-22 18:19
如果我是在想
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2012-9-21
得分:0 
#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
    int data;
    struct Node *next;
} SLNode;
SLNode *ListInitiate(SLNode *head)
{
    head = (SLNode *)malloc(sizeof(SLNode));
    head->next = NULL;
    return head;
};
int  ListInsert(SLNode *head,int i,int x)
{
    SLNode *p, *q;
    int j;
    p =head;
    j =-1;
     while(p->next != NULL && j<i-1)
     {
        p = p->next;
        j++;
     }
    if(j != i-1)
    {
        printf("插入的位置参数有错\n");
    return 0;
    }
    q = (SLNode *)malloc(sizeof(SLNode));
    q->data =x;
    q->next = p->next;
    p->next =q;
    return 1;
};
int ListGet(SLNode *head,int i,int *x)
{
    SLNode *p;
    int j;
    p =head;
    j = -1;
    while(p->next != NULL && j<i-1)
     {
        p = p->next;
        j++;
     }
    if(j != i)
    {
        printf("取元素的位置参数有错\n");
    return 0;
    }
    *x = p->data;
    return 1;
};
int main(int argc, char* argv[])
{
    SLNode *head;
    int x,i;
    ListInitiate(head);
    for(i=0;i<10;i++)
        ListInsert(head,i,i+1);
    for(i=0;i<10;i++)
    {
        ListGet(head,i,&x);
        printf("%d ",x);
    }
    printf("Hello World!\n");
    return 0;
}还是说我的head没定义,我调试过了,确实,head开始的时候是有地址的,但后来就没有地址了
求解释
2012-09-22 19:13
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
得分:0 
你的错误和我猜想的一样,你初始化函数返回值返回给谁了?

总有那身价贱的人给作业贴回复完整的代码
2012-09-22 20:00
如果我是在想
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2012-9-21
得分:0 
GOOD JOB!主函数中定义一个SLNode* a,用来接收运行ListInitiate()后返回的值,再把后面ListGet(head,i,&x);
ListInsert(head,i,i+1);的head改为a,问题就引刃而解了(还有一点ListGet()中有一处错误,应改为while(p->next != NULL && j<i)谢谢你的提醒咯
2012-09-22 23:05
ZQVVVVV
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2016-1-8
得分:0 
看不到输出元素的语句啊
2016-09-30 10:09



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




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

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