[英]sort a linked list of struct in c
我正在嘗試根據結構“容量”的元素以升序對鏈表進行排序。 但它沒有給出結果。 我犯了什么錯誤? 這是我的代碼
typedef struct avion avion;
typedef avion* aliste;
struct avion
{
char code[20];
int capacite;
char etat;
int date;
int nvols;
aliste svt;
};
我已經創建了列表。 並按照 function 對其進行排序:
void tri(aliste L)
{
aliste i,j,min,tmp;
for (i=L; i->svt != NULL; i=i->svt)
{
min=i;
for (j=i->svt; j != NULL; j=j->svt)
{
if (j->capacite < min->capacite)
min=j;
}
if (min != i)
{
tmp=min;
min=i;
i=tmp;
}
}
}
看起來您正在嘗試對列表進行冒泡排序。 一個快速而骯臟的解決方法是交換節點的內容:
void tri(aliste L)
{
aliste i,j,min;
avion tmp;
...
if (min != i)
{
tmp=*min;
*min=*i;
*i=tmp;
}
}
}
這里的好消息是,從調用者傳遞的 L 指針仍然指向列表的開頭。 如果它在僅更改svt
指針的同時復制結構,那么它的缺點會更加有效。 但:
由於您使用的冒泡排序不是一種非常有效的算法,因此我假設您只打算處理小列表並且性能不是必需的,因此您只能靠自己...
在 C 中實現結構鏈表的常用方法是在https://www.geeksforgeeks.org/linked-list-set-1-introduction/
基本上在結構內部,鏈表中的下一個節點next
有一個指針,它建立了鏈表功能:
struct Node {
int data;
struct Node* next;
};
對於 C 中這種更常見的鏈表實現,您可以在網上找到許多排序算法(qsort、mergesort...)的源代碼。 在這樣的示例中,您必須為多個參數實現功能,因為您的節點(鏈表的)具有多個數據字段......
typedef avion* aliste;
typedef 指針是個好主意嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.