查看文章 |
2. 数据结构 顺序 链表 List_Simple 头为倒序 2005.01
2006-07-24 17:36
#include "iostream.h" template <class ELEM> class list { protected: struct ListNode { ELEM data; ListNode *link; }; ListNode *first; public: list(); ~list(); void add(ELEM e); void RemoveAfter(ELEM e); ELEM FindIndex(ELEM e); void PrintList(); void Insert(ELEM e, int i); void display(); }; template <class ELEM> list<ELEM>::list() { first = NULL; } template <class ELEM> list<ELEM>::~list() { ListNode *p = first; if (p != NULL) { first = first->link; delete p; p = first; } } // 函数功能:把插入的节点做头节点 template <class ELEM> void list<ELEM>::add(ELEM e) { ListNode *p = new ListNode; p->data = e; p->link = first; first = p; } template <class ELEM> void list<ELEM>::RemoveAfter(ELEM e) { ListNode *p = first; ListNode *q; if (first->data == e) { first = first->link; delete p; } for (p = first; p->link != NULL; p = p->link) { if (p->link->data != e) continue; else { q = p->link; p->link = q->link; delete q; } } } template <class ELEM> ELEM list<ELEM>::FindIndex(ELEM e) { for (ListNode *p = first; p != NULL; p = p->link) { if (p->data == e) return e; } return -1; } // 函数说明:从0开始 template <class ELEM> void list<ELEM>::Insert(ELEM e, int i) { ListNode *q; int j = 0; for (ListNode *p = first; p != NULL; p = p->link) { if (i == j) { q = new ListNode; q->data = e; q->link = p->link; p->link = q; return; } j ++; } } template <class ELEM> void list<ELEM>::display() { ListNode *p; for (p = first; p != NULL; p = p->link) cout << p->data << " "; cout << endl << endl; } void main() { list<int> floatlist; for (int i = 0; i < 10; i ++) floatlist.add(i); floatlist.display(); cout << "insert 55\n\n"; floatlist.Insert(55 ,3); floatlist.display(); int n = floatlist.FindIndex(55); cout << n << endl << endl; cout << "del 7\n\n"; floatlist.RemoveAfter(7); floatlist.display(); return; } |
最近读者:

