当前位置: 代码迷 >> C语言 >> [求助]查找链表节点编号的函数问题?
  详细解决方案

[求助]查找链表节点编号的函数问题?

热度:249   发布时间:2006-08-23 17:45:10.0

按您的意思改,那最后一个字母能被检测到吗?
p是p!=NULL;的缩写。


----------------解决方案--------------------------------------------------------
以下是引用soft_wind在2006-8-23 17:45:10的发言:

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


----------------解决方案--------------------------------------------------------
int p = 5;

if (p) // equal if (p != 0)
// code...
else
// code..

----------------解决方案--------------------------------------------------------

如论坛所说。
您把指针看成数值就能理解了.
#define NULL 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;
}
全部为错误;
----------------解决方案--------------------------------------------------------

那你原来的程序就有问题,
您看下这个吧,我简单写了个:
#include "Stdio.h"
#include "Conio.h"
#include "stdlib.h"
typedef struct node
{
char data;
struct node *next;
}LNODE;
LNODE* creat(LNODE* head);
void print(LNODE* head);
void Free(LNODE *head);
int ist_postion(LNODE *head,char ch);
int main(void)
{
LNODE *head=NULL;
head=creat(head);
print(head);
printf("%d",ist_postion(head,'b'));
Free(head);
getch();
return 0;
}
LNODE * creat(LNODE *head)
{
LNODE *p=NULL,*q=NULL;
char ch=getchar();
while(ch!='#')
{
p=(LNODE *)malloc(sizeof(LNODE));
if(p==NULL)exit(0);
p->data=ch;
p->next=NULL;
if(!head)
{
q=head=p;
}
else
{
q->next=p;
q=p;
}
ch=getchar();
}
return head;
}
void print(LNODE* head)
{
LNODE* p=head;
while(p)
{
putchar(p->data);
p=p->next;
}
}
void Free(LNODE *head)
{
LNODE *p=NULL;
while(head)
{
p=head;
head=head->next;
free(p);
}
}
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-08-24 02:39:40
soft_wind

等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
  得分:0 

那个表头写在主函数或者函数中都是无所谓的。
写在主函数中,就传个参数。
写在其他函数中,是可以省掉。

[此贴子已经被作者于2006-8-24 11:01:16编辑过]


----------------解决方案--------------------------------------------------------
int ist_postion(LNODE *head,char ch)
{
int i=1;
while(head&&head->data!=ch&&(head=head->next,i++)) ;
return head?i:0;
}

----------------解决方案--------------------------------------------------------
  相关解决方案