Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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_List_Singly Linked List - Fatal编程技术网

C 如何在列表中插入特定数量的元素?

C 如何在列表中插入特定数量的元素?,c,list,singly-linked-list,C,List,Singly Linked List,我尝试使用size\u t n在列表中插入特定数量的元素(每个元素都代表一个数据包的结构中的四个元素),但当我运行主程序时,它不会显示任何内容。我如何在insert函数中定义大小,以便当更多的数据包(Fourplet)尝试插入列表时,由于列表的大小,它们将无法插入 struct Packet { int rollnumber; int src; int dest; double gentime; struct Packet *ne

我尝试使用size\u t n在列表中插入特定数量的元素(每个元素都代表一个数据包的结构中的四个元素),但当我运行主程序时,它不会显示任何内容。我如何在insert函数中定义大小,以便当更多的数据包(Fourplet)尝试插入列表时,由于列表的大小,它们将无法插入

    struct Packet
    {
     int rollnumber;
     int src;
     int dest;
     double gentime;
     struct Packet *next;
    }* head;

  void insert(int rollnumber, int src, int dest, double gentime, size_t n)
   {
     if (n==0) n=(size_t)-1;
     struct Packet * packet = (struct Packet *) malloc(sizeof(struct Packet));
     for ( struct Packet * temp = head; n-- && temp != NULL; temp = temp->next ){
       packet->rollnumber = rollnumber;
       packet->src=src;
       packet->dest=dest;
       packet->gentime = gentime;
       packet->next = NULL;

       if(head==NULL){
          head = packet;
       }
       else{
          packet->next = head;
          head = packet;
       }
    }

    }

     
    void display()
    {
     struct Packet * temp = head;
     while(temp != NULL)
     {
       printf("Roll Number: %d\n",temp->rollnumber);
       printf("src: %d\n", temp->src);
       printf("dest: %d\n", temp->dest);
       printf("gentime: %0.1f\n\n", temp->gentime);
       temp = temp->next;
      }
   }

  

编辑:下面的新代码是一个完整的工作示例。这会给你足够的开始,让你可以继续剩下的比赛

您在上面创建了数据包,但从未实际将其放入链中。这将创建它并尝试找到正确的插入点:

#包括
#包括
结构包
{
整数;
int-src;
int dest;
双gentime;
结构包*next;
}*头部;
无效插入(int rollnumber、int src、int dest、double gentime、size\u t n)
{
/*假设您试图在点n插入这些值*/
如果(n>=15){
printf(“否%d!\n”,n);
返回;
}
/*创建要插入的数据包*/
结构包*数据包=(结构包*)malloc(sizeof(结构包));
packet->rollnumber=rollnumber;
数据包->src=src;
数据包->目的地=目的地;
数据包->gentime=gentime;
packet->next=NULL;
/*现在找到应该插入的点*/
如果(n==0 | | head==NULL){
/*它应该是第一个*/
包->下一个=头;
头=包;
}否则{
结构包*temp=头;
对于(;n>1&&temp!=NULL&&temp->next!=NULL;temp=temp->next,n--){
}
如果(温度!=NULL){
*将自己置于中间(或如果包为->下一个为空)**
数据包->下一步=临时->下一步;
temp->next=数据包;
}
}
}
无效显示()
{
printf(“--------------\n”);
结构包*temp=头;
while(temp!=NULL)
{
printf(“卷号:%d\n”,临时->卷号);
printf(“src:%d\n”,temp->src);
printf(“目的地:%d\n”,临时->目的地);
printf(“gentime:%0.1f\n\n”,temp->gentime);
温度=温度->下一步;
}
}
int main(){
插入(1,1,1,1,10);/*合法,仅附加*/
显示();
插入(2,2,2,2,0);/*在1之前插入*/
显示();
插入(3,3,3,3,2);/*在2之后插入*/
显示();
在2之后和3之前插入(4,4,4,4,1);/**/
显示();
插入(5,5,5,5,15);/*非法*/
}

插入
功能中,是否要将副本插入到同一元素的链接列表中?听起来这应该分为两个函数,而不是副本。我想在列表中插入n个数据包(也是四个),我想从大小n中知道这个数字n,这样当更多数据包出现时,它们将被拒绝。因此,您想创建节点,然后将其插入链表中
n
空格,指针是全局变量,头?我想你说得对!我只想有一个特定数量节点的列表,比如说10个,因此当插入15个数据包时,其中的5个数据包将被拒绝,因为列表的大小。您是否更适合使用圆形数组(大小为10)而不是链表?仍然不会显示任何内容。也许我的显示功能有什么问题吗?我想有一个列表,其中包含特定数量的节点,比如说10个,因此当插入15个数据包(也是每个四个)时,其中的5个数据包将被拒绝,因为列表的大小。我已经更新了它——它应该足够让您开始。