【C++算法与数据结构学习笔记------线性表】用指针实现表

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

  1  #include 
2 using namespace std;
3 template
4 class List;//不写Node认不到List
5 template
6 class Node{ //单链表的结点
7 friend class List;
8 private:
9 T data; //储存表中元素
10 Node *next; //指向表中下一个元素的指针
11 };
12 template
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& insert(int k,const T& x); //在位置K处插入元素X
22 List& erase(int k,T& x); //在位置K处删除元素X
23 void print_list(); //打印表
24 private:
25 Node *first;
26 };
27 template
28 List::~List()
29 {
30 Node *current;
31 while(first)
32 {
33 current=first->next;
34 delete first;
35 first=current;
36 }
37 }
38 template
39 int List::size()const
40 {
41 Node *current=first;
42 int len=0;
43 while(current)
44 {
45 len++;
46 current=current->next;
47 }
48 return len;
49 }
50 template
51 bool List::retrieve(int k,T& x)const
52 {
53 if(k<1)return false;
54 Node *current=first;
55 int index=1;
56 while(current && index 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
69 int List::locate(const T& x)const
70 {
71 Node *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
82 List& List::insert(int k,const T& x)
83 {
84 Node *current=first;
85 for(int i=1;i 86 current=current->next;
87 Node *p= new Node;
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
102 List& List::erase(int k,T& x)
103 {
104 Node *current=first; //搜索指针
105 if (1==k) first=first->next;
106 else
107 {
108 Node *p=first;
109 for(int i=1;i1 && 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
119 void List::print_list()
120 {
121 Node *current;
122 for(current=first;current;current=current->next)
123 cout <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 }



 

转载于:https://www.cnblogs.com/EnCaL/archive/2012/03/07/2384194.html

你可能感兴趣的:(【C++算法与数据结构学习笔记------线性表】用指针实现表)