解释这段代码while (s != NULL) { if (s->state == -1)//如果录入的进程为-1则进入阻塞队列 { pros->next = s->next; s->next = b->next; b->next = s; s = pros->next; continue; }
时间: 2024-04-28 10:23:54 浏览: 15
这段代码是一个循环,循环条件是 s 不为 NULL。在循环体内部,首先判断 s 的状态是否为 -1,如果是,则将该进程加入阻塞队列中。具体地,将 s 从原来的链表中删除,并将其插入到阻塞队列的开头,即将 b 的 next 指针指向 s,同时将 s 的 next 指针指向原来的队头。最后,将 s 指向下一个进程并继续循环,直到 s 为空。
相关问题
void Create(LinkList &Head, int score, int rank, int sex, char name[], char college[], char item[]) { LinkNode *p = Head->next, *s; //如果链表为空,则做初始化链表 if (p == NULL) { s = (LinkNode *)malloc(sizeof(LinkNode)); assert(s != NULL); s->score = score; s->rank = rank; s->sex = sex; strcpy(s->name, name); strcpy(s->college, college); strcpy(s->item, item); s->next = NULL; Head->next = s; } else { while (p->next != NULL) { p = p->next; } s = (LinkNode *)malloc(sizeof(LinkNode)); assert(s != NULL); s->score = score; s->rank = rank; s->sex = sex; strcpy(s->name, name); strcpy(s->college, college); strcpy(s->item, item); s->next = NULL; p->next = s; } }
这是一个函数,用于向链表中添加节点(学生信息),函数的参数包括链表头指针Head,学生的成绩score,名次rank,性别sex,姓名name,学院college和项目item。函数的具体实现如下:
1. 首先判断链表是否为空,如果为空则新建一个节点作为头节点,并将新节点作为第一个节点。
2. 如果链表不为空,则遍历链表,找到链表的末尾节点,将新节点添加在其后面。
3. 新建节点时,需要动态分配内存空间,判断是否分配成功。
4. 将学生的信息存储到节点中,包括成绩、名次、性别、姓名、学院和项目。
5. 将新节点添加到链表末尾,即链表尾部节点的next指针指向新节点。
函数的完整代码如下:
```c
void Create(LinkList &Head, int score, int rank, int sex, char name[], char college[], char item[]) {
LinkNode *p = Head->next, *s;
// 如果链表为空,则做初始化链表
if (p == NULL)
{
s = (LinkNode *)malloc(sizeof(LinkNode));
assert(s != NULL);
s->score = score;
s->rank = rank;
s->sex = sex;
strcpy(s->name, name);
strcpy(s->college, college);
strcpy(s->item, item);
s->next = NULL;
Head->next = s;
}
else
{
while (p->next != NULL)
{
p = p->next;
}
s = (LinkNode *)malloc(sizeof(LinkNode));
assert(s != NULL);
s->score = score;
s->rank = rank;
s->sex = sex;
strcpy(s->name, name);
strcpy(s->college, college);
strcpy(s->item, item);
s->next = NULL;
p->next = s;
}
}
```
pa = (pa != NULL) ? pa->next : headB; pb = (pb != NULL) ? pb->next : headA;把这两句写的明了一些
好的,我可以将代码改写得更明确一些:
```cpp
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
ListNode *pa = headA;
ListNode *pb = headB;
while(pa != pb) {
if (pa != NULL) {
pa = pa->next;
} else {
pa = headB;
}
if (pb != NULL) {
pb = pb->next;
} else {
pb = headA;
}
}
return pa;
}
```
这样修改后,代码更加清晰易懂。如果有任何问题,请随时提问。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)