只是罗列代码,大家都看的懂
1//Node.h
2//By Hafeyang
3//该程序实现一个节点类
4//
5//头文件部分
6#include <string>
7#include <iostream>
8#define null 0
9using namespace std;
10
11//类Node的实现
12class Node
13{
14 //属性
15public:
16 string Data; //声名数据为字符串
17 Node * Next; //指向下一个节点
18
19 //方法及其实现
20public:
21 Node(string data,Node * next) //构造函数1
22 {
23 this->Data=data;
24 this->Next=next;
25 }
26
27 Node() //构造函数2
28 {
29 this->Data="";
30 this->Next=null;
31 }
32 ~Node() //析造函数
33 {
34 //cout<<"Node "<<Data<<"Disposed"<<endl;
35 }
36 Dispose() //自定义释放内存函数 ?????
37 {
38 this->Data="";
39 this->Next=null;
40 }
41};
42
43
2//By Hafeyang
3//该程序实现一个节点类
4//
5//头文件部分
6#include <string>
7#include <iostream>
8#define null 0
9using namespace std;
10
11//类Node的实现
12class Node
13{
14 //属性
15public:
16 string Data; //声名数据为字符串
17 Node * Next; //指向下一个节点
18
19 //方法及其实现
20public:
21 Node(string data,Node * next) //构造函数1
22 {
23 this->Data=data;
24 this->Next=next;
25 }
26
27 Node() //构造函数2
28 {
29 this->Data="";
30 this->Next=null;
31 }
32 ~Node() //析造函数
33 {
34 //cout<<"Node "<<Data<<"Disposed"<<endl;
35 }
36 Dispose() //自定义释放内存函数 ?????
37 {
38 this->Data="";
39 this->Next=null;
40 }
41};
42
43
1//List .h
2//By Hafeyang
3//该类实现类链表
4#include "Node.h"
5class List
6{
7 //属性
8public:
9 Node * Head; //头节点指针
10 int Length; //List长度
11
12 //方法
13 List()
14 {
15 Length=0;
16 Head=null;
17 }
18public:
19 int AppendNode(Node * newNode) //在链表的为部添加节点
20 {
21 try
22 {
23 if(Length==0) //长度为零添加第一个节点
24 {
25 Head=newNode;
26 Head->Next=null;
27 }
28 else //在链表尾部添加节点
29 {
30 Node * temp;
31 temp=Head;
32 while(temp->Next!=null)
33 {
34 temp=temp->Next;
35 }
36 temp->Next=newNode;
37 newNode->Next=null;
38 }
39 }
40 catch()
41 {
42 cout<<"Append Node "<<newNode->Data<<" Failed!"<<endl;
43 return 0; //返回0 插入失败
44 }
45 Length++;
46 cout<<"Append Node "<<newNode->Data<<" Seccessfully!"<<endl;
47 return 1; //返回1 插入成功
48 }
49
50 void PrintList() //输出所有节点数据
51 {
52 Node * temp=Head;
53 cout<<endl;
54 cout<<"********Print The List Start********"<<endl;
55 while(temp!=null)
56 {
57 cout<<"Node Data:"<<temp->Data<<endl;
58 temp=temp->Next;
59 }
60 cout<<"The Length of the List:"<<Length<<endl;
61 cout<<"********Print The List End**********"<<endl;
62 cout<<endl;
63 }
64
65
66 int DeleteNode(Node * deleteNode)
67 {
68 Node * temp=Head;
69
70
71 if(Head==deleteNode) //删除头节点
72 {
73 return deleteHead();
74 }
75
76
77 while(temp!=null)
78 {
79 if(temp->Next==deleteNode)
80 {
81 break; //找到deleteNode 的前一个节点
82 }
83 temp=temp->Next;
84 }
85
86 if(temp==null) //没有找到该节点
87 {
88 cout<<" Node"<<deleteNode->Data<<" does not exist!"<<endl;
89 return 0; //删除失败 返回0
90 }
91 //此时temp 为deleteNode 的前一个节点
92 temp->Next=deleteNode->Next;
93
94
95 cout<<"Delete Node "<<deleteNode->Data<<" Seccessfully!"<<endl;
96
97 deleteNode->~Node(); //调用析构函数 释放节点
98 Length--;
99 return 1;
100 }
101
102 int deleteHead()
103 {
104 try
105 {
106 Head=Head->Next;
107 cout<<"Delete Head Seccessfully!"<<endl;
108 Length--;
109
110 if(Head!=null)
111 {
112 Head->~Node(); //调用析构函数 释放节点
113 }
114
115 return 1;
116 }
117 catch()
118 {
119 cout<<"Delete Head Failed"<<endl;
120 return 0;
121 }
122 }
123};
2//By Hafeyang
3//该类实现类链表
4#include "Node.h"
5class List
6{
7 //属性
8public:
9 Node * Head; //头节点指针
10 int Length; //List长度
11
12 //方法
13 List()
14 {
15 Length=0;
16 Head=null;
17 }
18public:
19 int AppendNode(Node * newNode) //在链表的为部添加节点
20 {
21 try
22 {
23 if(Length==0) //长度为零添加第一个节点
24 {
25 Head=newNode;
26 Head->Next=null;
27 }
28 else //在链表尾部添加节点
29 {
30 Node * temp;
31 temp=Head;
32 while(temp->Next!=null)
33 {
34 temp=temp->Next;
35 }
36 temp->Next=newNode;
37 newNode->Next=null;
38 }
39 }
40 catch()
41 {
42 cout<<"Append Node "<<newNode->Data<<" Failed!"<<endl;
43 return 0; //返回0 插入失败
44 }
45 Length++;
46 cout<<"Append Node "<<newNode->Data<<" Seccessfully!"<<endl;
47 return 1; //返回1 插入成功
48 }
49
50 void PrintList() //输出所有节点数据
51 {
52 Node * temp=Head;
53 cout<<endl;
54 cout<<"********Print The List Start********"<<endl;
55 while(temp!=null)
56 {
57 cout<<"Node Data:"<<temp->Data<<endl;
58 temp=temp->Next;
59 }
60 cout<<"The Length of the List:"<<Length<<endl;
61 cout<<"********Print The List End**********"<<endl;
62 cout<<endl;
63 }
64
65
66 int DeleteNode(Node * deleteNode)
67 {
68 Node * temp=Head;
69
70
71 if(Head==deleteNode) //删除头节点
72 {
73 return deleteHead();
74 }
75
76
77 while(temp!=null)
78 {
79 if(temp->Next==deleteNode)
80 {
81 break; //找到deleteNode 的前一个节点
82 }
83 temp=temp->Next;
84 }
85
86 if(temp==null) //没有找到该节点
87 {
88 cout<<" Node"<<deleteNode->Data<<" does not exist!"<<endl;
89 return 0; //删除失败 返回0
90 }
91 //此时temp 为deleteNode 的前一个节点
92 temp->Next=deleteNode->Next;
93
94
95 cout<<"Delete Node "<<deleteNode->Data<<" Seccessfully!"<<endl;
96
97 deleteNode->~Node(); //调用析构函数 释放节点
98 Length--;
99 return 1;
100 }
101
102 int deleteHead()
103 {
104 try
105 {
106 Head=Head->Next;
107 cout<<"Delete Head Seccessfully!"<<endl;
108 Length--;
109
110 if(Head!=null)
111 {
112 Head->~Node(); //调用析构函数 释放节点
113 }
114
115 return 1;
116 }
117 catch()
118 {
119 cout<<"Delete Head Failed"<<endl;
120 return 0;
121 }
122 }
123};
1
2#include "List.h"
3 void main()
4 {
5 Node newNode1=Node("NodeData1",null);//声名 节点
6 Node newNode2=Node("NodeData2",null);
7 Node newNode3=Node("NodeData3",null);
8 List newList=List(); //声明 链表
9
10 newList.AppendNode(&newNode1);
11 newList.AppendNode(&newNode2);
12 newList.AppendNode(&newNode3);
13 newList.PrintList();
14
15 newList.DeleteNode(&newNode3);
16 newList.PrintList();
17
18
19 newList.DeleteNode(&newNode2);
20 newList.PrintList();
21
22 newList.DeleteNode(&newNode1);
23 newList.PrintList();
24 char a;
25 cin>>a;
26 }
2#include "List.h"
3 void main()
4 {
5 Node newNode1=Node("NodeData1",null);//声名 节点
6 Node newNode2=Node("NodeData2",null);
7 Node newNode3=Node("NodeData3",null);
8 List newList=List(); //声明 链表
9
10 newList.AppendNode(&newNode1);
11 newList.AppendNode(&newNode2);
12 newList.AppendNode(&newNode3);
13 newList.PrintList();
14
15 newList.DeleteNode(&newNode3);
16 newList.PrintList();
17
18
19 newList.DeleteNode(&newNode2);
20 newList.PrintList();
21
22 newList.DeleteNode(&newNode1);
23 newList.PrintList();
24 char a;
25 cin>>a;
26 }