| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1575 人关注过本帖
标题:链表实现怎么没输出啊
只看楼主 加入收藏
diaoxue
Rank: 1
等 级:新手上路
帖 子:142
专家分:0
注 册:2007-6-1
收藏
 问题点数:0 回复次数:12 
链表实现怎么没输出啊

算法参考 数据结构(c语言版) 严蔚敏
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

typedef struct Lnode//////////定义结构
{
int data;
struct Lnode *next;
}Lnode,*LinkList;

void CreateList(LinkList L,int n)////////创建链表
{
L=(LinkList)malloc(sizeof(Lnode));
L->next=NULL;
for(int i=1;i<=n;i++)
{
LinkList p=(LinkList)malloc(sizeof(Lnode));
scanf("%d",p->data);
p->next=L->next;
L->next=p;
}
}
int GetElem(LinkList L,int i,int e)/////////获得元素
{
LinkList p=L->next;
int j=1;
while(p && j<i)
{
p=p->next;
++j;
}
if(!p || j>i)exit(1);
e=p->data;
return e;
}

void ListInsert(LinkList L,int i,int e)////////插入
{
LinkList p=L;
int j=0;
while(p && j<i-1)
{
p=p->next;
++j;
}
if(!p || j>i-1)exit(1);
LinkList s=(LinkList)malloc(sizeof(Lnode));
s->data=e;
s->next=p->next;
p->next=s;
}

int ListDelete(LinkList L,int i,int e)/////////删除
{
LinkList p=L,q;
int j=0;
while(p->next && j<i-1)
{
p=p->next;
++j;
}
if(!(p->next) || j>i-1)exit(1);
q=p->next;
p->next=q->next;
e=q->data;
free(q);
return e;
}

