数据结构-------单链表(C++)
相关信息:
1 /** 2 3 * @subject 数据结构 实验2 4 * @author 信管1142班 201411671210 赖俊杰 5 * @project 单链表 6 * @time 2015年10月29日16:09:34 7 */
节点类:
//Node.h template<typename DataType> class Node { public: DataType data_; Node<DataType> *next_; };
链表类:
1 // LinkList.h 2 3 #include<iostream> 4 #include"Node.h" 5 6 using std::cout; 7 using std::endl; 8 9 template <typename DataType> 10 class LinkList 11 { 12 public: 13 LinkList(); //建立只有头节点的空链表 14 LinkList(DataType a[], int n); //建立有n个元素的单链表 15 ~LinkList(); 16 17 int Length(); 18 DataType Get_value(int serial_number); //在单链表中查找序号为serial_number的元素 19 int Locate_serial_number(DataType value); //查找值为value的元素序号 20 void insert(int i, DataType value); //在第i个位置插入值为value的元素 21 DataType delete_value(int serial_number); //删除序号为serial_number的元素 22 void PrintList(); 23 24 private: 25 Node<DataType>*first_; 26 27 }; 28 29 template<typename DataType> 30 inline LinkList<DataType>::LinkList() 31 { 32 first_ = new Node; 33 first_->next_ = 0; 34 } 35 36 template<typename DataType> 37 inline LinkList<DataType>::LinkList(DataType a[], int n) 38 { 39 40 first_ = new Node<DataType>; 41 Node<DataType> *r = first_; 42 for (int i = 0; i < n; ++i) 43 { 44 Node<DataType> *s = new Node<DataType>; 45 s->data_= a[i]; 46 r->next_ = s; 47 r = s; 48 } 49 r->next_ = 0; 50 } 51 52 template<typename DataType> 53 inline LinkList<DataType>::~LinkList() 54 { 55 while (first_->next_ != 0) 56 { 57 Node<DataType> *p = new Node<DataType>; 58 p = first_; 59 first_ = first_->next_; 60 delete p; 61 } 62 } 63 64 template<typename DataType> 65 inline int LinkList<DataType>::Length() 66 { 67 Node<DataType> *p = new Node<DataType>; 68 p = first_->next_; 69 int count = 0; 70 while (p != 0) 71 { 72 p = p->next_; 73 ++count; 74 } 75 return count; 76 } 77 78 template<typename DataType> 79 inline DataType LinkList<DataType>::Get_value(int serial_number) 80 { 81 Node<DataType> *p = new Node<DataType>; 82 p = first_->next_; 83 int count = 1; 84 while (p != 0 && count < serial_number) 85 { 86 p = p->next_; 87 ++count; 88 } 89 if (p == 0) 90 { 91 throw"non-existent"; 92 } 93 else 94 { 95 return p->data_; 96 } 97 } 98 99 template<typename DataType> 100 inline int LinkList<DataType>::Locate_serial_number(DataType value) 101 { 102 Node<DataType> *p = new Node<DataType>; 103 p = first_->next_; 104 int count = 1; 105 while (p!=0) 106 { 107 if (p->data_==value) 108 { 109 return count; 110 } 111 p = p->next_; 112 ++count; 113 } 114 return 0; 115 116 } 117 118 template<typename DataType> 119 inline void LinkList<DataType>::insert(int i, DataType value) 120 { 121 Node<DataType> *p = new Node<DataType>; 122 p = first_; 123 int count = 0; 124 while (p != 0 && count < i - 1) 125 { 126 p = p->next_; 127 ++count; 128 } 129 if (p == 0) 130 { 131 throw"seat-non-existent"; 132 } 133 else 134 { 135 Node<DataType> *s = new Node<DataType>; 136 s->data_ = value; 137 s->next_ = p->next_; 138 p->next_ = s; 139 } 140 } 141 142 template<typename DataType> 143 inline DataType LinkList<DataType>::delete_value(int serial_number) 144 { 145 Node<DataType> *p = new Node<DataType>; 146 p = first_; 147 int count = 0; 148 while (p != 0 && count < serial_number - 1) 149 { 150 p = p->next_; 151 ++count; 152 } 153 if (p==0||p->next_==0) 154 { 155 throw"seat-non-existent"; 156 } 157 else 158 { 159 Node<DataType>*q = p->next_; 160 DataType x = q->data_; 161 p->next_ = q->next_; 162 delete q; 163 return x; 164 } 165 } 166 167 168 169 template<typename DataType> 170 inline void LinkList<DataType>::PrintList() 171 { 172 Node<DataType>*p = new Node<DataType>; 173 p = first_->next_; 174 while (p!=0) 175 { 176 cout << p->data_ << " "; 177 p = p->next_; 178 } 179 cout << endl; 180 }
测试类:
1 //main.cpp 2 3 #include"LinkList.h" 4 #include"Node.h" 5 6 7 8 int main() { 9 int r[5] = { 1,2,3,4,5 }; 10 LinkList<int>L(r, 5); 11 12 cout << "第一次输出:"; 13 L.PrintList(); 14 15 cout << "第2个位置插入3后:"; 16 L.insert(2, 3); 17 L.PrintList(); 18 19 cout << "值为5的元素位置:"; 20 cout << L.Locate_serial_number(5) << endl; 21 22 cout << "删除第一个元素后:"; 23 L.delete_value(1); 24 L.PrintList(); 25 26 return 0; 27 }
运行结果: