Код: Выделить всё
#include
#include
typedef struct Node{
int data;
Node* link;
}NODE;
typedef struct List{
NODE* first;
NODE* last;
}LIST;
void Init(LIST &l){
l.first = l.last = NULL;
}
NODE* GetNode(int x){
NODE* p;
p = (NODE*)malloc(sizeof(NODE));
if (p==NULL){
printf("Khong du bo nho!"); return NULL;
}
p->data = x;
p->link = NULL;
return p;
}
void AddLast(LIST &l, NODE* new_ele){
if (l.first==NULL){
l.first = new_ele;
l.last = l.first;
}
else {
l.last->link = new_ele;
l.last = new_ele;
}
}
NODE* InsertLast(LIST &l, int x){
NODE* new_ele = GetNode(x);
if (new_ele == NULL){
return NULL;
}
AddLast(l,new_ele);
return new_ele;
}
void AddNumber(LIST &l, int a[], int n){
NODE *p;
for (int i=0; idata);
p = p->link;
}
printf("\n");
}
void DistributeList(LIST &l, LIST &l1, LIST &l2){
NODE *p;
do{
p = l.first;
l.first = p->link; p->link = NULL;
AddLast(l1,p);
}while((l.first)&&(p->datadata));
if (l.first)
DistributeList(l,l2,l1);
else
l.last = NULL;
}
void MergeList(LIST &l, LIST &l1, LIST &l2){
NODE* p;
while ((l1.first)&&(l2.first)){
if (l1.first->datadata){
p = l1.first;
l1.first = p->link;
}
else{
p = l2.first;
l2.first = p->link;
}
p->link = NULL;
AddLast(l,p);
};
if (l1.first){
l.last->link = l1.first;
l.last = l1.last;
}
else if (l2.first){
l.last->link = l2.first;
l.last = l2.last;
}
}
void NaturalMergeSort(LIST &l){
LIST l1, l2;
if (l.first == l.last) return;
Init(l1);
Init(l2);
DistributeList(l,l1,l2);
NaturalMergeSort(l1);
NaturalMergeSort(l2);
MergeList(l,l1,l2);
}
int main(){
LIST l;
Init(l);
int a[] = {12,2,8,5,1,6,4,15};
int n = sizeof(a)/sizeof(a[0]);
AddNumber(l,a,n);
ShowNumber(l);
NaturalMergeSort(l);
ShowNumber(l);
}
Здесь сегментация
Код по-прежнему работает нормально при отладке, но когда я вхожу в NaturalMergeSort в функции DistributeList я обнаружил ошибку сегментации в строке AddLast(l1,p).
Это то, что я получил в терминале, когда пытался запустить :
Мой терминал
Я пытался это исправить, но эта ошибка постоянно возникает, пожалуйста, помогите мне ее исправить.
Подробнее здесь: https://stackoverflow.com/questions/787 ... -sort-in-c