更新时间:2022-06-16 02:18:31
void insert_ordered (struct PCB *Head, struct PCB *Add)
: 无法替换元素的头部这个界面.所以,你需要把第一个元素中的dummy元素(Anchor node即不是预期的内容持有).
下面是一个具体的例子:
void insert_ordered (struct PCB *Head, struct PCB *Add)
: It is not possible to replace the head of the elements in this interface. So, you need to the first element in the dummy elements(Anchor node that is not intended contents of the holding).
The following is a specific example:
#include <stdio.h>
#include <stdlib.h>
struct PCB{
struct PCB *Next_PCB ;
int PID ;
};
struct PCB *new_PCB(int PID){
struct PCB *pcb = malloc(sizeof(*pcb));
if(pcb != NULL){
pcb->Next_PCB = NULL;
pcb->PID = PID;
}
return pcb;
}
void insert_ordered (struct PCB *Head, struct PCB *Add){
if(Head == NULL)
return ;//can't
struct PCB *prev = Head, *curr = Head->Next_PCB;
/* this is reduced to following while-loop
if(Head->Next_PCB == NULL){//empty list
Head->Next_PCB = Add;
return ;
}
if(Add->PID <= curr-> PID){//Add node <= Top node
prev->Next_PCB = Add;
Add->Next_PCB = curr;
return ;
}
*/
while(curr != NULL && curr->PID < Add->PID){
prev = curr;
curr = curr->Next_PCB;
}
prev->Next_PCB = Add;
Add->Next_PCB = curr;
}
void print(struct PCB *Head){
if(Head == NULL)
return ;
else
Head = Head->Next_PCB;
while(Head != NULL){
printf("PID: %d
", Head->PID);
Head = Head->Next_PCB;
}
}
//alias
#define Make_list() new_PCB(-1)
int main(void){
struct PCB *head = Make_list();
//struct PCB *head = new_PCB(-1);//dummy node, This is intended to holds a list.
insert_ordered (head, new_PCB( 6));
insert_ordered (head, new_PCB(17));
insert_ordered (head, new_PCB(15));
insert_ordered (head, new_PCB(13));
insert_ordered (head, new_PCB(15));
insert_ordered (head, new_PCB( 6));
insert_ordered (head, new_PCB(12));
insert_ordered (head, new_PCB( 9));
insert_ordered (head, new_PCB( 1));
insert_ordered (head, new_PCB( 2));
insert_ordered (head, new_PCB( 7));
insert_ordered (head, new_PCB(10));
insert_ordered (head, new_PCB(19));
print(head);
//release list
return 0;
}
或者你需要像排序一样交换内容.
Or you need to swap the contents like a sort.