Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Struct+List ++

.pdf
Скачиваний:
16
Добавлен:
03.06.2015
Размер:
1.15 Mб
Скачать

Sort Bubble List 1

int BubleList(LIST *head, LIST *&ph) { int a, b, h, count=0, exch;

LIST *p,*q,*r,*t,*pend,*pmem; pend=0; ph=phead; while(pend!=ph) // r p q t -> r q p t

{ exch=0; pmem=ph; while(1) // q!=pend

{ p=pmem; q=p->next; pmem=q; if(q==pend)

{ pend=p; break; }

31

Sort Bubble List 2

a=p->x; b=q->x; if(p->x > q->x)

{r=p->prev; if(r!=0) r->next=q; t=q->next; if(t!=0) t->prev=p;

q->prev=r; q->next=p;

p->prev=q; p->next=t; // h=q->x; q->x=p->x; p->x=q->x; pmem=p;

if(p->prev==0) ph=p;

if(q->prev==0) ph=q; exch++; count++;

}

a=p->x; b=q->x; } // while 2 if(exch==0) break;

} // while 1

return count; // cmp } // BubleList

32

List Sort - method Insertion 1

int SortInsertList(LIST *head, LIST *&psort)

{int a, b, h, count=0, exch;

LIST *p, *q, *r, *t, *pend, *pmem; pend=0; ph=head; while(pend!=ph)

{ exch=0; pmem=ph;

 

while(1)

// q!=pend

 

{

p=pmem; q=p->next; pmem=q;

 

 

if(q==pend) { pend=p; break; }

 

 

a=p->x; b=q->x;

 

 

if(p->x > q->x)

 

{

r=p->prev;

if(r!=0) r->next=q;

 

 

t=q->next;

if(t!=0) t->prev=p;

 

 

q->prev=r; q->next=p; p->prev=q; p->next=t;

33

List Sort - Insertion 2

pmem=p; if(p->prev==0) ph=p; if(q->prev==0) ph=q; exch++; count++;

}

a=p->x; b=q->x; } // while 2

if(exch==0) break; } // while 1

return count;

} // SortInsertList

34

Алфавитно-частотный словарь

Алгоритм:

открыть файл на чтение;

FILE *file = fopen ( “book.dat", "r" );

char word[80];

n = fscanf ( file, "%s", word );

если файл закончился (feof(file)), то выйти из цикла; если слово найдено, увеличить счётчик (поле count); если слова нет в списке, то

создать новый узел (CreateNode) и заполнить поля найти узел, перед которым нужно вставить слово

(SearchItem);

добавить узел (InsertItem);

Вывести список слов, используя проход по списку.

35

Задача Иосифа Флавия

n=10 m=2

Убивают

2

4

6

8

10

3

7

1

9

Остаётся

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

36

Задача Иосифа Флавия

struct IOSIF { int x; IOSIF *next, *prev; };

 

IOSIF *CreateIosifList(IOSIF *&head, int n)

 

{ int i; IOSIF *p,*q;

 

 

for(i=0; i<n; i++)

 

{

p=(IOSIF *)malloc(sizeof(IOSIF));

 

 

p->x=i+1;

 

 

if(i==0) { head=p; p->next=p; p->prev=p; }

 

 

else { q->next=p; p->prev=q; }

 

 

q=p;

 

}

// for i

 

 

p->next=head; head->prev=p;

 

 

return head;

 

}

// CreateIosifList

37

 

Задача Иосифа Флавия

 

int DeleteIosifItem(IOSIF *&current, int m)

{

IOSIF *p=current; int i;

 

for(i=1; i<m; i++)

 

p=p->next;

 

p->prev->next=p->next;

 

p->next->prev=p->prev;

 

i=p->x;

 

current=p->next;

 

free(p);

 

return i;

}

 

38

Задача Иосифа Флавия

int Iosif(int n, int m) { int i, j, k; IOSIF *p;

CreateIosifList(p,n); i=0; k=n; while(k>1)

{ i++; if(i==m)

{ j=DeleteIosifItem(p,m); i=0; k--;

}

} // while return p->x;

} // Iosif

39

Задача Иосифа Флавия

printf(" n\\m"); for(m=1; m<=15; m++) printf("%3i ",m); printf("\n\n"); for(n=1; n<=10; n++)

{ printf(" %3i",n); for(m=1; m<=15; m++) { k=Iosif(n, m); printf("%3i ", k);

}

printf("\n");

}

40

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]