| | |
help with this code of link list
Please support our C++ advertiser: Intel Parallel Studio Home
![]() |
•
•
Join Date: Apr 2005
Posts: 129
Reputation:
Solved Threads: 0
Write a menu driven program that manipulates a list of students and has the following options:
1- Build list from file
2- Build list from keyboard
3- Print list
Use the standard list ADT to build the student list. Student information are (name, level, ID) information
please help with this quistion i try to write the code there is 0 error 0 warnings
but there is aproblem with two function :
1-buildList()
2-printList()
the code:
1- Build list from file
2- Build list from keyboard
3- Print list
Use the standard list ADT to build the student list. Student information are (name, level, ID) information
please help with this quistion i try to write the code there is 0 error 0 warnings
but there is aproblem with two function :
1-buildList()
2-printList()
the code:
C++ Syntax (Toggle Plain Text)
#include<iostream> #include<fstream> using namespace std; // Node Declaration template <class TYPE> struct NODE { TYPE data; NODE *link; }; // End of Node Declaration // List Class Declaration template <class TYPE, class KTYPE> class List { private: NODE<TYPE> *head; NODE<TYPE> *pos; NODE<TYPE> *rear; int count; // Function Declarations bool _insert (NODE<TYPE> *pPre, TYPE dataIn); void _delete (NODE<TYPE> *pPre, NODE<TYPE> *pLoc, TYPE *dataOutPtr); bool _search (NODE<TYPE> **pPre, NODE<TYPE> **pLoc, KTYPE key); public: List (void); ~List (void); int addNode (TYPE dataIn); bool removeNode (KTYPE key, TYPE *dataOutPtr); bool retrieveNode (KTYPE Argu, TYPE& dataOut); bool getNext (int fromWhere, TYPE& dataOut); int listCount (void); bool emptyList (void); bool fullList (void); }; // class List // End of List Class Declaration /* =============== List Constructor ============== Initialize the list. Pre Class is being instantiated Post Class instantiated and initialized */ template <class TYPE, class KTYPE> List<TYPE, KTYPE> :: List (void) { // Statements head = NULL; pos = NULL; rear = NULL; count = 0; } // List Constructor /* ==================== addNode =================== Inserts data into linked list. Pre dataIn contains data to be inserted Post Data inserted or error Return -1 if overflow, 0 if successful, 1 if duplicate key */ template <class TYPE, class KTYPE> int List<TYPE, KTYPE> :: addNode (TYPE dataIn) { // Local Definitions bool found; bool success; NODE<TYPE> *pPre; NODE<TYPE> *pLoc; // Statements found = _search (&pPre, &pLoc, dataIn.key); if (found) // Duplicate keys not allowed return (+1); success = _insert (pPre, dataIn); if (!success) // Overflow return (-1); return (0); } // addNode /* ===================== _insert ==================== Inserts data into a new node in the linked list. Pre Insertion location identified by pPre dataIn contains data to be inserted Post data inserted in linked list or overflow Return true if successful, false if overflow */ template <class TYPE, class KTYPE> bool List<TYPE, KTYPE> :: _insert (NODE<TYPE> *pPre, TYPE dataIn) { // Local Definitions NODE <TYPE> *pNew; // Statements if (! (pNew = new NODE<TYPE>)) return false; pNew->data = dataIn; pNew->link = NULL; if (pPre == NULL) { // Adding before first node or to empty list. pNew->link = head; head = pNew; } // if pPre else { // Adding in middle or at end pNew->link = pPre->link; pPre->link = pNew; } // if else // Now check for add at end of list if (pNew->link == NULL) // Adding to empty list. Set rear rear = pNew; count++; return true; } // _insert /* ================== removeNode ================== Removes data from linked list. Pre dltkey is identifier of node to be deleted pDataOut is pointer to data variable to receive a copy of the deleted data Post data copied to output variable and node deleted or not found Return false if not found true if deleted */ template <class TYPE, class KTYPE> bool List<TYPE, KTYPE> :: removeNode (KTYPE dltkey, TYPE *pDataOut) { // Local Definitions bool found; NODE<TYPE> *pPre; NODE<TYPE> *pLoc; // Statements found = _search (&pPre, &pLoc, dltkey); if (found) _delete (pPre, pLoc, pDataOut); return found; } // removeNode /* =================== _delete ================== Deletes data from a linked list and returns data to calling module. Pre pPre is a pointer to predecessor node pLoc is a pointer to target node pDataOut is pointer to output data area Post Data have been deleted and returned Data memory has been recycled */ template <class TYPE, class KTYPE> void List<TYPE, KTYPE> :: _delete (NODE<TYPE> *pPre, NODE<TYPE> *pLoc, TYPE *pDataOut) { // Statements *pDataOut = pLoc->data; if (pPre == NULL) // Deleting first node head = pLoc->link; else // Deleting any other node pPre->link = pLoc->link; // Test for deleting last node if (pLoc->link == NULL) rear = pPre; count--; delete pLoc; return; } // _delete /* =================== retrieveNode ================== Interface to search function. Pre key is the search argument dataOut is variable to receive data Post dataOut contains located data if found if not found, contents are unchanged Return true if successful, false if not found */ template <class TYPE, class KTYPE> bool List<TYPE, KTYPE> :: retrieveNode (KTYPE key, TYPE& dataOut) { // Local Definitions bool found; NODE <TYPE> *pPre; NODE <TYPE> *pLoc; // Statements found = _search (&pPre, &pLoc, key); if (found) dataOut = pLoc->data; return found; } // retrieveNode /* ==================== _search =================== Searches list and passes back address of node containing target and its logical predecessor. Pre pPre is pointer variable for predecessor pLoc is pointer variable for found node key is search argument Post pLoc points to first node equal/greater key -or- null if target > key of last node pPre points to largest node smaller than key -or- null if target < key of first node Return true if successful, false if not found */ template <class TYPE, class KTYPE> bool List<TYPE, KTYPE> :: _search (NODE<TYPE> **pPre, NODE<TYPE> **pLoc, KTYPE key) { // Statements *pPre = NULL; *pLoc = head; if (count == 0) return false; // Test for argument > last node in list if (key > rear->data.key) { *pPre = rear; *pLoc = NULL; return false; } // if while (key > (*pLoc)->data.key) { // Have not found search argument location *pPre = *pLoc; *pLoc = (*pLoc)->link; } // while if (key == (*pLoc)->data.key) // argument found--success return true; else return false; } // _search /* =============== emptyList ============== Returns Boolean indicating whether the list is empty. Pre Nothing Return true if empty, false if list has data */ template<class TYPE, class KTYPE> bool List<TYPE, KTYPE> :: emptyList (void) { // Statements return (count == 0); } // emptyList /* =================== fullList ================== Returns Boolean indicating whether the list is full or has room for more data. Pre Nothing Return true if full, false if room for another node */ template <class TYPE, class KTYPE> bool List<TYPE, KTYPE> :: fullList (void) { // Local Definitions NODE<TYPE> *temp; // Statements if (temp = new NODE<TYPE>) { delete temp; return false; } // if // Dynamic memory full return true; } // fullList /* ==================== listCount ==================== Returns integer representing number of nodes in list. Pre Nothing Return count for number of nodes in list */ template <class TYPE, class KTYPE> int List<TYPE, KTYPE> :: listCount(void) { // Statements return count; } // listCount /* ====================== getNext ===================== getNext traverses a linked list. Each call either starts at the beginning of the list or returns the location of the element in the list that was last returned. Pre fromWhere is 0 to start at the first element dataOut is reference to data variable Post if another element, address placed in output area Return true if another element located, false if end of list */ template <class TYPE, class KTYPE> bool List<TYPE, KTYPE> :: getNext (int fromWhere, TYPE& dataOut) { // Local Definitions bool success; // Statements if (fromWhere == 0) { // Start from first node if (count == 0) success = false; else { pos = head; dataOut = pos->data; success = true; } // if else } // if fromwhere is zero else { // Continue from current position if (pos->link == NULL) success = false; else { pos = pos->link; dataOut = pos->data; success = true; } // if else } // if fromWhere else return success; } // getNext /* =============== Destructor ============== Deletes all data in list and recycles memory Pre List is being deleted Post Data and class structure have been deleted */ template<class TYPE, class KTYPE> List<TYPE, KTYPE > :: ~List (void) { // Local Definitions NODE<TYPE> *deletePtr; // Statements if (head) { while (count > 0) { deletePtr = head; head = head->link; count--; delete deletePtr; } // while } // if } // Destructor const int STR_MAX=100; struct STUDENT { int key; char name[STR_MAX]; char level[STR_MAX]; }; /* =============== instr ============== */ void instr(List<STUDENT,int>&list) { STUDENT std; char ch; cout<<"DO you want to enter a new student(y/n)\n"; cin>>ch; while (ch=='y') { cout<<"Enter the ID :"<<" "; cin>>std.key; cout<<"Enter the name:"<<" "; cin>>std.name; cout<<"Enter the level:"<<" "; cin>>std.level; cout<<"DO you want to enter another student(y/n)\n"; cin>>ch; } return; } /* =============== buildList ============== */ void buildList (List<STUDENT,int>&list) { //local definitions ifstream Data; int addResult; STUDENT std; //statement Data.open("student.dat"); if(!Data) { cerr<<"Error opening input file\n"; exit(1); }//end if while(Data>>std.key) { //insert into list addResult=list.addNode (std); if(addResult!= 0) { if(addResult== -1) { cout<<"memory over flow \n"; exit(-1); } else cout<<"ID:" <<std.key <<"not added\n"; }} //end while cout<<endl; return; }//buildList /* =============== printList ============== PRINTS THE LIST Pre list has been created Post list printed */ void printList (List<STUDENT,int>&list) { STUDENT std; if(list.listCount()==0) cout<<"THE LIST IS EMPTY\n"; else { list.getNext(0,std); do { cout<<std.key<<" " <<std.name<<" " <<std.level<<endl; }while (list.getNext(1,std)); cout<<"end of the list"<<endl; }//else return; } /* =============== getChoice ============== PRINTS THE MENU OF CHOICES Pre nothing Post menu printed and choice returned */ int getChoice() { int choice; bool valid; cout<<"***************MENU**********************"<<endl; cout<<" 1- Build list from file\t" <<"2- Build list from keyboard\t" <<"3- Print list\n" <<"4- exit"<<endl; cout<<"ENTER YOUR CHOICE"<<endl; do{ cin>>choice; switch(choice) { case 1: case 2: case 3: case 4: valid=true; break; default: valid=false; cout<<"INVALID CHOICE TRY AGAIN"<<endl; break; }//switch }while(!valid); return choice; }//getChoice /* =============== process ============== PRINTS THE MENU OF CHOICES Pre list has been created Post all of user's choices executed */ void process (List<STUDENT,int>&list) { int choice; do { choice=getChoice(); switch(choice) { case 1: buildList(list); break; case 2: instr(list); break; case 3: printList(list); break; case 4: break; }//switch }while(choice!=4); return; }//process //prototype declarations void instr (List<STUDENT,int>&list); void printList(List<STUDENT,int>&list); int getChoice (void); void buildList (List<STUDENT,int>&list); void process (List<STUDENT,int>&list); int main() { //local definitions List<STUDENT,int>list; //statement process(list); buildList(list); instr(list); printList(list); return 0; }//MAIN
![]() |
Similar Threads
- Link list taking an object... (C)
- Link List Sorting Problem (C++)
- Link List Insert problems (C++)
- how to reverse link list using recurtion (C)
- Using a class to add/delete/show numbers in a Link List (C++)
Other Threads in the C++ Forum
- Previous Thread: Please Help With Bisection Method!
- Next Thread: wolf packs request for me
| Thread Tools | Search this Thread |
Tag cloud for C++
api application array arrays based beginner binary bmp c++ c/c++ calculator char char* class classes code compile compiler console conversion convert count data delete deploy dll download dynamiccharacterarray email encryption error file format forms fstream function functions game givemetehcodez graph gui homeworkhelp iamthwee ifstream input int java lib library lines list loop looping loops map math matrix memory newbie news number numbertoword output pointer problem program programming project python random read recursion recursive reference return rpg simple sorting spoonfeeding string strings struct temperature template templates text text-file tree url variable vector video visual visualstudio void win32 windows winsock wordfrequency wxwidgets





