: ; ; ; ; ; .
1. .
2. , .
3. .
4. .
5. .
6. .
,
, , , . :
- , [3, 4];
- ;
- ;
- .
( , , , ..) , , .
, , . . [4].
+ 2 , , .
. , .. , . .
. , , 0. . 7.
. |
. |
NULL |
1- |
7
, :
struct Inform {... }; // ( )
struct List1
{
Inform Inf;
|
|
List1 *pNext;
};
( pNext==NULL), , , . [3, 4].
. , ( ). , , . .
:
- (: , , , ). .
Microsoft Visual Studio 2013 ( Win32 Console Application) (Empty project). .cpp, .
:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct Sotr //
{
char fio[64]; //
char date[16]; //
char dolg[32]; //
double okl; //
};
struct List //
{
Sotr sotr; //
List *pNext; //
};
//
void addFirst(List *& pF, //
List* p) //
{
p->pNext = pF;
pF = p;
}
//
List * delFirst(List *&pF) //
{
if (pF == 0) return 0;
List *p = pF;
pF = pF->pNext;
return p;
}
//
bool add(List *&pF, List * pZad, List *p)
{
// true false
if (pZad == pF) //
{
p->pNext = pF;
pF = p;
return true;
}
List *pPred = pF; // pZad
while (pPred->pNext!= pZad && pPred->pNext)
pPred = pPred->pNext;
if (pPred->pNext == 0) return false; // pZad
p->pNext = pZad;
pPred->pNext = p;
return true;
}
// p
List * del(List*& pF, List *p) //
{
if (pF == 0) return 0;
if (pF == p) //
{
pF = pF->pNext;
return p;
}
else
{
List *pPred = pF; // p
while (pPred->pNext!= p && pPred->pNext)
pPred = pPred->pNext;
if (pPred->pNext == 0) return 0; // p
pPred->pNext = p->pNext;
return p;
}
while (delFirst(pF)); //
}
int main(int argc, char* argv[])
{
List *pF = 0; //
|
|
List *p;
//
char Ch; //
do
{
p = (List *)malloc(sizeof(List)); //
printf("\nFIO: ");
fflush(stdin); gets_s(p->sotr.fio, 63);
printf("Date: ");
fflush(stdin); gets_s(p->sotr.date, 15);
printf("Dolg: ");
fflush(stdin); gets_s(p->sotr.dolg, 31);
printf("Okl=");
fflush(stdin); scanf_s("%lf", &p->sotr.okl);
addFirst(pF, p); //
printf("For continue press Y or y else any key! ");
Ch = _getche(); //
} while (Ch == 'Y' || Ch == 'y');
//
for (List *pi = pF; pi; pi = pi->pNext) //
printf("\n%s %s %s oklad=%.2f", pi->sotr.fio, pi->sotr.date,
pi->sotr.dolg, pi->sotr.okl);
//
for (List *pi = pF; pi->pNext;)
{
//
double min = pi->sotr.okl;
List *pmin = pi;
for (List *pj = pi->pNext; pj; pj = pj->pNext)
if (pj->sotr.okl<min)
{
min = pj->sotr.okl;
pmin = pj;
}
if (pi!= pmin) // , pi
{
del(pF, pmin);
add(pF, pi, pmin);
}
else pi = pi->pNext;
}
//
printf("\nSrting:");
for (List *pi = pF; pi; pi = pi->pNext) //
printf("\n%s %s %s oklad=%.2f", pi->sotr.fio, pi->sotr.date,
pi->sotr.dolg, pi->sotr.okl);
printf("\nFor exit press any key ");
system("pause"); // ,
return 0;
}