hey all,
i'm a newbie to C++ programming and i'm having some difficulties implementing this singly linked list.
what it has to do is accept:
nickname
email address
number of kills
and store them in a node of the linked list in order according to number of kills.
here's what i've got, it seems to accept the number of kills, but i run into problems when i try to accept anything else.
#include<iostream.h>
#include<process.h>
class Soldier
{
public :
Soldier * Sort(Soldier *);
void Show(Soldier *);
private:
Soldier * ptrNext;
int kills;
int sorter;
char nickname[25];
};
Soldier * Soldier::Sort(Soldier* temp)
{
Soldier * ptrNew;
Soldier* dummy1;
ptrNew = new Soldier;
cout << "\nEnter soldiers nickname\n";
cin >> nickname;
cout << "\nEnter number of kills for the month:\n";
cin >> sorter;
dummy1 = temp;
if (temp == NULL || dummy1->kills > sorter)
{
ptrNew->kills = sorter;
ptrNew->ptrNext=temp;
temp=ptrNew;
return temp;
}
else
{
Soldier * ptrCurrent;
Soldier * dummy;
ptrCurrent = temp;
dummy = ptrCurrent->ptrNext ;
while(ptrCurrent->ptrNext!=NULL)
{
if(dummy->kills > sorter)
{
ptrNew->ptrNext = ptrCurrent->ptrNext;
ptrNew->kills = sorter;
ptrCurrent->ptrNext = ptrNew;
return temp;
}
dummy = dummy->ptrNext ;
ptrCurrent = ptrCurrent->ptrNext;
}
ptrNew->kills = sorter;
ptrNew->ptrNext=NULL;
ptrCurrent->ptrNext=ptrNew;
}
return temp;
}
void Soldier::Show(Soldier *temp)
{
while(temp!=NULL)
{
cout << nickname << temp->kills << endl;
temp = temp->ptrNext;
}
}
void main()
{
Soldier *first=NULL,l1;
int choice;
while(1)
{
cout<<"-> [1] Insert Soldier \n-> [2] View Soldiers \n-> [3] Exit\n";
cin>>choice;
switch (choice)
{
case 1:
first=l1.Sort(first);
break;
case 2:
l1.Show(first);
break;
case 3:
exit(0);
}
}
}Hi Paynekiller! Welcome to TechTalk!
I just moderate this forum, so I wouldn't be able to help troubleshoot your code, but could you surround your code with [ code] and [ /code] tags? Like this:
Soldier *first=NULL,l1;
int choice;
while(1)
{
cout<<"-> [1] Insert Soldier \n-> [2] View Soldiers \n-> [3] Exit\n";
cin>>choice;
switch (choice)
{
case 1:
first=l1.Sort(first);
break;
case 2:
l1.Show(first);
break;
case 3:
exit(0);
It makes your code easier to read, and you can keep all of the indentation and the formatting that makes the code readible.
done a bit of rehashing and came up with this, it seems to be more on the right track, doesn't it??
i'm getting some parse errors in the addSoldier function, help!
#include <iostream>
#include <string.h>
class Soldier
{
public:
Soldier(){}
~Soldier(){}
void setKills(int setKills){kills = setKills;}
int getKills(){return kills;}
void setNickname(char setNickname[25]){nickname[25] = setNickname[25];}
char getNickname(){return nickname[25];}
void setEmail(char setEmail[50]){email[50] = setEmail[50];}
char getEmail(){return email[50];}
void setRank(char setRank[]);
char getRank(){return rank[10];}
void Show();
private:
int kills;
char rank[10];
char nickname[25];
char email[50];
Soldier * ptrNext;
};
void Soldier::setRank(char setRank[])
{
if(kills >= 1000)
char setRank[] = "General";
if(kills < 1000 && kills >= 500)
char setRank[] = "Captain";
if(kills < 500 && kills > 1)
char setRank[] = "Soldier";
if(kills <= 1)
char setRank[] = "Trainee";
strcpy(rank,setRank);
}
void Soldier::Show()
{
std::cout << nickname[25] << email[50] << kills << rank[10];
}
class LinkedList
{
public:
LinkedList(){ptrHead = NULL;}
Soldier * addSoldier(Soldier *);
int removeLowest();
private:
Soldier * ptrHead;
Soldier * ptrCurrent;
};
Soldier * LinkedList::addSoldier(Soldier * ptrTemp1)
{
Soldier * ptrNew = new Soldier;
Soldier * ptrTemp2;
cout << "\nEnter nickname\n";
char setNickname[25];
cin >> setNickname;
ptrNew->setNickname(char setNickname[25]);
cout << "\nEnter email address\n";
char setEmail[50];
cin >> setEmail;
ptrNew->setEmail(char setEmail[50]);
cout << "\nEnter number of kills\n";
int setKills;
cin >> setKills;
ptrNew->setKills(int setKills);
}
int LinkedList::removeLowest()
{
if(ptrHead == NULL)
{
std::cout << "No more soldiers to remove!/n";
return 0;
}
}
int main()
{
return 0;
}Hi,
I am Rammohan from Bangalore and working as a Technical lead in big IT firm .
Solution for your answer is follows:
I have provided you my own sample code for your request: Insert, Reverse, print the list, Sort the list
# include <stdio.h>
# include <stdlib.h>
struct node
{
int data;
struct node *link;
};
/* Insert the Value in the List */
struct node *insert(struct node *p, int n)
{
struct node *temp;
if(p==NULL)
{
p=(struct node *)malloc(sizeof(struct node));
if(p==NULL)
{
printf("Error\n");
exit(0);
}
p-> data = n;
p-> link = NULL;
}
else
p->link = insert(p->link,n);/* the while loop replaced by recursive call */
return (p);
}
/* a function to sort reverse list */
struct node *reverse(struct node *p)
{
struct node *prev, *curr;
prev = NULL;
curr = p;
while (curr != NULL)
{
p = p-> link;
curr-> link = prev;
prev = curr;
curr = p;
}
return(prev);
}
/* a function to sort a list */
struct node *sortlist(struct node *p)
{
struct node *temp1,*temp2,*min,*prev,*q;
q = NULL;
while(p != NULL)
{
prev = NULL;
min = temp1 = p;
temp2 = p -> link;
while ( temp2 != NULL )
{
if(min -> data > temp2 -> data)
{
min = temp2;
prev = temp1;
}
temp1 = temp2;
temp2 = temp2-> link;
}
if(prev == NULL)
p = min -> link;
else
prev -> link = min -> link;
min -> link = NULL;
if( q == NULL)
q = min; /* moves the node with lowest data value in the list pointed to by p to the list pointed to by q as a first node*/
else
{
temp1 = q;
/* traverses the list pointed to by q to get pointer to its last node */
while( temp1 -> link != NULL)
temp1 = temp1 -> link;
/* moves the node with lowest data value in the list pointed to by p to the list pointed to by q at the end of list pointed by q*/
temp1 -> link = min;
}
}
return (q);
}
void printlist ( struct node *p )
{
printf("The data values in the list are\n");
while (p!= NULL)
{
printf("%d\t",p-> data);
p = p-> link;
}
}
void main()
{
int n;
int x;
struct node *start = NULL ;
printf("Enter the nodes to be created \n");
scanf("%d",&n);
while ( n- > 0 )
{
printf( "Enter the data values to be placed in a node\n");
scanf("%d",&x);
start = insert ( start, x );
}
printf("The created list is\n");
printlist ( start );
}
Regards,Rammohan Alampally,