Zamolio bih ako netko može odvojiti vremena da mi napiše gdje su greške u zadatku (vjerojatno ih je više). U zadatku trebam sortirati listu uzlazno. Implementirao sam je pomoću pointera. Grešku mi javlja već kad trebam unijeti prvi element liste (cpp has encountered an error and needs to close). Ideja sortiranja:nađi najmanji element u listi i stavi ga u drugu listu na početak, pa ga izbriši iz prve liste
KOD:
[code:1]
typedef int elementtype;
typedef struct cell_tag {
elementtype element;
struct cell_tag *next;
}celltype;
typedef celltype *LIST;
typedef celltype *position;
//tu je implementacija ali je zbog zadaća nesmijem napisati
void INSERTION_SORT (LIST L1, LIST *L2) {
position p1, p2, temp;
elementtype x;
int br=0;
p1=FIRST(L1);
MAKE_NULL(L2);
p2=FIRST(*L2);
x=RETRIEVE(p1,L1);
while(EMPTY(L1)!=0) {
while(p1!=END(L1)) {
p1=NEXT(p1,L1);
if(RETRIEVE(p1,L1)<x)
x=RETRIEVE(p1,L1);
}
INSERT(x,p2,L2);
p2=NEXT(p2,*L2);
p1=FIRST(L1);
if(x==RETRIEVE(p1,L1))
{
temp=p1;
p1=NEXT(p1,L1);
DELETE(temp,&L1);
br=1;
}
while(p1!=END(L1) && br==0)
{
p1=NEXT(p1,L1);
if(x==RETRIEVE(p1,L1))
{
temp=p1;
p1=NEXT(p1,L1);
DELETE(temp,&L1);
br=1;
}
}
br=0;
p1=FIRST(L1);
}
}
int main (void)
{
celltype *L1,*L2;
position p1;
elementtype x;
char c[10];
L1=(celltype*)malloc(sizeof(celltype));
L2=(celltype*)malloc(sizeof(celltype));
int n,i;
printf("unesi broj clanova liste: ");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("unesi %d. element liste: ",i+1);
scanf("&d",&x);
INSERT(x,p1,&L1);
p1=NEXT(p1,L1);
}
INSERTION_SORT(L1,&L2);
p1=FIRST(L2);
printf("Sortirana lista: ");
for(i=0;i<n;i++)
{printf("%d ",RETRIEVE(p1,L2));
p1=NEXT(p1,L2);}
return 0;
}
[/code:1]
Zamolio bih ako netko može odvojiti vremena da mi napiše gdje su greške u zadatku (vjerojatno ih je više). U zadatku trebam sortirati listu uzlazno. Implementirao sam je pomoću pointera. Grešku mi javlja već kad trebam unijeti prvi element liste (cpp has encountered an error and needs to close). Ideja sortiranja:nađi najmanji element u listi i stavi ga u drugu listu na početak, pa ga izbriši iz prve liste
KOD:
Kod: |
typedef int elementtype;
typedef struct cell_tag {
elementtype element;
struct cell_tag *next;
}celltype;
typedef celltype *LIST;
typedef celltype *position;
//tu je implementacija ali je zbog zadaća nesmijem napisati
void INSERTION_SORT (LIST L1, LIST *L2) {
position p1, p2, temp;
elementtype x;
int br=0;
p1=FIRST(L1);
MAKE_NULL(L2);
p2=FIRST(*L2);
x=RETRIEVE(p1,L1);
while(EMPTY(L1)!=0) {
while(p1!=END(L1)) {
p1=NEXT(p1,L1);
if(RETRIEVE(p1,L1)<x)
x=RETRIEVE(p1,L1);
}
INSERT(x,p2,L2);
p2=NEXT(p2,*L2);
p1=FIRST(L1);
if(x==RETRIEVE(p1,L1))
{
temp=p1;
p1=NEXT(p1,L1);
DELETE(temp,&L1);
br=1;
}
while(p1!=END(L1) && br==0)
{
p1=NEXT(p1,L1);
if(x==RETRIEVE(p1,L1))
{
temp=p1;
p1=NEXT(p1,L1);
DELETE(temp,&L1);
br=1;
}
}
br=0;
p1=FIRST(L1);
}
}
int main (void)
{
celltype *L1,*L2;
position p1;
elementtype x;
char c[10];
L1=(celltype*)malloc(sizeof(celltype));
L2=(celltype*)malloc(sizeof(celltype));
int n,i;
printf("unesi broj clanova liste: ");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("unesi %d. element liste: ",i+1);
scanf("&d",&x);
INSERT(x,p1,&L1);
p1=NEXT(p1,L1);
}
INSERTION_SORT(L1,&L2);
p1=FIRST(L2);
printf("Sortirana lista: ");
for(i=0;i<n;i++)
{printf("%d ",RETRIEVE(p1,L2));
p1=NEXT(p1,L2);}
return 0;
}
|
|