注册 登录
编程论坛 C++教室

一个指针数组,每个数组里的元素是指向一些链表的头结点

小小菜鸟蛋 发布于 2012-08-04 21:52, 3219 次点击
编写一个C++程序:定义一个指针数组,然后数组里面存放的是动态创建的一些链表的头结点地址,我编写的编译通不过,求各位大神帮帮忙,求指导。。
程序代码:
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
const int n = 5;

typedef struct LinkLNdoe
{
    int no;
    int Data;
    struct LinkLNode *next;
}LinkLNode,*LinkList;
LinkLNode *head,*end;

LinkLNode *Array_FirstLinkListCreat( LinkList &L,int m )
{
    int i = 0,j = 0;
    LinkLNode *Array[n+1];
    LinkLNode *p = NULL,*q = NULL;
    for( i = 1;i <= n;i++ )
    {
        p = q = l = (LinkLNode *)malloc(sizeof(LinkLNode));
        Array[i] = p;
        p->no = 1;
        head = end = p;
    }
    for( i = 1;i <= n;i++ )
    {
        for( j = 2;j <= m ;j++ )
        {
            q = l = (LinkLNode *)malloc(sizeof(LinkLNode));
            q->no = j;
            end->next = q;
            end = p = q;
            end->next =    NULL;
        }
    }
    return (Array[1]);
}

int main ()
{
    LinkList L;
    LinkLNode *p,*q;
    int m = 3;
    int i = 0,j = 0;
    p = Array_FirstLinkListCreat( L,m );
    system("pause");
    return 0;
}



20 回复
#2
zklhp2012-08-04 23:35
程序代码:


#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
const int n = 5;

typedef struct tagLinkLNdoe
{
    int no;
    int Data;
    struct tagLinkLNode *next;
}LinkLNode, *LinkList;
LinkLNode *head, *end;

LinkLNode *Array_FirstLinkListCreat(LinkList &l, int m)
{
    int i = 0,j = 0;
    LinkLNode *Array[n+1];
    LinkLNode *p = NULL, *q = NULL;
    for( i = 1;i <= n;i++ )
    {
        p = q = l = (LinkLNode *)malloc(sizeof(LinkLNode));
        Array[i] = p;
        p->no = 1;
        head = end = p;
    }
    for( i = 1;i <= n;i++ )
    {
        for( j = 2;j <= m ;j++ )
        {
            q = l = (LinkLNode *)malloc(sizeof(LinkLNode));
            q->no = j;
            end->next = (tagLinkLNode *)q;
            end = p = q;
            end->next =  NULL;
        }
    }
    return (Array[1]);
}

int main ()
{
    LinkList L;
    LinkLNode *p,*q;
    int m = 3;
    int i = 0,j = 0;
    p = Array_FirstLinkListCreat(L, m);
    system("pause");
    return 0;
}


我不会C++ 虽然能把它改成能编译过的但手段比较卑劣 期待大牛解答。。
#3
zklhp2012-08-04 23:37
很好奇这种东西在C++里怎么写 还是说 你写的这个本事就是C的思路 不属于C++呢 总感觉不大和谐

我也很好奇 大牛快现身罢
#4
zklhp2012-08-04 23:59
有没有懂C++的看我写的对不对

程序代码:

#include<iostream>

using namespace std;

const int n = 5;

struct LinkLNode
{
    int no;
    int Data;
    struct LinkLNode *next;
};
typedef LinkLNode *LinkList;
LinkLNode *head, *end;

LinkLNode *Array_FirstLinkListCreat(LinkList &l, int m)
{
    int i = 0,j = 0;
    LinkLNode *Array[n+1];
    LinkLNode *p = NULL, *q = NULL;
    for( i = 1;i <= n;i++ )
    {
        p = q = l = new LinkLNode;    // (LinkLNode *)malloc(sizeof(LinkLNode));
        Array[i] = p;
        p->no = 1;
        head = end = p;
    }
    for( i = 1;i <= n;i++ )
    {
        for( j = 2;j <= m ;j++ )
        {
            q = l = new LinkLNode;    // (LinkLNode *)malloc(sizeof(LinkLNode));
            q->no = j;
            end->next = (LinkLNode *)q;
            end = p = q;
            end->next =  NULL;
        }
    }
    return (Array[1]);
}

