| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 685 人关注过本帖
标题:链表问题
只看楼主 加入收藏
guang
Rank: 4
来 自:广东深圳
等 级:贵宾
威 望:13
帖 子:1414
专家分:285
注 册:2006-4-3
结帖率:100%
收藏
 问题点数:0 回复次数:1 
链表问题
我建立了一个链表,可当运行时引发了内存错误,刚学不知是什么原因
麻烦高手帮帮忙
#include <iostream.h>
#include <stdlib.h>
typedef int datatype;
typedef struct Lnode
{
datatype data;
struct Lnode *next;
}LinkList;
Initlist(LinkList *L) //建立链表
{
L=(LinkList *)malloc(sizeof(Lnode));
if(!L)
cout<<"建立链表失败!"<<endl;
L->next=NULL;
return 1;
}
Create_L(LinkList *L,int n) //添加N个数据
{
LinkList *T;
Initlist(T);
LinkList *p;
int i;
for(i=n;i>0;--i)
{
p=(LinkList *)malloc(sizeof(Lnode));
if(!p)
cout<<"增加结点失败!"<<endl;
cin>>p->data;
p->next=T->next;
T->next=p;
}
cout<<"你建立的链表为:";
for(i=0;i<n;i++)
{
cout<<p->data<<" ";
p++;
}
return 1;
}
VisitElem_L(LinkList *L,int i,datatype &e) //查找
{
LinkList *p;
p=L->next;
int j=1;
while(p!=NULL && j<i)
{
p=p->next;
++j;
}
if(p==NULL || j>i)
cout<<"第"<<i<<"个元素不存在!"<<endl;
e=p->data;
return 1;
}
Insert_Link(LinkList *L,int i,datatype e) //插入
{
LinkList *s,*p;
s=(LinkList *)malloc(sizeof(Lnode));
if(!s)
cout<<"生成结点失败!"<<endl;
s->next=NULL;
p=L;
int j=0;
while(p && j<i-1)
{
p=p->next;
++j;
}
if(!p || j>i-1)
cout<<"插入错误!"<<endl;
s->next=p->next;
p->next=s;
return 1;
}
Delete_Link(LinkList *L,int i,datatype &e) //删除
{
LinkList *p;
p=L;
LinkList *q;
int j=0;
while(p->next && j<i-1)
{
p=p->next;
++j;
}
if(!(p->next) || j>i-1)
cout<<"没有找到你要删除的数!"<<endl;
q=p->next;
p->next=q->next;
e=q->data;
free(q);
return 1;
}
void main()
{
int num;
while(1)
{
cout<<"1.建立链表"<<endl;
cout<<"2.查找数据"<<endl;
cout<<"3.插入数据"<<endl;
cout<<"4.删除数据"<<endl;
cout<<"0.退出"<<endl;
cout<<"请输入0-4进行操作:";
cin>>num;
switch(num)
{
case 1:
LinkList *L;
int n;
cout<<"请输入你要添加的数据的个数:";
cin>>n;
Create_L(L,n);
case 2:LinkList *H;
int i;
datatype e;
cout<<"你要查找的数据的位置为:";
cin>>i;
VisitElem_L(H,i,e);
cout<<"第"<<i<<"个元素为:"<<e<<endl;
case 3:int m;
datatype k;
LinkList *h;
cout<<"请输入你要插入的数据:";
cin>>m;
cout<<"请输入你要插入的位置:";
cin>>n;
Insert_Link(h,m,k);
cout<<"插入后的链表为:";
while(L->next!=NULL)
{
cout<<L->data<<" ";
L++;
}
case 4:int j;
datatype s;
LinkList *w;
cout<<"请输入你所删除数据的位置:";
cin>>j;
Delete_Link(w,j,s);
cout<<"你所删除的数据为:"<<e<<endl;
case 0:
cout<<"谢谢使用!"<<endl;
exit(0);
}
}
}
搜索更多相关主题的帖子: 链表 内存 LinkList Lnode int 
2006-09-29 17:16
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 
大概看了一下
Create_L(LinkList *L,int n) //添加N个数据
{
LinkList *T;
Initlist(T);
LinkList *p;
int i;
for(i=n;i>0;--i)
{
p=(LinkList *)malloc(sizeof(Lnode));
if(!p)
cout<<"增加结点失败!"<<endl;
cin>>p->data;
p->next=T->next;
T->next=p;
}
cout<<"你建立的链表为:";
for(i=0;i<n;i++)
{
cout<<p->data<<" ";
p++;
}
return 1;
}

这段有问题,你根本就没有返回新创建的链表的头结点 ,如果你是renturn 1那么起码你的LinkList *L ,其中变量L没有用到,你可以将T删除了,用L代替T,

c++/C + 汇编 = 天下无敌
2006-09-29 23:27
快速回复:链表问题
数据加载中...
 
   



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

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