如何在 C/C++ 中的向量中保存链表

how to save a linked list in a vector in C/C++?

本文关键字:向量 保存 链表 C++      更新时间:2023-10-16

我正在尝试使用 while 语句将链表保存在向量中,数据正确保存在向量中,但函数永远不会退出 while 语句,这是代码的一部分:

typedef struct node *contractionIndices;
contractionIndices p, head;
contractionIndices getnode();
void insafter(contractionIndices p, int indexA, int indexB, int indexR, int indexS);
p=p->sig;                                                                                                                                   
i=0;                                                                                                                                        
while(p!=NULL)                                                                                                                              
    {                                                                                                                                         
      contIndices[i*4] = p->indexA;                                                                                                           
      contIndices[i*4+1] = p->indexB;                                                                                                         
      contIndices[i*4+2] = p->indexR;                                                                                                         
      contIndices[i*4+3] = p->indexS;                                                                                                         
      printf("Contraction C (%d): (%d,%d|%d,%d) n", i,                                                                                       
                     contIndices[i*4],                                                                                                        
                     contIndices[i*4+1],                                                                                                      
                     contIndices[i*4+2],                                                                                                      
                     contIndices[i*4+3]);                                                                                                     
      p=p->sig;                                                                                                                               
      i++;                                                                                                                                    
    }
printf("I'm outn");

编辑

这是斯特鲁克

struct node{
  int indexA;
  int indexB;
  int indexR;
  int indexS;
  struct node *sig;
};

而这个插入功能:

void insafter(contractionIndices p, int indexA, int indexB, int indexR, int indexS)
{
  contractionIndices q;
  if(p==NULL)
    printf("ERROR, list emptyna");
  else
    {
      q=getnode();
      q->indexA=indexA;
      q->indexB=indexB;
      q->indexR=indexR;
      q->indexS=indexS;
      q->sig=p->sig;
      p->sig=q;
      p=p->sig;
    }
}

内存分配:

contractionIndices getnode()
{
  contractionIndices p;
  p=(contractionIndices)malloc(sizeof(struct node));
  if(p==NULL)
    printf("Error: insuficient memoryan");
  return p;
}

谢谢你的帮助

您提供了以下信息:

"函数永远不会退出 while 语句"

由于您没有发布将sig指针设置为 NULL 的位置,因此开始执行此操作的第一个位置是在此处创建节点时:

contractionIndices getnode()
{
  contractionIndices p;
  p=(contractionIndices)malloc(sizeof(struct node));
  if(p==NULL)
    printf("Error: insuficient memoryan");
  memset(p, 0, sizeof(node));  // this zeros out p
  return p;
}

这可能无法修复所有错误,但您肯定没有在创建节点时将sig指针设置为 NULL。