Jump to content

Вопрос->Списки


Recommended Posts

Приветствую! Впервые начал работать со списками и имею проблемку. Суть программы - сортировка списка простым однократным слиянием.

Вопрос в следующем. Правильно ли я присвоил очередное значение двумерного массива элементу списка.

#include <stdio.h>
#include <conio.h>
#include <string.h>


struct list                      // определение структурированного типа
{ 
int val;						 // значение элемента
list *next;                      // указатель
}A[16],*ph,*p,*res;



void sort(int A[], int n){
int i,found;                                    // Количество сравнений
     do {                                      // Повторять просмотр...
     found =0;
     for (i=0; i<n-1; i++)
               if (A > A[i+1]) {                 // Сравнить соседей
          int cc = A; A=A[i+1]; A[i+1]=cc;
          found++;                               // Переставить соседей
          }
     } while(found !=0); }                  //...пока есть перестановки




#define N 1                                      // Количество массивов

list *big_sort(list *A1, int n){
list *pph=NULL;
int j=0;
int i,m = n/N;
int **B = new int*[N];
for(int s =0; s < N; s++)
	B = new int[n/N];                             // Размерность массивов
for (i=0; i<n; i++) {A1=pph; B[i/m][i%m]=A1->val; A1=A1->next;}                  // Распределение    1 ВОПРОС
for (i=0; i<N; i++) sort(B,n/N);                 // Сортировка частей
     for (i=0; i<n; i++){                                    // Слияние
     for ( int k=0, j=0; j<N; j++)       // Индекс строки с минимальным
     if (B[j][0] < B[k][0]) k=j;                             // B[k][0]
     A1=pph; 											// 2 ВОПРОС
     A1->val = B[k][0];
     A1=A1->next;                                // Слияние элемента
     for (j=1; j<m; j++) B[k][j-1]=B[k] [j];  // Сдвиг сливаемой строки
     B[k][m-1]=10000;                            // Запись ограничителя
     }
     return A1;
     }



void main()
{
clrscr();

int i=0,m;
p=new list; ph=p;
for (i=0; i< 16; i++) {            // размещенных в статическом массиве
p->val=16-i;
p->next=new list; 
p=p->next;
}
p=ph;
for(m=0;m<16;m++){printf("%i ",p->val);p=p->next;}
p=ph;
res=big_sort(p,16);
printf("\n");
for(i=0;i<16;i++)
{printf("%d ",p->val);
p=p->next;
}

getch();
return;
}
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...