int main ()
{
    LinkList L;
    LinkLNode *p,*q;
    int m = 3;
    int i = 0,j = 0;
    p = Array_FirstLinkListCreat(L, m);
    //system("pause");
    return 0;
}

#5
pangding2012-08-05 00:09
这个程序都没看懂要干嘛呀,谁来加点注释。
#6
zklhp2012-08-05 00:13
以下是引用pangding在2012-8-5 00:09:45的发言:

这个程序都没看懂要干嘛呀,谁来加点注释。
建立一个链表 我感觉他写的思路有问题 按照他说的应该是个C++程序 可是从头文件到实现思路都是C的那一套

不过你要说这是C也不对 用了引用 C也编译不过 很纠结的一个程序啊

现在我能改到编译无错 但对不对就不知道了
#7
zklhp2012-08-05 00:14
const int n = 5;

这个也属于C++罢
#8
pangding2012-08-05 00:15
那个函数的参数 m 是干什么的。初始化完了之后链表应该变成什么样呀?
#9
zklhp2012-08-05 00:18
p = q = l = new LinkLNode;    // (LinkLNode *)malloc(sizeof(LinkLNode));

这个new是这样用的不?
#10
pangding2012-08-05 00:22
是这样用。
但是这么写搞出一大堆全局变量。C++ 的习惯一般是把这些东西封装在类里。楼主应该就是想写 C 语言的东西。
在 C++ 里,像 struct 这样的关键字有时都可以省掉的。比如:
程序代码:
typedef struct _LinkLNdoe
{
    int no;
    int Data;
    _LinkLNode *next;
}LinkLNode,*LinkList;

#11
zklhp2012-08-05 00:24
看来这程序也就这样了 呵呵

建议楼主好好学学C++ 按照C++的实现思路写程序

或者呢 就写C语言的也很好 这种又像C又像C++的程序确实不大好啊
#12
zklhp2012-08-05 00:25
大牛晚安、、
#13
pangding2012-08-05 00:33
回复 12楼 zklhp
祝你做个好梦。
#14
小小菜鸟蛋2012-08-05 09:31
谢谢各位大神,受教了~~
#15
小小菜鸟蛋2012-08-05 09:52
各位大神,这程序只是一个大概思路,并不是完整的,我只是想问在程序的函数的二重循环里,end->next = (LinkLNode *)q 这句语句为什么会出现这种错误:不能将"LinkLNode *"类型的值分配到"LinkLNode *"类型的实体,我用的是VS2010的;其实我也知道我这个程序不能说是完全的C++程序,但是C++不是C的升级嘛,所以没怎么注意,以后会注意这些的,再次谢谢各位大神!
#16
小小菜鸟蛋2012-08-05 09:56
回复 8楼 pangding
m是在创建链表是定义链表的长度的,其实这个程序不完整,就只有创建这么一个东西的模块,所以不好意思哈~~
#17
小小菜鸟蛋2012-08-05 11:50
在C中是用malloc动态申请空间的,用free()释放空间;在C++中是用new动态申请空间的,用delete()释放空间,但是因为C++支持C,所以就没有特别注意,以后会注意的;不好意思,程序让大神们看得费劲。。。。
#18
TonyDeng2012-08-05 11:51
#19
pangding2012-08-05 12:07
回复 17楼 小小菜鸟蛋
已经有大神给你重写过了,赶紧看看满不满足要求~~
#20
小小菜鸟蛋2012-08-05 12:08
回复 18楼 TonyDeng
先谢谢啦,可是我的问题出在我在15L说的那样,该怎么办?
#21
TonyDeng2012-08-05 12:13
以下是引用小小菜鸟蛋在2012-8-5 09:52:20的发言:

各位大神,这程序只是一个大概思路,并不是完整的,我只是想问在程序的函数的二重循环里,end->next = (LinkLNode *)q 这句语句为什么会出现这种错误:不能将"LinkLNode *"类型的值分配到"LinkLNode *"类型的实体,我用的是VS2010的;其实我也知道我这个程序不能说是完全的C++程序,但是C++不是C的升级嘛,所以没怎么注意,以后会注意这些的,再次谢谢各位大神!

我怎么知道你什么时候出现的这个编译信息,在1楼的代码
typedef struct LinkLNdoe
{
    int no;
    int Data;
    struct LinkLNode *next;
}
定义就是错的,一开始就错的,后面的编译信息都不用看了。
1