c++语言程序设计(第四版)郑莉链表的实现

程序是在GitHub上找到的,也不知道是不是教材提供的源码,原链接如下:
链接

但是我在这里面找到了一处错误,就是打印链表时不显示最后一个节点

//LinkedList.h
#ifndef LINKEDLIST_H
#define LINKEDLIST_H//#include <cstdio>
#include <cassert>
#include "Node.h"template<class T>
class LinkedList{
private:Node<T>*front,*rear;Node<T>*prevPtr,*currPtr;int size;int position;Node<T>*newNode(const T&item,Node<T>*ptrNext=NULL);void freeNode(Node<T>*p);void copy(const LinkedList<T>& L);public:LinkedList();LinkedList(const LinkedList<T>& L);~LinkedList();LinkedList<T>& operator=(const LinkedList<T>&L);int getSize()const;bool isEmpty() const;void reset(int pos=0);void next();bool endOfList() const;int currentPosition(void) const;void insertFront(const T &item);void insertRear(const T &item);void insertAt(const T &item);void insertAfter(const T &item);T deleteFront();void deleteCurrent();T& data();const T& data() const;void clear();
};template<class T>
void LinkedList<T>::freeNode(Node<T> *p){delete p;
}template<class T>
void LinkedList<T>::copy(const LinkedList<T> &L){front = L.front;rear = L.front;currPtr = L.currPtr;prevPtr = L.prevPtr;size = L.size;position = L.position;
}template<class T>
LinkedList<T>::LinkedList():front(NULL), rear(NULL), prevPtr(NULL), currPtr(NULL), size(0), position(0)   {}template<class T>
LinkedList<T>::LinkedList(const LinkedList<T> &L){copy(L);
}template<class T>
LinkedList<T>::~LinkedList(){clear();delete prevPtr;delete currPtr;
}template<class T>
LinkedList<T> &LinkedList<T>::operator=(const LinkedList<T> &L){copy(L);
}template<class T>
int LinkedList<T>::getSize() const{return size;
}template<class T>
bool LinkedList<T>::isEmpty() const{return size == 0;
}template<class T>
void LinkedList<T>::reset(int pos){if (pos >= 0 && pos <= size){position = 0;currPtr = front;prevPtr = NULL;while (pos--)  next();}else {position = pos;currPtr = prevPtr = NULL;}
}template<class T>
void LinkedList<T>::next(){++position;prevPtr = currPtr;if (currPtr != NULL)  currPtr = currPtr->nextNode();
}template<class T>
bool LinkedList<T>::endOfList() const{return position == size;/*错误的如下return position == size - 1;*/
}template<class T>
int LinkedList<T>::currentPosition() const{return position;
}template<class T>
Node<T> *LinkedList<T>::newNode(const T &item, Node<T> *ptrNext){Node<T> *p = new Node<T>(item, ptrNext);assert(p != NULL);return p;
}template<class T>
void LinkedList<T>::insertFront(const T &item){front = newNode(item, front);if(isEmpty())rear = front;++size;reset(++position);
}template<class T>
void LinkedList<T>::insertRear(const T &item){Node<T> *p = newNode(item);if (isEmpty()) {front = rear = p;} else {rear->insertAfter(p);rear = p;}++size;reset(position);
}template<class T>
void LinkedList<T>::insertAt(const T &item){if(currPtr != NULL){Node<T> *p = newNode(item, currPtr);if (prevPtr != NULL) prevPtr->insertAfter(p);else front = rear = p;++size;reset(++position);}
}template<class T>
void LinkedList<T>::insertAfter(const T &item){if(currPtr != NULL){Node<T> *p = newNode(item, currPtr->next);currPtr->insertAfter(p);++size;reset(position);}
}template<class T>
T LinkedList<T>::deleteFront(){assert(!isEmpty());Node<T> *p = front;front = front->nextNode();if (--size == 0)  front = rear = NULL;reset(--position);T item = p->data;freeNode(p);return item;
}template<class T>
void LinkedList<T>::deleteCurrent(){assert(!isEmpty());Node<T> *p = currPtr;if(currPtr){if (currPtr == front)    front = front->nextNode();else if (currPtr == rear)   rear = prevPtr;else if (prevPtr != NULL)  prevPtr->deleteAfter();freeNode(currPtr);--size;reset(position);}
}template<class T>
T &LinkedList<T>::data(){return currPtr->data;
}template<class T>
const T& LinkedList<T>::data() const{return currPtr->data;
}template<class T>
void LinkedList<T>::clear(){while (!isEmpty())deleteFront();
}#endif //LINKEDLIST_H

然后是教材里提供的主函数中也有一个错误,比如说链表中两个相邻的5,第二的就不会被删除,改后如下:

#include<iostream>
#include"LinkedList.h"using namespace std;int main(){LinkedList<int> list;for(int i=0;i<10;i++){int item;cin>>item;list.insertFront(item);}cout<<"List: ";list.reset();while(!list.endOfList()){cout<<list.data()<<" ";list.next();}cout<<endl;//输入需要删除的整数int key;cout<<"Please enter some integer needed to be deleted: ";cin>>key;list.reset();while(!list.endOfList()){if(list.data()==key)list.deleteCurrent();elselist.next();/*原文如下:if(...)list.delete....list.next();*/}//输出链表cout<<"List: ";list.reset();while(!list.endOfList()){cout<<list.data()<<" ";list.next();}cout<<endl;return 0;
}

