| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 693 人关注过本帖
标题:问个问题..请帮助!
只看楼主 加入收藏
Buger
Rank: 1
等 级:新手上路
帖 子:60
专家分:7
注 册:2013-3-20
结帖率:84.62%
收藏
已结贴  问题点数:20 回复次数:9 
问个问题..请帮助!
程序代码:
#include <stdio.h>
#include <malloc.h>

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

int CreatLinkList(LinkList L)
{
    LNode *p, *r;
    L = (LinkList)malloc(sizeof(LNode));
    p = r = L;
    printf("请输入创建的长度\n");
    int n, i;
    scanf("%d", &n);
    printf("请输入数字\n");
    for(i = 1; i <= n; i++)
    {
        p = (LNode *)malloc(sizeof(LNode));
        scanf("%d", &p -> data);
        r -> next = p;
        r = p;
    }
    r -> next = NULL;
}

void getElem(LinkList L)
{
    LNode *p = L;
    int j = 0, i;
    printf("请输入要取的元素序号\n");
    scanf("%d", &i);
    while(j < i)
    {
        L = L -> next;
        j++;
    }
    if(j == i) printf("所取的元素是%d\n", p -> data);
}

int main()
{
    LinkList L;
    //InitLinkList(L);   //初始化
    CreatLinkList(L);  //创建
    getElem(L);        //取值
    //locateElem(&L);     //查找
    //listInsert(&L);     //插入
    //listDelete(&L);     //删除
    //listDestroy(&L);    //销毁
    return 0;
}
请问怎么错我了...我用的尾插法建立的...求懂的朋友帮忙!
搜索更多相关主题的帖子: color 8000 
2013-05-03 11:30
Buger
Rank: 1
等 级:新手上路
帖 子:60
专家分:7
注 册:2013-3-20
收藏
得分:0 
,,
2013-05-03 12:15
笑傲
Rank: 8Rank: 8
来 自:迪拜
等 级:蝙蝠侠
威 望:5
帖 子:223
专家分:856
注 册:2013-3-9
收藏
得分:20 
回复 楼主 Buger
#include <stdio.h>
#include <malloc.h>

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

void CreatLinkList(LinkList L)               //既然不返回值就设为void
{
    LNode *p, *r;
    p = r = L;
    printf("请输入创建的长度\n");
    int n, i;
    scanf("%d", &n);
    printf("请输入数字\n");
    for(i = 1; i <= n; i++)
    {
        p = (LNode *)malloc(sizeof(LNode));
        scanf("%d", &p -> data);
        r -> next = p;
        r = p;
    }
    r -> next = NULL;
}

void getElem(LinkList L)
{
    LNode *p = L;
    int j = 0, i;
    printf("请输入要取的元素序号\n");
    scanf("%d", &i);
    while(j < i)
    {
        p = p -> next;                  //这里是p
        j++;
    }
    if(j == i) printf("所取的元素是%d\n", p -> data);
}

int main()
{
    LinkList L = (LinkList)malloc(sizeof(LNode));               //应该要在这里初始化,
    //InitLinkList(L);   //初始化
    CreatLinkList(L);  //创建
    getElem(L);        //取值
    //locateElem(&L);     //查找
    //listInsert(&L);     //插入
    //listDelete(&L);     //删除
    //listDestroy(&L);    //销毁
    return 0;
}

练就一身本领,只为笑傲江湖!
2013-05-03 13:30
Buger
Rank: 1
等 级:新手上路
帖 子:60
专家分:7
注 册:2013-3-20
收藏
得分:0 
程序代码:
但是我这样又为什么错了?
#include <stdio.h>
#include <malloc.h>

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

void InitLinkList(LinkList L)
{
    L = (LinkList)malloc(sizeof(LNode));
    if(!L) printf("初始化失败,内存不足");
    else
    {
        L -> next = NULL;
        printf("初始化成功\n");
    }
}

void CreatLinkList(LinkList L)
{
    LNode *p, *r;
    p = r = L;
    printf("请输入创建的长度\n");
    int n, i;
    scanf("%d", &n);
    printf("请输入数字\n");
    for(i = 1; i <= n; i++)
    {
        p = (LNode *)malloc(sizeof(LNode));
        scanf("%d", &p -> data);
        r -> next = p;
        r = p;
    }
    r -> next = NULL;
}

void getElem(LinkList L)
{
    LNode *p = L;
    int j = 0, i;
    printf("请输入要取的元素序号\n");
    scanf("%d", &i);
    while(j < i)
    {
        p = p -> next;
        j++;
    }
    if(j == i) printf("所取的元素是%d\n", p -> data);
}

int main()
{
    //LinkList L = (LinkList)malloc(sizeof(LNode));
    LinkList L;
    InitLinkList(L);   //初始化
    CreatLinkList(L);  //创建
    getElem(L);        //取值
    //locateElem(&L);     //查找
    //listInsert(&L);     //插入
    //listDelete(&L);     //删除
    //listDestroy(&L);    //销毁
    return 0;
}
2013-05-03 13:59
Buger
Rank: 1
等 级:新手上路
帖 子:60
专家分:7
注 册:2013-3-20
收藏
得分:0 
在么?
2013-05-03 14:26
Buger
Rank: 1
等 级:新手上路
帖 子:60
专家分:7
注 册:2013-3-20
收藏
得分:0 
还有人?
2013-05-03 15:14
笑傲
Rank: 8Rank: 8
来 自:迪拜
等 级:蝙蝠侠
威 望:5
帖 子:223
专家分:856
注 册:2013-3-9
收藏
得分:0 
指针本身也是一个变量。将指针传递给函数以后,函数里的指针和原指针是占用不同内存的两个变量,所以改变函数里的指针不会影响函数外的指针。
如果原指针已被初始化,传递给函数后,内外两个指针仍然是两个不同的变量,但是他们的值是相同的,即两个指针都指向同一个内存地址,所以在函数内使用*(引用)操作符对指向的内存地址赋值,就实现了对函数外指针所指向的内存地址的值的改变,因为内外两个指针都指向同一内存地址。
如果试图通过函数对指针赋值,则可以对函数加入返回值,如:
Node *func(Node *ptr)
 {return ptr = new Node();}   
 Node *p;
  p = func(p);

