数据结构-------单链表(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 }

 

运行结果:


 


 

转载于:https://www.cnblogs.com/JJ-kelion/p/4920841.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值