void MergeList(LinkList La,LinkList Lb,LinkList Lc)////////合并
{
LinkList pa=La->next,pb=Lb->next;
LinkList pc;
Lc=pc=La;
while(pa && pb)
{
if(pa->data <= pb->data)
{
pc->next=pa;
pc=pa;pa=pa->next;
}
else
{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
pc->next=pa?pa:pb;
free(Lb);
}////////////////////////////通过编译
int main()
{
int e;
LinkList L,m,n;
CreateList(L,6);
int a[]={12,45,69,85,45,36};
for(int i=1;i<=6;i++)
ListInsert(L,1,a[i]);
m->data=ListDelete(L,3,e);
printf("%d",m->data);
n->data=GetElem(L,1,e);
printf("%d",n->data);
return 0;
}

搜索更多相关主题的帖子: 链表 输出 
2007-11-08 09:48
柒兲
Rank: 1
等 级:新手上路
威 望:1
帖 子:126
专家分:0
注 册:2007-9-26
收藏
得分:0 

不知道那么给你说,

你可以先创建一个头结点!

然后每次插入 都接在最后一个接点上`

这样访问就要方便点


2007-11-08 18:14
qq95620412
Rank: 1
等 级:新手上路
帖 子:81
专家分:0
注 册:2007-11-5
收藏
得分:0 

你的程序一大堆问题哦

int main()
{
int e;
LinkList L,m,n;
CreateList(L,6); //L没有初始化,能做为CreateList()的参数吗?
int a[]={12,45,69,85,45,36};
for(int i=1;i<=6;i++)
ListInsert(L,1,a[i]);
m->data=ListDelete(L,3,e);
printf("%d",m->data);
n->data=GetElem(L,1,e);
printf("%d",n->data);
return 0;
}

其它的的问题就不用多说了,由于L没有被初始化,CreateList()不会运行,也就是说,这里是无法通过编译检查的。
其次,即使你初始化了L,CreateList()也不会达到你的目的。

烟味敏的书我也用过,虽然说是C语言版,但提供的函数原型绝大多数无法通过C来实现。我以前吃的就是这个亏。
如果想学C语言版的数据结构,趁早把烟味敏的书扔掉。

打倒 烟味敏


在C语言里,应该使用 LinkList CreateList(int n)原型

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

typedef struct Lnode//////////定义结构
{
int data;
struct Lnode *next;
}Lnode,*LinkList;

LinkList CreateList(int n)////////创建带头节点的链表
{
LinkList Head;
Head=(LinkList)malloc(sizeof(Lnode));
L->next=NULL; //创建头节点
for(int i=1;i<=n;i++)
{
LinkList p=(LinkList)malloc(sizeof(Lnode)); //生成新节点
scanf("%d",&(p->data)); //兄弟你的 scanf("%d",p->data);是错误的
p->next=Head->next; //将新节点的next指向头节点的next
Head->next=p; //将新节点插入到头节点之后
}
return Head; //返回头节点
}


........ 以下从略。


int main()
{
int e;
LinkList L,m,n;
L=CreateList(6); //改成左边的形式来调用
int a[]={12,45,69,85,45,36};
for(int i=1;i<=6;i++)
ListInsert(L,1,a[i]);
m->data=ListDelete(L,3,e);
printf("%d",m->data);
n->data=GetElem(L,1,e);
printf("%d",n->data);
return 0;
}


另:你的程序格式太差劲了,趁早改过来。

我的程序未编译,如有笔误,敬请见谅。


人生路难走,转眼已白头。伤心望远山,黯然下小楼。
2007-11-08 21:04
diaoxue
Rank: 1
等 级:新手上路
帖 子:142
专家分:0
注 册:2007-6-1
收藏
得分:0 

真是太谢谢qq95620412了
程序的格式??我已经很注意了
我都是在vc中写的 还有哪儿不规范吗 请赐教啊 先谢了


上善若水,水善利万物而不争,处众人之所恶
2007-11-09 15:21
qq95620412
Rank: 1
等 级:新手上路
帖 子:81
专家分:0
注 册:2007-11-5
收藏
得分:0 
不好的写法

int main(void)
{
int a,b;
scanf("%d",&a);
b=a;
printf("%d,%d",a,b);
return 0;
}


较好的写法:
int main(void)
{
int a,b;
scanf("%d",&a);
b=a;
printf("%d,%d",a,b);
return 0;
}


人生路难走,转眼已白头。伤心望远山,黯然下小楼。
2007-11-09 16:00
diaoxue
Rank: 1
等 级:新手上路
帖 子:142
专家分:0
注 册:2007-6-1
收藏
得分:0 


谢谢你的提醒
我平时也挺注意规范的


上善若水,水善利万物而不争,处众人之所恶
2007-11-09 20:44
yangzhifu
Rank: 1
等 级:新手上路
威 望:2
帖 子:433
专家分:0
注 册:2007-4-11
收藏
得分:0 
我还说说有个问题:for(int i=1;i<=n;i++)是C++的用法,既然是C,那就用正规的用法吧,而且也不能通过的!

方寸之内,剖天下; 方坛之内,析自我;
2007-11-09 22:14
diaoxue
Rank: 1
等 级:新手上路
帖 子:142
专家分:0
注 册:2007-6-1
收藏
得分:0 

你是说定义变量放到外面吧


上善若水,水善利万物而不争,处众人之所恶
2007-11-10 16:55
静思
Rank: 3Rank: 3
来 自:沈阳
等 级:新手上路
威 望:8
帖 子:630
专家分:0
注 册:2006-2-28
收藏
得分:0 

void MergeList(LinkList La,LinkList Lb,LinkList Lc)////////合并
{
LinkList pa=La->next,pb=Lb->next;
LinkList pc;
Lc=pc=La;
while(pa && pb)
{
if(pa->data <= pb->data)
{
pc->next=pa;
pc=pa;pa=pa->next;
}
else
{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
pc->next=pa?pa:pb;
free(Lb);//这个只能删除这个链表的头结点,想删除整个链表的元素,必须遍历整个链表然后逐个删除之
}

FreeList(LinkList L)
{
LinkList p,q;
p=L->next;
while(p)
{
q=p;
p=p->next;
free(q);
}
}


英者自知,雄者自胜
2007-11-10 17:54
qq95620412
Rank: 1
等 级:新手上路
帖 子:81
专家分:0
注 册:2007-11-5
收藏
得分:0 

回LS:

{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
pc->next=pa?pa:pb;
free(Lb);//这个只能删除这个链表的头结点,想删除整个链表的元素,必须遍历整个链表然后逐个删除之
}

FreeList(LinkList L)
{
LinkList p,q;
p=L->next;
while(p)




LS糊涂了吧?这里并不需要删除整个链表的元素,原来的元素已经重新链接到Lc上了。


人生路难走,转眼已白头。伤心望远山,黯然下小楼。
2007-11-10 23:31
快速回复:链表实现怎么没输出啊
数据加载中...
 
   



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

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