| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1561 人关注过本帖
标题:[求助]查找链表节点编号的函数问题?
取消只看楼主 加入收藏
han2y
Rank: 1
来 自:山东德州
等 级:新手上路
帖 子:175
专家分:0
注 册:2006-5-4
结帖率:100%
收藏
 问题点数:0 回复次数:5 
[求助]查找链表节点编号的函数问题?

查找链表节点编号的函数如下
typedef struct node
{
char data;
struct node * next;
}LNODE;
int ist_postion(LNODE *L,char m) //L为链表指针,m为要找的值
{
LNODE * p;
int i=0;
p=L;
while((p->data!=m)&&(p->next!=NULL))
{
i++;
p=p->next;
}
if(i=0||(p->data!=m))
printf("表中无此数据");
else

return i;
}
不知我的函数对不对,运行时出现错误的编号,不知错在那里?请指教

搜索更多相关主题的帖子: 链表 节点 函数 
2006-08-22 22:03
han2y
Rank: 1
来 自:山东德州
等 级:新手上路
帖 子:175
专家分:0
注 册:2006-5-4
收藏
得分:0 
以下是引用soft_wind在2006-8-23 9:17:57的发言:

if(i==0||p->data!=m);
而且您这个函数在检验字母的位置也有问题,如果是链表第一个字母就是您想要查询的第一个字母,您的程序仍会执行printf("表中无此数据");
另外,您的这个函数有时候没有返回值,这虽然是允许的,但不规范,
int ist_postion(LNODE *head,char ch)
{
LNODE *p=head;
int i=1;
for(;p;p=p->next) 问题:指针p能作为循环条件吗?它的值是不确定的,
{ 是不是应该为:p->next !=NULL
if(p->data==ch)
break;
i++;
}
if(p) return i;
else return 0; //用返回0表示查找不到。
}

[此贴子已经被作者于2006-8-23 17:38:19编辑过]


2006-08-23 17:36
han2y
Rank: 1
来 自:山东德州
等 级:新手上路
帖 子:175
专家分:0
注 册:2006-5-4
收藏
得分:0 
以下是引用soft_wind在2006-8-23 17:45:10的发言:

按您的意思改,那最后一个字母能被检测到吗?
p是p!=NULL;的缩写。不懂,具体说说?怎么指针是语句的缩写?


2006-08-23 18:03
han2y
Rank: 1
来 自:山东德州
等 级:新手上路
帖 子:175
专家分:0
注 册:2006-5-4
收藏
得分:0 
以下是引用soft_wind在2006-8-23 9:17:57的发言:

if(i==0||p->data!=m);
而且您这个函数在检验字母的位置也有问题,如果是链表第一个字母就是您想要查询的第一个字母,您的程序仍会执行printf("表中无此数据");
另外,您的这个函数有时候没有返回值,这虽然是允许的,但不规范,
int ist_postion(LNODE *head,char ch)
{
LNODE *p=head;
int i=1;
for(;p;p=p->next)
{
if(p->data==ch)
break;
i++;
}
if(p) return i;
else return 0; //用返回0表示查找不到。
}

我运行过了,你的for语句不执行
和我的代码相同:
int list_postion(LNODE * L,char m)
{
LINKLIST p;
int i=0;
p=L;
p=L->next ;

while(p!=NULL)
{i++;
if(p->data!=m)break;
p=p->next;
}
if(i=0)
printf("hasnot data.");
}
else
return i;
}
全部为错误;


2006-08-24 10:15
han2y
Rank: 1
来 自:山东德州
等 级:新手上路
帖 子:175
专家分:0
注 册:2006-5-4
收藏
得分:0 

全部代码:
#define NULL 0
typedef char ELEMTYPE;
typedef struct node{
ELEMTYPE data;
struct node *next;
}LNODE,*LINKLIST;


LINKLIST list_init() \\链表初始化
{
LINKLIST L;
L=(LINKLIST)malloc(sizeof(LNODE));
L->next=NULL;
return L;
}


void list_insert(LINKLIST L,LINKLIST X) \\插入节点到链表
{
X->next=L->next;
L->next=X;
}

int length(LINKLIST L) \\求链表的长度
{
int i;
LINKLIST P=L;
i=0;
while(P->next!=NULL)
{
i++;
P=P->next;
}

return i;
}




void list_play(LINKLIST L) \\显示链表的节点
{
LINKLIST P;
P=L;
while(P->next!=NULL)
{

P=P->next;
printf("%c",P->data);
}
}

LINKLIST list_delete(LINKLIST L,int i) \\删除链表中指定编号的节点
{
LNODE *p,*r;
int j=1;
p=L;
while(j<=i&&p->next!=NULL)
{ r=p;
p=p->next;
j++;
}
if(j<i||i<=0)
printf("weizhierror");
else
r->next=p->next;
return L;
}


int search_bianhao(LINKLIST L,char m) \\显示链表中指定节点的编号
{
int i=1;
while(L&&L->data!=m&&(L=L->next,i++)) ;
return L?i:0;
}


void main()
{
LNODE *L,*s;
int i;
char c;
L=list_init();
for(i=0;i<5;i++)
{
c=getch();
s=(LINKLIST)malloc(sizeof(LNODE));
s->data=c;
list_insert(L,s);
}
list_play(L);
printf("\n");
list_delete(L,3);
list_play(L);
printf("\n");
c='4';
i=search_bianhao(&L,c);
printf("%d",i);
getch();

}

红色代码运行时出现错误,总是显示'0',如果换成用户'soft_wind'的也一样,怪哉!

'soft_wind'的代码:
int ist_postion(LNODE *head,char ch) \\显示字符在链表里的位置的函数
{
LNODE *p=head;
int i=1;
for(;p;p=p->next)
{
if(p->data==ch)
break;
i++;
}
if(p) return i;
else return 0;
}

[此贴子已经被作者于2006-8-26 15:03:53编辑过]


2006-08-26 14:54
han2y
Rank: 1
来 自:山东德州
等 级:新手上路
帖 子:175
专家分:0
注 册:2006-5-4
收藏
得分:0 
详细解释解释代码问题所在

2006-08-26 16:08
快速回复:[求助]查找链表节点编号的函数问题?
数据加载中...
 
   



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

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