Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c函数,用于检查链表中是否存在值_C_Struct_Linked List - Fatal编程技术网

c函数,用于检查链表中是否存在值

c函数,用于检查链表中是否存在值,c,struct,linked-list,C,Struct,Linked List,我有两个带有行、列和值的链表,我正试图为它们编写一个函数,检查下一行是否存在条目。 例如,给定第5行col2,检查第6行是否存在,然后检查第6行中是否存在col2。不知怎的,这个函数没有运行,我希望有人能帮我解决这个问题。如果您需要更多的代码或解释,请联系我 提前谢谢 大卫 /* 行:1 列:3值:0 列:7值:0 世界其他地区:5 列:2值:0 列:6值:0 第6排 列:2值:0 */ //行列表 结构行列表 { int行_数; 结构行列表*向下链接; 结构值列表*链接右键; }; //列列表

我有两个带有行、列和值的链表,我正试图为它们编写一个函数,检查下一行是否存在条目。 例如,给定第5行col2,检查第6行是否存在,然后检查第6行中是否存在col2。不知怎的,这个函数没有运行,我希望有人能帮我解决这个问题。如果您需要更多的代码或解释,请联系我

提前谢谢

大卫

/*
行:1
列:3值:0
列:7值:0
世界其他地区:5
列:2值:0
列:6值:0
第6排
列:2值:0
*/
//行列表
结构行列表
{
int行_数;
结构行列表*向下链接;
结构值列表*链接右键;
};
//列列表+值
结构值列表
{
int列_索引;
int值;
结构值列表*下一步;
};
//列
无效创建值节点(无符号整数数据、无符号整数j、结构行列表**z)
{
结构值列表*temp,*d;
temp=(结构值列表*)malloc(sizeof(结构值列表));
temp->column_index=j;
温度->值=数据;
temp->next=NULL;
如果((*z)->link_right==NULL)
(*z)->链接右=温度;
其他的
{
d=(*z)->链接右;
while(d->next!=NULL)
d=d->next;
d->next=温度;
}
}
//行列表
无效创建行列表(结构行列表**开始,无符号整数行,无符号整数列,结构数组*p)
{
for(无符号整数i=0;i行号=rx;
z->link_down=NULL;
z->link_right=NULL;
如果(i==0)
*开始=z;
其他的
{
r=*开始;
while(r->link\u down!=NULL)
r=r->向下链接;
r->link_down=z;
}
而(p[i].x==rx)
{
创建值节点(0,p[i].y和z);
i++;
}
我--;
}
}
布尔函数(结构行列表*开始,整数x,整数y){
结构行列表*tmpr;
结构值列表*tmpc;
tmpr=启动;
int currow=x;
同时((tmpr->行号)链接向下;
}
如果(tmpr->link_right!=NULL)
{tmpc=tmpr->link_right;}
int curcol=y;
tmpr=tmpr->link\u down;
如果((tmpr->行号)==(当前+1)){
while(tmpc!=NULL){
如果((tmpc->列索引)=curcol){
返回true;
}
if((tmpc->列索引)>curcol){
返回false;
}
tmpc=tmpc->next;
}
}
返回false;
}
int main(){
if(功能(启动、x、y)){
printf(“*%u*%u*%u***\n\n”,x,y,v);
}

我在
函数中看到三个bug

在此代码中:

            while((tmpr->row_number)<currow){
                tmpr=tmpr->link_down;
            }
        if (tmpr->link_right != NULL)
        { tmpc = tmpr->link_right;}
tmpr=tmpr->link_down;
在此代码中:

            while((tmpr->row_number)<currow){
                tmpr=tmpr->link_down;
            }
        if (tmpr->link_right != NULL)
        { tmpc = tmpr->link_right;}
tmpr=tmpr->link_down;
只有当
link\u right
不为空时,才初始化
tmpc
。因此,稍后,即此处

        while (tmpc != NULL) {
您可以使用未初始化的
tmpc

解决这个问题的一个简单方法是始终执行任务

         tmpc = tmpr->link_right;
无论链接右键的值是多少

在此代码中:

            while((tmpr->row_number)<currow){
                tmpr=tmpr->link_down;
            }
        if (tmpr->link_right != NULL)
        { tmpc = tmpr->link_right;}
tmpr=tmpr->link_down;
您更改
tmpr
,但从不检查NULL。因此:

        if((tmpr->row_number)==(currow+1)){
您可能正在取消对空指针的引用

所以加上这张额外的支票:

tmpr=tmpr->link_down;
if (tmpr == NULL) return false;

你能不能说得比“不知何故函数没有运行”更具体一些。有关您的问题的更多详细信息将使您更容易获得帮助。您是否尝试过调试代码?能否演示如何调用void create_value_node以及如何声明struct array?非常感谢,由于您的精确注释,我能够修复该函数!