473,378 Members | 1,401 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,378 software developers and data experts.

SortByName function...

Hello everybody...

What´s wrong in may sort function??
I call this function, and after i list all stuct... but "sortbyname"
function doesn´t do nothing... why??
can you help me??

Thks
Kisses

void sortbyname (void)
{
int sort_Counter = 0, i = 0;
if(firsta==NULL)
{
puts("Nao existem Registos!");
return;
}
currenta = temp;
while(currenta != NULL)
{
sort_Counter++;
currenta = currenta->next;
}
currenta = temp;
for(;i < sort_Counter;i++)
{
while(currenta != NULL)
{
if(currenta->next != NULL)
{
if( strcmp(currenta->nome, currenta->next->nome) 0 )
{
temp = (struct aluno *) malloc( sizeof(struct aluno ) );
if( temp != NULL )
{
strcpy( temp->nome,currenta->nome );
strcpy( temp->curso, currenta->curso );
strcpy( currenta->nome, currenta->next->nome );
strcpy( currenta->curso, currenta->next->curso );
}
}
}
currenta = currenta->next;
}
currenta = temp;
}
}
Feb 1 '07 #1
2 1542
On 1 Feb, 14:57, "Maria Mela" <h...@netvisao.ptwrote:
Hello everybody...

What´s wrong in may sort function??
I call this function, and after i list all stuct... but "sortbyname"
function doesn´t do nothing... why??
can you help me??

Thks
Kisses
I haven't looked at the code in great detail, but there are a few
things I noticed that may point you on your way.
void sortbyname (void)
{
int sort_Counter = 0, i = 0;
if(firsta==NULL)
{
puts("Nao existem Registos!");
return;
}
currenta = temp;
Are you sure "temp" is what you mean here? By the look of it you would
be better off with "firsta", which I am assuming is the pointer to the
first item in your list.
while(currenta != NULL)
{
sort_Counter++;
currenta = currenta->next;
}
currenta = temp;
Same comment here.
for(;i < sort_Counter;i++)
{
while(currenta != NULL)
{
if(currenta->next != NULL)
{
if( strcmp(currenta->nome, currenta->next->nome) 0 )
{
temp = (struct aluno *) malloc( sizeof(struct aluno ) );
if( temp != NULL )
{
strcpy( temp->nome,currenta->nome );
strcpy( temp->curso, currenta->curso );
strcpy( currenta->nome, currenta->next->nome );
strcpy( currenta->curso, currenta->next->curso );
Firstly - this all seems a bit unnecessary. What you are doing here is
leaving the items where they are and swapping the text over. The
normal technique with a linked list is to move the pointers around so
the items themselves don't have to move.

For example, suppose A points to B, B points to C, and C points to D.
You decide that B and C are the wrong way round. So you change it so
that A points to C, C points to B, and B points to D. There is no need
to change the text of any of the items, or to move them around, you
just need to change what A, B and C point to.

If you really do want to swap the text over, I think you have missed
out two lines. You need, after the lines above, to copy the text from
temp to currenta -next.
}
}
}
currenta = currenta->next;
}
currenta = temp;
}

}
Hope that helps.
Paul.

Feb 1 '07 #2
Maria Mela wrote:
void sortbyname (void)
{
int sort_Counter = 0, i = 0;
if(firsta==NULL)
{
puts("Nao existem Registos!");
return;
}
currenta = temp;
while(currenta != NULL)
{
sort_Counter++;
currenta = currenta->next;
}
currenta = temp;
for(;i < sort_Counter;i++)
{
while(currenta != NULL)
{
if(currenta->next != NULL)
{
if( strcmp(currenta->nome, currenta->next->nome) 0 )
{
temp = (struct aluno *) malloc( sizeof(struct aluno ) );
if( temp != NULL )
{
strcpy( temp->nome,currenta->nome );
strcpy( temp->curso, currenta->curso );
strcpy( currenta->nome, currenta->next->nome );
strcpy( currenta->curso, currenta->next->curso );
Here you do not copy temp back to currenta->next which seems to be the
main problem.
}
}
}
currenta = currenta->next;
}
currenta = temp;
}
}
General observation is that you do not use local variable properly,
instead you have globals all over the place. This is rather bad style.

Also, you have memory leaks here: You never free "temp" in your routine.
There is no need to allocate it every time. Just use a declaration like
struct aluno temp;
and later write
strcpy(temp.nome, currenta->nome);
etc.

Finally, you have programmed a bubble sort for linked lists. Bad idea.
For linked lists, mergesort is the right choice. I opened a thread two
weeks ago in comp.lang.c about an efficient mergesort of linked lists.
Maybe you have a look. Some people put some nice ideas there.
Feb 2 '07 #3

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

3
by: domeceo | last post by:
can anyone tell me why I cannot pass values in a setTimeout function whenever I use this function it says "menu is undefined" after th alert. function imgOff(menu, num) { if (document.images) {...
5
by: phil_gg04 | last post by:
Dear Javascript Experts, Opera seems to have different ideas about the visibility of Javascript functions than other browsers. For example, if I have this code: if (1==2) { function...
2
by: laredotornado | last post by:
Hello, I am looking for a cross-browser way (Firefox 1+, IE 5.5+) to have my Javascript function execute from the BODY's "onload" method, but if there is already an onload method defined, I would...
2
by: sushil | last post by:
+1 #include<stdio.h> +2 #include <stdlib.h> +3 typedef struct +4 { +5 unsigned int PID; +6 unsigned int CID; +7 } T_ID; +8 +9 typedef unsigned int (*T_HANDLER)(void); +10
8
by: Olov Johansson | last post by:
I just found out that JavaScript 1.5 (I tested this with Firefox 1.0.7 and Konqueror 3.5) has support not only for standard function definitions, function expressions (lambdas) and Function...
3
by: Beta What | last post by:
Hello, I have a question about casting a function pointer. Say I want to make a generic module (say some ADT implementation) that requires a function pointer from the 'actual/other modules'...
2
by: f rom | last post by:
----- Forwarded Message ---- From: Josiah Carlson <jcarlson@uci.edu> To: f rom <etaoinbe@yahoo.com>; wxpython-users@lists.wxwidgets.org Sent: Monday, December 4, 2006 10:03:28 PM Subject: Re: ...
28
by: Larax | last post by:
Best explanation of my question will be an example, look below at this simple function: function SetEventHandler(element) { // some operations on element element.onclick = function(event) {
4
by: alex | last post by:
I am so confused with these three concept,who can explained it?thanks so much? e.g. var f= new Function("x", "y", "return x * y"); function f(x,y){ return x*y } var f=function(x,y){
1
by: CloudSolutions | last post by:
Introduction: For many beginners and individual users, requiring a credit card and email registration may pose a barrier when starting to use cloud servers. However, some cloud server providers now...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 3 Apr 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome former...
0
by: ryjfgjl | last post by:
In our work, we often need to import Excel data into databases (such as MySQL, SQL Server, Oracle) for data analysis and processing. Usually, we use database tools like Navicat or the Excel import...
0
by: taylorcarr | last post by:
A Canon printer is a smart device known for being advanced, efficient, and reliable. It is designed for home, office, and hybrid workspace use and can also be used for a variety of purposes. However,...
0
by: aa123db | last post by:
Variable and constants Use var or let for variables and const fror constants. Var foo ='bar'; Let foo ='bar';const baz ='bar'; Functions function $name$ ($parameters$) { } ...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.