最近在寫學校要求的管理系統,使用到了鏈表。因為我懶,所以排序就想用最簡單的冒泡排序,上網搜了好久,第一行的資料都不能參與到冒泡中,靈光一閃想到了在頭節點前再加一個節點,以此來避開頭節點無法排序的問題,且最后傳遞給其他函式時,只需要傳遞添加的節點的next就行了。(歡迎大佬批評指正)
void bubble_sort(struct account *head)
{
int i,count = 0,num;//count記錄鏈表結點的個數,num進行內層回圈,
struct account *p,*q,*tail;//創建三個指標,進行冒泡排序
struct account *add_head=NULL;
add_head=(struct account *)malloc(LEN); //這上下三行主要是加一個頭節點,使第一行資料參與到冒泡中
add_head->next=head;
p = add_head;
while(p->next != NULL)
{
count++;
p = p->next;
}
for(i=0;i < count - 1;i++)
{
num = count - i - 1;
q=add_head->next;//令q指向第一個結點
p=q->next;//令p指向后一個結點
tail=add_head;//讓tail始終指向q前一個結點,方便交換,也方便與進行下一步操作
while(num--)
{
if(strcmp(q->name , p->name)>0)
{
q->next=p->next; //先讓q的下一個指向p的下一個,跳過p
p->next=q;//再讓p的下一個指向q
tail->next=p; //最后讓頭節點指點p
}
tail = tail->next;
q=tail->next;
p=q->next;
}
}
mem_print(add_head->next);//直接給它next不香嗎,枉費我絞盡腦汁!!!!!!
}
uj5u.com熱心網友回復:
這就是為什么有些資料結構教材喜歡頭結點而不是頭指標。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/268283.html
標籤:C語言
上一篇:猴子選大王·C語言
下一篇:求大神幫忙用C++解答一下
