【发布时间】:2015-04-20 21:01:42
【问题描述】:
我用 C 语言编写了一个程序,旨在将结构按升序插入链接列表。
问题在于没有插入我的两个最低值(1 和 2)。这是因为我目前没有工作处理程序来检查链表的第一个值是否已经大于给定的值。
这是我的功能:
struct PCB
{
struct PCB *Next_PCB ;
int PID ;
};
void insert_ordered (struct PCB *Head, struct PCB *Add)
{
tmp = Head;
if (Head->PID == 0) {
Head->PID = Add->PID;
} else {
if (Head->Next_PCB == NULL) {
Head->Next_PCB = Add;
} else {
int count = 0;
while (Head != NULL) {
if (Add->PID > Head->PID) {
if (Head->Next_PCB != NULL) {
Head = Head->Next_PCB;
count++;
} else {
Head->Next_PCB = Add;
break;
}
} else if (Add->PID == Head->PID) {
Add->Next_PCB = Head->Next_PCB;
Head->Next_PCB = Add;
break;
} else if (Add->PID < Head->PID) {
if (Add->PID == 1 || Add->PID == 2) {
printf("found 1 or 2");
printf("count: %d", count);
}
int ct = 0;
while (tmp != NULL) {
if (count == 0) {
printf("made it, %d", ct);
Add->Next_PCB = tmp;
break;
} else if (ct == (count - 1)) {
Add->Next_PCB = Head;
tmp->Next_PCB = Add;
break;
}
tmp = tmp->Next_PCB;
ct++;
}
break;
}
}
}
}
printf("pid : %d\n", Add->PID);
}
这是我打印出列表后的输出:
pid : 6
pid : 17
pid : 15
pid : 13
pid : 15
pid : 6
pid : 12
pid : 9
found 1 or 2count: 0made it, 0pid : 1
found 1 or 2count: 0made it, 0pid : 2
pid : 7
pid : 10
pid : 19
-------------------
PID: 6
PID: 6
PID: 7
PID: 9
PID: 10
PID: 12
PID: 13
PID: 15
PID: 15
PID: 17
PID: 19
输出应该在两个 6 之前有一个 1 和一个 2。有人可以帮帮我吗?谢谢。
【问题讨论】:
-
如果要插入的新节点位于链表的头部,则需要将头的地址传递给 insert_ordered( ) 函数。你的函数应该是 void insert_ordered (struct PCB **Head, struct PCB *Add)。这样你的被调用函数就可以改变调用函数中 head 的内容。
-
我还是一头雾水。我不允许修改函数参数。