嗨,我正在尝试插入一个结构,我已经创建了一个列表,按PID数字的升序排列。这是我的代码:
#include <stdlib.h> //for malloc and rand
#include <stdio.h>
struct PCB
{
struct PCB *Next_PCB ;
int PID ;
}*head;
struct PCB *ptr, *tmp, *tmp1;
void insert_ordered (struct PCB *, struct PCB *) ;
void print_list(struct PCB *) ;
main()
{
int num_structs, i;
ptr = (struct PCB *) malloc (sizeof (struct PCB)) ;
num_structs = 10 + (rand() % 10) ;
for ( i = 0 ; i < num_structs ; i++)
{
tmp = (struct PCB *) malloc (sizeof(struct PCB)) ;
tmp->PID = rand() % 20 ;
tmp->Next_PCB = NULL ;
insert_ordered(ptr, tmp) ;
}
print_list(ptr);
}
void insert_ordered (struct PCB *Head, struct PCB *Add)
{
if (Head->Next_PCB == Head) {
Head = Add;
}
}
void print_list(struct PCB *Head)
{
while (Head != NULL) {
if (Head->Next_PCB != NULL) {
printf("PID: %d\n", Head->PID);
Head = Head->Next_PCB;
} else {
printf("PID: %d\n", Head->PID);
break;
}
}
}
尽管insert_ordered()
似乎应该在添加元素之前打印一次,但它不显示输出:
PID: 0
另外,如何正确地将一个元素插入到LinkedList中?我目前有:
while (Head != NULL) {
if (Head->Next_PCB != NULL) {
if (Add->PID > Head->PID) {
Head = Head->Next_PCB;
printf("pid bigger: %d than current pid: %d\n", Add->PID, Head->PID);
} else if (Add->PID == Head->PID) {
//Head->Next_PCB = Add;
printf("adding pid equal: %d to current pid: %d\n", Add->PID, Head->PID);
} else if (Add->PID < Head->PID) {
//Head->Next_PCB = Add;
printf("adding pid smaller: %d than current pid: %d\n", Add->PID, Head->PID);
}
} else {
Head->Next_PCB = Add;
}
}
但效果不太好。这可能是我最初的if语句没有正确理解的结果,但无论是哪种情况,我都很困惑。
谢谢你,SOF。
发布于 2015-04-20 18:57:02
这应该可以做到:
#include <stdlib.h> /* malloc, rand */
#include <stdio.h> /* printf */
#include <assert.h> /* assert */
struct PCB
{
struct PCB *Next_PCB ;
int PID ;
};
struct PCB *List, *tmp;
void insert_ordered (struct PCB *) ;
void print_list(struct PCB *) ;
main()
{
int num_structs, i;
num_structs = 10 + (rand() % 10) ;
for ( i = 0 ; i < num_structs ; i++)
{
tmp = (struct PCB *) malloc (sizeof(struct PCB)) ;
tmp->PID = rand() % 20 ;
printf("%d ", tmp->PID);
tmp->Next_PCB = NULL ;
insert_ordered(tmp) ;
printf("\n");
print_list(List);
printf("\n");
}
print_list(List);
}
void insert_ordered (struct PCB *Add)
{
struct PCB *Runner = List;
if (List == NULL || Add->PID < List->PID) {
Add->Next_PCB = List;
List = Add;
return;
}
while (Runner->Next_PCB && Add->PID > Runner->Next_PCB->PID){
Runner = Runner->Next_PCB;
}
if (Runner->Next_PCB && Add->PID <= Runner->PID)
{
Add->Next_PCB = Runner->Next_PCB;
Runner->Next_PCB = Add;
}
else
{
Add->Next_PCB = Runner->Next_PCB;
Runner->Next_PCB = Add;
}
}
void print_list(struct PCB *Head)
{
while (Head != NULL) {
if (Head->Next_PCB != NULL) {
printf("PID: %d\n", Head->PID);
Head = Head->Next_PCB;
} else {
printf("PID: %d\n", Head->PID);
break;
}
}
}
https://stackoverflow.com/questions/29755648
复制相似问题