⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 listp.cpp

📁 Data Abstraction & Problem Solving with C++源码
💻 CPP
字号:
// *********************************************************// Implementation file ListP.cpp for the ADT list.// Pointer-based implementation.// *********************************************************#include "ListP.h"     // header file#include <cstddef>     // for NULL#include <cassert>     // for assert()List::List(): size(0), head(NULL){}  // end default constructorList::List(const List& aList): size(aList.size){   if (aList.head == NULL)      head = NULL;  // original list is empty   else   {  // copy first node      head = new ListNode;      head->item = aList.head->item;      // copy rest of list      ListNode *newPtr = head;  // new list pointer      // newPtr points to last node in new list      // origPtr points to nodes in original list      for (ListNode *origPtr = aList.head->next;                   origPtr != NULL;                   origPtr = origPtr->next)      {  newPtr->next = new ListNode;         newPtr = newPtr->next;         newPtr->item = origPtr->item;      }  // end for      newPtr->next = NULL;   }  // end if}  // end copy constructorList::~List(){   while (!isEmpty())      remove(1);} // end destructorbool List::isEmpty() const{   return size == 0;}  // end isEmptyint List::getLength() const{   return size;}  // end getLengthList::ListNode *List::find(int index) const// --------------------------------------------------// Locates a specified node in a linked list.// Precondition: index is the number of the// desired node.// Postcondition: Returns a pointer to the desired// node. If index < 1 or index > the number of// nodes in the list, returns NULL.// --------------------------------------------------{   if ( (index < 1) || (index > getLength()) )      return NULL;   else  // count from the beginning of the list   {  ListNode *cur = head;      for (int skip = 1; skip < index; ++skip)         cur = cur->next;      return cur;   }  // end if}  // end findvoid List::retrieve(int index,                    ListItemType& dataItem) const throw(ListIndexOutOfRangeException){   if ((index < 1) || (index > getLength()))      throw ListIndexOutOfRangeException(              "ListIndexOutOfRangeException: retrieve index out of range");   else   {  // get pointer to node, then data in node      ListNode *cur = find(index);      dataItem = cur->item;   }  // end if} // end retrievevoid List::insert(int index, ListItemType newItem) throw(ListIndexOutOfRangeException){   int newLength = getLength() + 1;   if ((index < 1) || (index > newLength))      throw ListIndexOutOfRangeException(              "ListIndexOutOfRangeException: insert index out of range");   else   {  // create new node and place newItem in it      ListNode *newPtr = new ListNode;      size = newLength;      newPtr->item = newItem;      // attach new node to list      if (index == 1)      {  // insert new node at beginning of list         newPtr->next = head;         head = newPtr;      }      else      {  ListNode *prev = find(index-1);         // insert new node after node         // to which prev points         newPtr->next = prev->next;         prev->next = newPtr;      }  // end if   } // end if} // end insertvoid List::remove(int index) throw(ListIndexOutOfRangeException){   ListNode *cur;   if ((index < 1) || (index > getLength()))      throw ListIndexOutOfRangeException(               "ListIndexOutOfRangeException: remove index out of range");   else   {  --size;      if (index == 1)      {  // delete the first node from the list         cur = head;  // save pointer to node         head = head->next;      }      else      {  ListNode *prev = find(index-1);         // delete the node after the         // node to which prev points         cur = prev->next;  // save pointer to node         prev->next = cur->next;      }  // end if      // return node to system      cur->next = NULL;      delete cur;      cur = NULL;   } // end if}  // end remove

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -