一个简单的实现例子,只用到了插入函数以及输出函数,初始化26个英文字母

  1  #include <iostream>
2 using namespace std;
3 template <typename T>
4 class List;//不写Node认不到List
5 template <typename T>
6 class Node{ //单链表的结点
7 friend class List<T>;
8 private:
9 T data; //储存表中元素
10 Node<T> *next; //指向表中下一个元素的指针
11 };
12 template <typename T>
13 class List{ //用指针实现表
14 public:
15 List(){first=0;} //构造函数
16 ~List(); //析构函数
17 bool empty()const {return 0==first;} //测试表是否为空
18 int size()const; //返回表的长度
19 bool retrieve(int k,T& x)const; //返回表位置K处的元素X
20 int locate(const T& x)const; //元素X在表中的位置
21 List<T>& insert(int k,const T& x); //在位置K处插入元素X
22 List<T>& erase(int k,T& x); //在位置K处删除元素X
23 void print_list(); //打印表
24 private:
25 Node<T> *first;
26 };
27 template <typename T>
28 List<T>::~List()
29 {
30 Node<T> *current;
31 while(first)
32 {
33 current=first->next;
34 delete first;
35 first=current;
36 }
37 }
38 template <typename T>
39 int List<T>::size()const
40 {
41 Node<T> *current=first;
42 int len=0;
43 while(current)
44 {
45 len++;
46 current=current->next;
47 }
48 return len;
49 }
50 template <typename T>
51 bool List<T>::retrieve(int k,T& x)const
52 {
53 if(k<1)return false;
54 Node<T> *current=first;
55 int index=1;
56 while(current && index<k)
57 {
58 current=current->next;
59 index++;
60 }
61 if(current)
62 {
63 x=current->data;
64 return true;
65 }
66 return false;
67 }
68 template <typename T>
69 int List<T>::locate(const T& x)const
70 {
71 Node<T> *current=first;
72 int index=1;
73 while(current && current->data!=x)
74 {
75 current=current->next;
76 index++;
77 }
78 if (current) return index;
79 return 0;
80 }
81 template <typename T>
82 List<T>& List<T>::insert(int k,const T& x)
83 {
84 Node<T> *current=first;
85 for(int i=1;i<k && current;i++)
86 current=current->next;
87 Node<T> *p= new Node<T>;
88 p->data=x;
89 if(k)
90 {
91 p->next=current->next;
92 current->next=p;
93 }
94 else//k为0时插在表首
95 {
96 p->next=first;
97 first=p;
98 }
99 return *this;
100 }
101 template <typename T>
102 List<T>& List<T>::erase(int k,T& x)
103 {
104 Node<T> *current=first; //搜索指针
105 if (1==k) first=first->next;
106 else
107 {
108 Node<T> *p=first;
109 for(int i=1;i<k-1 && p;i++)
110 p=p->next; //在位置k-1处停下
111 current=p->next; //搜索指针指向位置k
112 p->next=current->next //实施删除
113 }
114 x=current->data; //返回删除元素置于x中
115 delete p;
116 return *this;
117 }
118 template <typename T>
119 void List<T>::print_list()
120 {
121 Node<T> *current;
122 for(current=first;current;current=current->next)
123 cout <<current->data <<" ";
124 }
125 int main()
126 {
127 char s1,s2;
128 s1='A';
129 s2='Z';
130 List<char> p1;
131 for(int i=s2;i>=s1;i--)
132 p1.insert(0,i);
133 p1.print_list();
134 return 0;
135 }