顺序访问的线性群体 -- 链表
链表就不进行说明了,直接上模板
单链表的结点模板
template <class T>
class Node {
private:
Node<T> *next;
public:
T data; // 理论放到 private
Node(const T& item, Node<T> *next = 0);
void insertAfter(Node<T> *p);
Node<T> *deleteAfter();
Node<T> *nextNode() const;
};
template <class T>
Node<T>::Node(const T& data, Node<T> *next = 0):data(data), next(next) {}
template <class T>
Node<T> *Node<T>::nextNode() {
return next;
}
template <class T>
void Node<T>::insertAfter(Node<T> *p) {
p->next = next;
next = p;
}
template <class T>
Node<T> *Node<T>::deleteAfter(void) { // 删除操作还要返回是有时需要继续操作删除的结点
Node<T> *tempPtr = next;
if(next == 0)
return 0;
next = tempPtr->next;
return tempPrt;
}
链表类示例
使用 STL 库的链表类模板
从键盘输入 10 个整数,用这些整数生成一个链表,按顺序输出链表中结点的数值。
输入一个待查找整数,在链表中查找该整数,删除所在结点,输出链表
程序结束时清空链表
#include <iostream>
#include "LinkedList.h"
using namespace std;
int main() {
LinkedList<int> list;
// 1
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;
// 2
int key;
cout << "Please enter some integer neeeded to be deleted: ";
cin >> key;
list.reset();
while(! list.endOfList() ) {
if(list.data() == key)
list.deleteCurrent();
list.next();
}
cout << "list : ";
// 3
list.reset();
while(! list.endOfList() ) {
cout << list.data() << " ";
list.next();
}
cout << endl;
return 0;
}