目前只发现这些错误,如再有发现烦请告知
这本教材里还是有很多错误的
对你有帮助的话点个赞吧>_<

c++语言程序设计(第四版)郑莉链表的实现源码相关推荐

  1. C++语言程序设计第四版郑莉

    C++语言程序设计第四版郑莉--学习笔记 第四章 类与对象 4.3构造函数与析构函数 例4-2 在程序主函数中,3个部分分别给出复制构造函数调用的3种情况. #include <iostream ...

  2. c 语言程序设计第四版郑莉答案,C 语言程序设计郑莉(第4版)

    <C++语言程序设计(在线教学版?第4版)/清华大学计算机系列教材,普通高等教育"十一五"规划教材>针对程序设计的初学者,以面向对象的程序设计思想为主线,以通俗易懂的方 ...

  3. java语言程序设计郑莉课后答案_java语言程序设计 第2版 (郑莉)课后习题答案.doc...

    java语言程序设计 第2版 (郑莉)课后习题答案.doc JAVA语言程序设计第2版郑莉第二章习题答案1什么是对象.类,它们之间的联系答1)对象是包含现实世界物体特征的抽象实体,它反映系统为之保存信 ...

  4. C++语言程序设计(第4版)郑莉练习

    C++练习(持续更新) 教材:c++语言程序设计第四版 [教材习题4_13:定义Circle类并计算面积] [问题描述] 定义一个Circle类,有数据成员radius(半径),成员函数getArea ...

  5. C++语言程序设计第五版 - 郑莉(第四章课后习题)

    第4章  类与对象 4-9设计并测试一个名为rectangle的矩形类,其属性为矩形的左下角与右上角坐标,根据坐标能计算矩形的面积. #include <iostream> using n ...

  6. 第三章 函数 C++语言程序设计第五版 - 郑莉

    本专栏为C++学习笔记,参考书籍为:C++语言程序设计 第五版 -清华大学出版社- 郑莉 B站视频:https://space.bilibili.com/702528832/video PPT与代码已 ...

  7. C++语言程序设计第五版 - 郑莉-绪论(一)

    本专栏为C++学习笔记,参考书籍为:C++语言程序设计 第五版 -清华大学出版社- 郑莉 B站视频:https://space.bilibili.com/702528832/video PPT与代码已 ...

  8. C++语言程序设计第五版 - 郑莉(第六章课后习题)

    第6章   数组.指针与字符串 6-20 实现一个名为 SimpleCircle 的简单圆类.其数据成员 int* itsRadius 为一个指向其半径值的指针,存放其半径值.设计对数据成员的各种操作 ...

  9. C++语言程序设计第五版 - 郑莉(第七章课后习题)

    第7章  继承与派生 7-5 定义一个基类 Shape,在此基础上派生出 Rectangle 和 Circle,二者都有 getArea()函数计算对象的面积.使用 Rectangle类创建一个派生类 ...

最新文章

  1. 使用线程池时一定要注意的五个点
  2. android中Logcat的TAG过滤
  3. UNITY 手动定制inspector
  4. mysql or走索引吗_加了索引,mysql查询就一定会用吗?
  5. 我的服务端JS文件合并工具
  6. 如何批量下载《大数据分析实用技术案例》的学习视频
  7. 无法打开包括文件: “Eigen/Dense”【CMakeLists 解决方案】
  8. SpringBoot 整合 Editormd(完整版)
  9. 淘宝省市区获取,淘宝国家省市区数据获取 2018-01-09更新
  10. html pc页面连接到微信,PC上对限制在微信客户端访问的html页面进行调试
  11. nvidia怎么查看
  12. go的内存管理和内存逃逸
  13. 【大数据----Spark】Spark入门教程[3]
  14. android 自定义锁屏api,Android锁屏小部件
  15. 3D到2D的转换方式
  16. 《微信小程序商城界面设计实战》--学习笔记作业
  17. 办公室常见问题解决:不能连接局域网的共享打印机
  18. MusicPlayerByService
  19. 相机光学(七)——光源
  20. 已知有十六支男子足球队参加2008北京奥运会。写一个程序,把这16支球队随机分为4个组。

热门文章

  1. 流水线中使用 docker in pod 方式构建容器镜像
  2. mysql安装简书_MySQL 安装和配置
  3. SAP SD:VL10A上清不掉的尾巴
  4. android 无线调试_Android 11的无线调试
  5. 用Python解析HTML,BeautifulSoup使用简介
  6. 世界上最远的距离——泰戈尔 (MP3下载)
  7. DB2: SQL0902C A system error occurred. Subsequent SQL statements cannot be processed. IBM software
  8. 华为java面试题目
  9. PDF无法打印 提示输入文件名
  10. 推荐 5 个好玩的 ChatGPT 开源应用