【发布时间】:2012-07-01 10:32:16
【问题描述】:
我需要一点帮助。我正在尝试按年份对结构队列进行排序。
这是我的结构:
struct element{
int id;
int sign;
int year;
int month;
double amount;
struct element *next;
};
struct queue{
struct element *head;
struct element *tail;
struct element *heads;
struct element *temp;
struct element *temph;
int size;
};
这是我写的函数:
void sort(struct queue* queue){
if (queue->size == 0){
printf("Struct is empty\n");}
else {
struct element* head=queue->head;
struct element* heads=queue->heads;
struct element* temp=NULL;
struct element* temph=queue->head;
int i, size=queue->size;
for(i=0;i<size-1;i++){
heads=head->next;
if((head->year)>(heads->year)){
temp=head;
head=heads;
heads=temp;
}
head=head->next;
heads=NULL;
temp=NULL;
}
head=temph;
}
}
当我复制时它中断了:if((head->year)>(heads->year))。
我很确定我的问题是由于对head 旁边的结构的引用不当引起的(我将其命名为heads)。
【问题讨论】:
-
“它坏了”——请描述得更清楚。
-
如果我理解正确,您的意图是冒泡排序一个链表?
-
是的,我正在尝试使用冒泡排序。
-
比:尝试接受@david-schwartz 的建议:对链表进行排序意味着更改指向项目的指针。这可能是 ->next 指针或“外部”头指针,它指向第一项。
-
@wildplasser, @david-schwartz 我不确定我是否完全理解。排序应如下所示:
temp->next=head->next;head->next=heads->next;heads->next=temp->next;?