[ 本帖最后由 笑傲 于 2013-5-3 16:25 编辑 ]

练就一身本领,只为笑傲江湖!
2013-05-03 16:22
Buger
Rank: 1
等 级:新手上路
帖 子:60
专家分:7
注 册:2013-3-20
收藏
得分:0 
以下是引用笑傲在2013-5-3 16:22:43的发言:

指针本身也是一个变量。将指针传递给函数以后,函数里的指针和原指针是占用不同内存的两个变量,所以改变函数里的指针不会影响函数外的指针。
如果原指针已被初始化,传递给函数后,内外两个指针仍然是两个不同的变量,但是他们的值是相同的,即两个指针都指向同一个内存地址,所以在函数内使用*(引用)操作符对指向的内存地址赋值,就实现了对函数外指针所指向的内存地址的值的改变,因为内外两个指针都指向同一内存地址。  
如果试图通过函数对指针赋值,则可以对函数加入返回值,如:
Node *func(Node *ptr)
 {return ptr = new Node();}   
 Node *p;
  p = func(p);

能用你的方法帮我改正确?谢谢!
2013-05-03 18:02
笑傲
Rank: 8Rank: 8
来 自:迪拜
等 级:蝙蝠侠
威 望:5
帖 子:223
专家分:856
注 册:2013-3-9
收藏
得分:0 
#include <stdio.h>
#include <malloc.h>

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

LinkList InitLinkList(LinkList L)
{
    L = (LinkList)malloc(sizeof(LNode));
    if(!L) printf("初始化失败,内存不足");
    else
    {
        L -> next = NULL;
        printf("初始化成功\n");
    }
    return L;
}

void CreatLinkList(LinkList L)
{
    LNode *p, *r;
    p = r = L;
    printf("请输入创建的长度\n");
    int n, i;
    scanf("%d", &n);
    printf("请输入数字\n");
    for(i = 1; i <= n; i++)
    {
        p = (LNode *)malloc(sizeof(LNode));
        scanf("%d", &p -> data);
        r -> next = p;
        r = p;
    }
    r -> next = NULL;
}

void getElem(LinkList L)
{
    LNode *p = L;
    int j = 0, i;
    printf("请输入要取的元素序号\n");
    scanf("%d", &i);
    while(j < i)
    {
        p = p -> next;
        j++;
    }
    if(j == i) printf("所取的元素是%d\n", p -> data);
}

int main()
{
    //LinkList L = (LinkList)malloc(sizeof(LNode));
    LinkList L;
    L = InitLinkList(L);   //初始化
    CreatLinkList(L);  //创建
    getElem(L);        //取值
    //locateElem(&L);     //查找
    //listInsert(&L);     //插入
    //listDelete(&L);     //删除
    //listDestroy(&L);    //销毁
    return 0;
}

练就一身本领,只为笑傲江湖!
2013-05-03 18:40
笑傲
Rank: 8Rank: 8
来 自:迪拜
等 级:蝙蝠侠
威 望:5
帖 子:223
专家分:856
注 册:2013-3-9
收藏
得分:0 
回复 8楼 Buger
程序代码:
#include <stdio.h>
#include <malloc.h>

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

void InitLinkList(LinkList L)
{
    //L = (LinkList)malloc(sizeof(LNode));
    if(!L) printf("初始化失败,内存不足");
    else
    {
        L -> next = NULL;
        printf("初始化成功\n");
    }
}

void CreatLinkList(LinkList L)
{
    LNode *p, *r;
    p = r = L;
    printf("请输入创建的长度\n");
    int n, i;
    scanf("%d", &n);
    printf("请输入数字\n");
    for(i = 1; i <= n; i++)
    {
        p = (LNode *)malloc(sizeof(LNode));
        scanf("%d", &p -> data);
        r -> next = p;
        r = p;
    }
    r -> next = NULL;
}

void getElem(LinkList L)
{
    LNode *p = L;
    int j = 0, i;
    printf("请输入要取的元素序号\n");
    scanf("%d", &i);
    while(j < i)
    {
        p = p -> next;
        j++;
    }
    if(j == i) printf("所取的元素是%d\n", p -> data);
}

int main()
{
    LinkList L = (LinkList)malloc(sizeof(LNode));
    InitLinkList(L);   //初始化
    CreatLinkList(L);  //创建
    getElem(L);        //取值
    //locateElem(&L);     //查找
    //listInsert(&L);     //插入
    //listDelete(&L);     //删除
    //listDestroy(&L);    //销毁
    return 0;
}

或者这样,都是直接在你的程序上改的

练就一身本领,只为笑傲江湖!
2013-05-03 18:53
快速回复:问个问题..请帮助!
数据加载中...
 
   



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

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