アルファベット順にリストをソートしようとしていますが、いくつか問題があります。私は以下を持っています:アルファベット順にリンクされたリストを並べ替え
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と関係がありますか?なぜ私はノードを初期化したときにlastNameをmallocし、スワップ関数の内部でmallocしているのかわかりません。
これは、あなたがmallocのバッファを使用しない
newNode->lastName = malloc(sizeof(char) * 20);
newNode->lastName = lastName;
、私はあなたでは、初期化コードを 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);
}
を使用すると、リンクリストで使用されるデータを初期化する方法は? –
Ill投稿を今編集してください – FreeStyle4
ちょっとした注意: 'typedef struct listNodeData listNodeData;'という行は必要ありません。すでに 'struct'として定義されている' listNodeData'型がすでにあります。 – mvidelgauz