線形リストのソートについて
Posted: 2014年8月30日(土) 00:53
線形リストでバブルソートをしているのですが実行結果によってコアダンプをしたりしなかったりします。
やはりソート内がおかしいのでしょうか?指摘をお願いします。
やはりソート内がおかしいのでしょうか?指摘をお願いします。
#include <stdio.h>
#include <stdlib.h>
struct list{
char name[50];//名前
int age;//年齢
struct list *next;
struct list *back;
};
int main(void){
int t=1,k;
struct list *data;//初期構造体
data = (struct list *)malloc(sizeof(struct list));//領域確保
struct list *tmp = data;//保存用
struct list *tmp2;//保存用2
struct list *tmp3;//保存用3
tmp->back = NULL;
/*入力*/
puts("入力_______________________________________");
while(t){
printf("名前入力:");scanf("%s",tmp->name);
printf("年齢入力:");scanf("%d",&tmp->age);
printf("続行(y/n:1/0):");scanf("%d",&t);
tmp->next = NULL;
if(t==1){
struct list *data2;//新しい領域
data2 = (struct list *)malloc(sizeof(struct list));
tmp->next = data2;
data2->back = tmp;
tmp = tmp->next;
}
}
/*バブルソート*/
for(tmp=data;(tmp->next->next)==NULL;tmp=tmp->next){
for(tmp2=tmp->next;(tmp2->next)==NULL;tmp2=tmp2->next){
if((tmp->age)>(tmp2->age)){
if(tmp->back!=NULL)
tmp->back->next=tmp2;
if(tmp2->next!=NULL)
tmp2->next->back=tmp;
tmp3=tmp->next;
tmp->next=tmp->next->next;
tmp->back=tmp3;
tmp3=tmp2->back;
tmp2->back=tmp2->back->back;
tmp2->next=tmp3;
tmp=tmp->back;tmp2=tmp2->next;
}
}
}
/*出力*/
puts("データ___________________________________");
tmp = data;
while(tmp){
printf("%s、%d歳\n",tmp->name,tmp->age);
tmp = tmp->next;
}
return 0;
}