C++ linked list project


DevX Home    Today's Headlines   Articles Archive   Tip Bank   Forums   

Results 1 to 1 of 1

Thread: C++ linked list project

  1. #1
    Join Date
    May 2006
    Posts
    1

    C++ linked list project

    Hey guys,

    Im doing a project for collage and i am running into a few difficulties. i have to be able to go back and forwards through a list by using the "f" and "r" keys. iv hacken out a bit of code to do go right but i have to pass it by reference in order to get it to work, which only ends up changing the head and causing a load of side effects. as far as going left is concernds, it doesent work at all!!


    Here is the full code:
    The functions i am having trouble with are called "moveright" and "moveleft".

    Code:
    #include <iostream>
    #include <conio.h>
    #include <string>
    
    using namespace std;
    
    struct Node {
    	string data;
    	struct Node * next;
    	struct Node * prev;
    };
    typedef struct Node entry ;
    
    
    string UCase(string s);
    void list(entry * H);
    void del(entry * H,string OldName);
    void rename(entry * H, string old, string newname);
    void moveright(entry *&H);
    void Head(entry * H);
    void tail (entry * H);
    void moveleft(entry * H);
    void inalpha(string newname, entry * &H);
    
    main()
    {	entry *head=NULL, *pos=head;
     	string Command,OldName,NewName ;
    	do {
    		cout << "Next Command? " ;
    		cin >> Command ;
    		Command = UCase(Command) ;
    		if(Command == "L") {
    			moveleft(head);
    		} else if(Command == "R") {
    			moveright(head);
    		} else if(Command == "H") {
    			Head(head);
    		} else if(Command == "T") {
    			tail (head);
    		} else if(Command == "RENAME") {
    			cout << "OldName? " ;
    			cin >> OldName ;
    			cout << "NewName? " ;
    			cin >> NewName ;
    			rename(head,OldName,NewName);
    		} else if(Command == "NEW") {
    			cout << "Name? " ;
    			cin >> OldName ;
    			inalpha(OldName, head);		
    		} else if(Command =="DELETE") {
    			cout << "Name? " ;
    			cin >> OldName ;
    			del(head,OldName);
    		} else if(Command == "LIST") {
    			 list(head);
    		}
    	}while(Command != "END") ;
    }
    
    string UCase(string s)
    {	int i ;
    	for(i=0 ; i < s.length() ; i++) {
    		s[i] = toupper(s[i]) ;
    	}
    	return s;
    }
    
    		  
    void list(entry * H)
    {	entry *pos = H ;
    	while(pos != NULL) {
    		cout << pos->data <<'\t' ;
    		pos = pos->next ;
    	}
    	cout<<endl;	
    }	
    
    void del(entry * H,string OldName)
    {	entry*pos, *prev, *firstEntry=H, *first;
    	if(H != 0){
    		prev=NULL;
    		pos=H;
    		while (pos != NULL && pos->data != OldName){
    			prev=pos;
    			pos=pos->next;
    	}
    		if(pos == NULL){
    				cout<<"Name is not in the list"<<endl;
    				//break;
    		}else if(pos != NULL){
    			if(prev == NULL){
    				H = pos->next;
    				delete pos;
    				//break;
    			}else{
    				prev->next=pos->next;
    				delete pos;
    				//break;
    			}
    		}
    		
    	}	
    }
    
    void rename(entry * H, string old, string newname)
    {	entry*pos=H;
    	bool inlist(false);
    	while (pos != NULL){
    			if (pos->data != newname){
    				pos=pos->next;
    			}else if (pos->data == newname){
    				inlist=true;
    				break;
    			}
    		}	
    	pos=H;
    	while (pos != NULL){
    		if(pos->data==old){
    			if (inlist==false){
    				pos->data=newname;
    				break;
    			}else if (inlist==true){
    				cout<<"Already in list"<<endl;
    				break;
    			}
    		}else{
    			pos=pos->next;
    		}
    
    }
    }
    
    
    /*void moveright(entry * &H)
    {	entry* current;
    	current=H;
    	if (current->next != NULL){
    		H=current->next;
    		cout<<current->data<<endl;
    	}else{
    		cout<<current->data<<endl;
    		cout<<"End of list"<<endl;	
    	}
    }*/
    
    
    
    void moveleft(entry * H)
    {	entry *current, *T, *pre;
    	current=H;
    	if(current->prev != NULL){
    		while(current->prev !=NULL){
    			pre=current;
    			current=current->next;
    		}
    		current=T;
    		current->prev=pre;
    		current=pre;
    		cout<<current->data<<endl;
    	}else{
    		cout<<current->data<<endl;
    		cout<<"Start of list"<<endl;
    	}
    }
    
    
    
    void Head(entry * H)
    {	cout<<H->data<<endl;
    }
    
    
    void tail (entry * H)
    {	entry * pos=H;
    	while (pos->next != NULL){
    		pos=pos->next;
    	}
    		cout<<pos->data<<endl;
    }	
    
    void moveright(entry *&H)
    {	entry *pos=H;
    	if(pos != NULL){
    		pos=pos->next;
    		cout<<pos->data<<endl;
    	}else{
    		cout<<pos->data<<endl;
    		cout<<"End Of List"<<endl;
    	}
    	H=pos;
    }
    
    void inalpha(string newname, entry * &H)								
    {	entry *e, *pos=H, *prev ;
    	bool inlist(false);
    	while (pos != NULL){
    		if (pos->data != newname){
    			pos=pos->next;
    		}else if (pos->data == newname){
    			inlist=true;
    			break;
    		}
    	}
    
    	if(inlist==false){
    		e=new entry;
    		e->data=newname;
    		e->next=NULL;
    		if (H==0){
    			H=e;
    		}else{
    			prev=NULL;
    			pos=H;
    			while(pos != NULL && pos->data <= newname){
    				prev=pos;
    				pos=pos->next;
    			}
    			if (prev == NULL){
    				e->next=H;
    				H=e;
    			}else{
    				e->next=prev->next;
    				prev->next=e;
    			}
    		}
    	}else if(inlist==true){
    		cout<<"Sheet is already in the list"<<endl;
    	}
    }
    has anybody got any idea as to how i can do this?

    thanks,
    Ray
    Last edited by boyracer87; 05-09-2006 at 01:50 PM.

Similar Threads

  1. Replies: 1
    Last Post: 11-04-2005, 06:19 AM
  2. Problem with linked lists and iterators
    By white94cam in forum C++
    Replies: 2
    Last Post: 03-30-2005, 11:02 PM
  3. EMERGENT.... double linked list
    By mary in forum Java
    Replies: 0
    Last Post: 07-20-2001, 08:42 AM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
HTML5 Development Center
 
 
FAQ
Latest Articles
Java
.NET
XML
Database
Enterprise
Questions? Contact us.
C++
Web Development
Wireless
Latest Tips
Open Source


   Development Centers

   -- Android Development Center
   -- Cloud Development Project Center
   -- HTML5 Development Center
   -- Windows Mobile Development Center