我想按字母順序排列我的列表,但我遇到了一些問題。我有以下內容:按字母順序排序的鏈接列表
struct listNodeData
{
int value;
char *position;
char *lastName;
struct listNodeData * next;
};
typedef struct listNodeData listNodeData;
void sortList(listNodeData *List)
{
int swapped;
listNodeData *ptr1;
listNodeData *lptr = NULL;
do
{
swapped = 0;
ptr1 = List->next;
while (ptr1->next != lptr)
{
if (strcmp(ptr1->lastName,ptr1->next->lastName) > 0)
{
swap(ptr1,ptr1->next);
swapped = 1;
}
ptr1 = ptr1->next;
}
lptr = ptr1;
}
while (swapped);
}
void swap (listNodeData *a,listNodeData *b)
{
char *lastName = malloc(sizeof(char) * 20);
strcpy(lastName,a->lastName);
strcpy(a->lastName,b->lastName);
strcpy(b->lastName,lastName);
}
我想按姓氏排序鏈接列表。現在,我只是試圖交換我的節點的姓氏,然後擔心與姓氏交換值和位置。當我編譯我的程序時,它運行時,我運行它我得到總線錯誤10.
我不完全確定爲什麼即時通訊總線錯誤。我看過它,它可能與我的strcmp有關?我不知道爲什麼,因爲當我初始化我的節點時,mableced lastName,並在交換功能內部進行mallocing。
鏈表具有虛擬頭節點,所以這就是爲什麼我有 ptr1 = List->next
代替ptr1 = List
listNodeData *initNode(int number,char *lastName,char *position)
{
listNodeData *newNode;
newNode = malloc(sizeof(listNodeData));
newNode->position = malloc(sizeof(char) * 20);
newNode->position = position;
newNode->lastName = malloc(sizeof(char) * 20);
newNode->lastName = lastName;
newNode->value = value;
newNode->next = NULL;
return (newNode);
}
:
試試這個? –
我現在編輯帖子 – FreeStyle4
只需要注意:你不需要line'typedef struct listNodeData listNodeData;',你已經有類型'listNodeData'定義爲'struct'上面的 – mvidelgauz